[BREAKING] Refactor OAuth handler

This commit is contained in:
KingRainbow44 2022-05-27 19:58:04 -04:00
parent 141b1913cb
commit 16846b46df
No known key found for this signature in database
GPG Key ID: FC2CB64B00D257BE
3 changed files with 21 additions and 22 deletions

View File

@ -131,16 +131,4 @@ public interface AuthenticationSystem {
return AuthenticationRequest.builder().request(request) return AuthenticationRequest.builder().request(request)
.response(response).build(); .response(response).build();
} }
/**
* Generates an authentication request from a {@link Response} object.
* @param request The Express request.
* @param jsonData The JSON data.
* @return An authentication request.
*/
static AuthenticationRequest fromOAuthRequest(Request request, Response response) {
return AuthenticationRequest.builder().request(request)
.response(response).build();
}
} }

View File

@ -14,15 +14,22 @@ public interface OAuthAuthenticator {
void handleLogin(AuthenticationRequest request); void handleLogin(AuthenticationRequest request);
/** /**
* Called when an client requests to redirect to login page. * Called when a client requests to redirect to login page.
* @param request The authentication request. * @param request The authentication request.
*/ */
void handleDesktopRedirection(AuthenticationRequest request); void handleRedirection(AuthenticationRequest request, ClientType clientType);
void handleMobileRedirection(AuthenticationRequest request);
/** /**
* Called when an OAuth login requests callback. * Called when an OAuth login requests callback.
* @param request The authentication request. * @param request The authentication request.
*/ */
void handleTokenProcess(AuthenticationRequest request); void handleTokenProcess(AuthenticationRequest request);
/**
* The type of the client.
* Used for handling redirection.
*/
enum ClientType {
DESKTOP, MOBILE
}
} }

View File

@ -2,6 +2,8 @@ package emu.grasscutter.server.http.dispatch;
import emu.grasscutter.Grasscutter; import emu.grasscutter.Grasscutter;
import emu.grasscutter.auth.AuthenticationSystem; import emu.grasscutter.auth.AuthenticationSystem;
import emu.grasscutter.auth.OAuthAuthenticator;
import emu.grasscutter.auth.OAuthAuthenticator.ClientType;
import emu.grasscutter.server.http.Router; import emu.grasscutter.server.http.Router;
import emu.grasscutter.server.http.objects.*; import emu.grasscutter.server.http.objects.*;
import emu.grasscutter.server.http.objects.ComboTokenReqJson.LoginTokenData; import emu.grasscutter.server.http.objects.ComboTokenReqJson.LoginTokenData;
@ -34,13 +36,15 @@ public final class DispatchHandler implements Router {
express.post("/authentication/change_password", (request, response) -> Grasscutter.getAuthenticationSystem().getExternalAuthenticator() express.post("/authentication/change_password", (request, response) -> Grasscutter.getAuthenticationSystem().getExternalAuthenticator()
.handlePasswordReset(AuthenticationSystem.fromExternalRequest(request, response))); .handlePasswordReset(AuthenticationSystem.fromExternalRequest(request, response)));
// OAuth login // External login (from OAuth2).
express.post("/hk4e_global/mdk/shield/api/loginByThirdparty", (request, response) -> Grasscutter.getAuthenticationSystem().getOAuthAuthenticator().handleLogin(AuthenticationSystem.fromOAuthRequest(request, response))); express.post("/hk4e_global/mdk/shield/api/loginByThirdparty", (request, response) -> Grasscutter.getAuthenticationSystem().getOAuthAuthenticator()
// OAuth querystring convert redirection .handleLogin(AuthenticationSystem.fromExternalRequest(request, response)));
express.get("/authentication/openid/redirect", (request, response) -> Grasscutter.getAuthenticationSystem().getOAuthAuthenticator().handleTokenProcess(AuthenticationSystem.fromOAuthRequest(request, response))); express.get("/authentication/openid/redirect", (request, response) -> Grasscutter.getAuthenticationSystem().getOAuthAuthenticator()
// OAuth redirection .handleTokenProcess(AuthenticationSystem.fromExternalRequest(request, response)));
express.get("/Api/twitter_login", (request, response) -> Grasscutter.getAuthenticationSystem().getOAuthAuthenticator().handleDesktopRedirection(AuthenticationSystem.fromOAuthRequest(request, response))); express.get("/Api/twitter_login", (request, response) -> Grasscutter.getAuthenticationSystem().getOAuthAuthenticator()
express.get("/sdkTwitterLogin.html", (request, response) -> Grasscutter.getAuthenticationSystem().getOAuthAuthenticator().handleMobileRedirection(AuthenticationSystem.fromOAuthRequest(request, response))); .handleRedirection(AuthenticationSystem.fromExternalRequest(request, response), ClientType.DESKTOP));
express.get("/sdkTwitterLogin.html", (request, response) -> Grasscutter.getAuthenticationSystem().getOAuthAuthenticator()
.handleRedirection(AuthenticationSystem.fromExternalRequest(request, response), ClientType.MOBILE));
} }
/** /**