mirror of
https://github.com/GravitLauncher/Launcher
synced 2024-11-15 11:39:11 +03:00
[FEATURE] Support 2FA in JsonAuthProvider
This commit is contained in:
parent
d1e671a935
commit
7886cce6f8
1 changed files with 28 additions and 3 deletions
|
@ -5,7 +5,9 @@
|
||||||
import pro.gravit.launcher.HTTPRequest;
|
import pro.gravit.launcher.HTTPRequest;
|
||||||
import pro.gravit.launcher.Launcher;
|
import pro.gravit.launcher.Launcher;
|
||||||
import pro.gravit.launcher.request.auth.AuthRequest;
|
import pro.gravit.launcher.request.auth.AuthRequest;
|
||||||
|
import pro.gravit.launcher.request.auth.password.Auth2FAPassword;
|
||||||
import pro.gravit.launcher.request.auth.password.AuthPlainPassword;
|
import pro.gravit.launcher.request.auth.password.AuthPlainPassword;
|
||||||
|
import pro.gravit.launcher.request.auth.password.AuthTOTPPassword;
|
||||||
import pro.gravit.launchserver.auth.AuthException;
|
import pro.gravit.launchserver.auth.AuthException;
|
||||||
import pro.gravit.utils.helper.SecurityHelper;
|
import pro.gravit.utils.helper.SecurityHelper;
|
||||||
|
|
||||||
|
@ -15,12 +17,32 @@
|
||||||
|
|
||||||
public final class JsonAuthProvider extends AuthProvider {
|
public final class JsonAuthProvider extends AuthProvider {
|
||||||
public URL url;
|
public URL url;
|
||||||
|
public boolean enable2FA;
|
||||||
public String apiKey;
|
public String apiKey;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AuthProviderResult auth(String login, AuthRequest.AuthPasswordInterface password, String ip) throws IOException {
|
public AuthProviderResult auth(String login, AuthRequest.AuthPasswordInterface password, String ip) throws IOException {
|
||||||
|
String firstPassword;
|
||||||
|
String secondPassword;
|
||||||
|
if(!enable2FA) {
|
||||||
if (!(password instanceof AuthPlainPassword)) throw new AuthException("This password type not supported");
|
if (!(password instanceof AuthPlainPassword)) throw new AuthException("This password type not supported");
|
||||||
JsonElement content = HTTPRequest.jsonRequest(Launcher.gsonManager.gson.toJsonTree(new authRequest(login, ((AuthPlainPassword) password).password, ip, apiKey)), url);
|
firstPassword = ((AuthPlainPassword) password).password;
|
||||||
|
secondPassword = null;
|
||||||
|
} else {
|
||||||
|
if(password instanceof AuthPlainPassword) {
|
||||||
|
firstPassword = ((AuthPlainPassword) password).password;
|
||||||
|
secondPassword = null;
|
||||||
|
} else if(password instanceof Auth2FAPassword) {
|
||||||
|
if (!(((Auth2FAPassword) password).firstPassword instanceof AuthPlainPassword)) throw new AuthException("This password type not supported");
|
||||||
|
firstPassword = ((AuthPlainPassword) ((Auth2FAPassword) password).firstPassword).password;
|
||||||
|
if (!(((Auth2FAPassword) password).secondPassword instanceof AuthTOTPPassword)) throw new AuthException("This password type not supported");
|
||||||
|
secondPassword = ((AuthTOTPPassword) ((Auth2FAPassword) password).secondPassword).totp;
|
||||||
|
} else {
|
||||||
|
throw new AuthException("This password type not supported");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
JsonElement content = HTTPRequest.jsonRequest(Launcher.gsonManager.gson.toJsonTree(new authRequest(login, firstPassword, secondPassword, ip, apiKey)), url);
|
||||||
if (!content.isJsonObject())
|
if (!content.isJsonObject())
|
||||||
return authError("Authentication server response is malformed");
|
return authError("Authentication server response is malformed");
|
||||||
authResult result = Launcher.gsonManager.gson.fromJson(content, authResult.class);
|
authResult result = Launcher.gsonManager.gson.fromJson(content, authResult.class);
|
||||||
|
@ -44,18 +66,21 @@ public static class authResult {
|
||||||
public static class authRequest {
|
public static class authRequest {
|
||||||
final String username;
|
final String username;
|
||||||
final String password;
|
final String password;
|
||||||
|
final String secondPassword;
|
||||||
final String ip;
|
final String ip;
|
||||||
String apiKey;
|
String apiKey;
|
||||||
|
|
||||||
public authRequest(String username, String password, String ip) {
|
public authRequest(String username, String password, String ip) {
|
||||||
this.username = username;
|
this.username = username;
|
||||||
this.password = password;
|
this.password = password;
|
||||||
|
this.secondPassword = null;
|
||||||
this.ip = ip;
|
this.ip = ip;
|
||||||
}
|
}
|
||||||
|
|
||||||
public authRequest(String username, String password, String ip, String apiKey) {
|
public authRequest(String username, String password, String secondPassword, String ip, String apiKey) {
|
||||||
this.username = username;
|
this.username = username;
|
||||||
this.password = password;
|
this.password = password;
|
||||||
|
this.secondPassword = secondPassword;
|
||||||
this.ip = ip;
|
this.ip = ip;
|
||||||
this.apiKey = apiKey;
|
this.apiKey = apiKey;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue