Newer
Older
KeeperJerry_Launcher / Launcher / source / request / auth / AuthRequest.java
package launcher.request.auth;

import java.io.IOException;
import java.util.Arrays;

import launcher.Launcher;
import launcher.LauncherAPI;
import launcher.client.PlayerProfile;
import launcher.helper.SecurityHelper;
import launcher.helper.VerifyHelper;
import launcher.request.Request;
import launcher.serialize.HInput;
import launcher.serialize.HOutput;

public final class AuthRequest extends Request<AuthRequest.Result> {
	private final String login;
	private final byte[] encryptedPassword;

	@LauncherAPI
	public AuthRequest(Launcher.Config config, String login, byte[] encryptedPassword) {
		super(config);
		this.login = VerifyHelper.verify(login, VerifyHelper.NOT_EMPTY, "Login can't be empty");
		this.encryptedPassword = Arrays.copyOf(encryptedPassword, encryptedPassword.length);
	}

	@LauncherAPI
	public AuthRequest(String login, byte[] encryptedPassword) {
		this(null, login, encryptedPassword);
	}

	@Override
	public Type getType() {
		return Type.AUTH;
	}

	@Override
	protected Result requestDo(HInput input, HOutput output) throws IOException {
		output.writeString(login, 255);
		output.writeByteArray(encryptedPassword, SecurityHelper.CRYPTO_MAX_LENGTH);
		output.flush();

		// Read UUID and access token
		readError(input);
		PlayerProfile pp = new PlayerProfile(input);
		String accessToken = input.readASCII(-SecurityHelper.TOKEN_STRING_LENGTH);
		return new Result(pp, accessToken);
	}

	public static final class Result {
		@LauncherAPI public final PlayerProfile pp;
		@LauncherAPI public final String accessToken;

		private Result(PlayerProfile pp, String accessToken) {
			this.pp = pp;
			this.accessToken = accessToken;
		}
	}
}