package me.corriekay.pokegoutil.utils.helpers;
import java.util.function.Consumer;
import com.pokegoapi.api.PokemonGo;
import com.pokegoapi.api.device.DeviceInfo;
import com.pokegoapi.api.listener.LoginListener;
import com.pokegoapi.auth.CredentialProvider;
import com.pokegoapi.exceptions.CaptchaActiveException;
import com.pokegoapi.exceptions.LoginFailedException;
import com.pokegoapi.exceptions.RemoteServerException;
import com.pokegoapi.exceptions.hash.HashException;
import com.pokegoapi.util.hash.legacy.LegacyHashProvider;
import com.pokegoapi.util.hash.pokehash.PokeHashKey;
import com.pokegoapi.util.hash.pokehash.PokeHashProvider;
import me.corriekay.pokegoutil.utils.ConfigKey;
import me.corriekay.pokegoutil.utils.ConfigNew;
import me.corriekay.pokegoutil.utils.CustomDeviceInfo;
import me.corriekay.pokegoutil.utils.SolveCaptcha;
/**
* Class to concentrate login method to be used in both interfaces: Swing and JavaFX.
*/
public final class LoginHelper {
/** Prevent initializing this class. */
private LoginHelper() {
}
/**
* Main login method.
* @param go PokemonGo api
* @param credentialProvider CredentialProvider (Google or PTC)
* @param loginFunction Consumer function that will receive API after successful login
* @throws LoginFailedException if Login fail
* @throws CaptchaActiveException if a Captcha is active
* @throws HashException
*/
public static void login(final PokemonGo go, final CredentialProvider credentialProvider, final Consumer<PokemonGo> loginFunction)
throws LoginFailedException, CaptchaActiveException, HashException {
//Add listener to listen for the captcha URL
go.addListener(new LoginListener() {
@Override
public void onLogin(final PokemonGo api) {
loginFunction.accept(api);
}
@Override
public void onChallenge(final PokemonGo api, final String challengeURL) {
System.out.println("Captcha received! URL: " + challengeURL);
final SolveCaptcha captcha = new SolveCaptcha(api, challengeURL);
captcha.setVisible(true);
}
});
if (ConfigNew.getConfig().getBool(ConfigKey.DEVICE_INFO_USE_CUSTOM)) {
go.setDeviceInfo(new DeviceInfo(new CustomDeviceInfo()));
}
final String pokeHashKey = ConfigNew.getConfig().getString(ConfigKey.LOGIN_POKEHASHKEY);
try {
if (pokeHashKey != null) {
final PokeHashProvider pokeHashProvider = new PokeHashProvider(PokeHashKey.from(pokeHashKey), true);
pokeHashProvider.setEndpoint("http://pokehash.buddyauth.com/api/v127_2/hash");
go.login(credentialProvider, pokeHashProvider);
} else {
go.login(credentialProvider, new LegacyHashProvider());
}
} catch (RemoteServerException e) {
e.printStackTrace();
}
}
}