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

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

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

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

	@Override
	@SuppressWarnings("DesignForExtension")
	public void verify() {
		getDigest();
	}

	@LauncherAPI
	public final SecurityHelper.DigestAlgorithm getDigest() {
		return SecurityHelper.DigestAlgorithm.byName(digest);
	}

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

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