Newer
Older
KeeperJerry_Launcher / LaunchServer / source / auth / provider / DigestAuthProvider.java
package launchserver.auth.provider;

import launcher.LauncherAPI;
import launcher.helper.SecurityHelper;
import launcher.helper.SecurityHelper.DigestAlgorithm;
import launcher.serialize.config.entry.BlockConfigEntry;
import launcher.serialize.config.entry.StringConfigEntry;
import launchserver.auth.AuthException;

public abstract class DigestAuthProvider extends AuthProvider {
    private final DigestAlgorithm digest;

    @LauncherAPI
    protected DigestAuthProvider(BlockConfigEntry block) {
        super(block);
        digest = DigestAlgorithm.byName(block.getEntryValue("digest", StringConfigEntry.class));
    }

    @LauncherAPI
    protected final void verifyDigest(String validDigest, String password) throws AuthException {
        boolean valid;
        if (digest == DigestAlgorithm.PLAIN) {
            valid = password.equals(validDigest);
        } else if (validDigest == null) {
            valid = false;
        } else {
            byte[] actualDigest = SecurityHelper.digest(digest, password);
            valid = SecurityHelper.toHex(actualDigest).equals(validDigest);
        }

        // Verify is valid
        if (!valid) {
            authError("Incorrect username or password");
        }
    }
}