Commit d15c32df authored by YukariChiba's avatar YukariChiba Committed by Melledy
Browse files

Add OAuth in AuthenticationSystem

parent 0c652180
...@@ -60,6 +60,12 @@ public interface AuthenticationSystem { ...@@ -60,6 +60,12 @@ public interface AuthenticationSystem {
*/ */
ExternalAuthenticator getExternalAuthenticator(); ExternalAuthenticator getExternalAuthenticator();
/**
* This is the authenticator used for handling OAuth authentication requests.
* @return An authenticator.
*/
OAuthAuthenticator getOAuthAuthenticator();
/** /**
* A data container that holds relevant data for authenticating a client. * A data container that holds relevant data for authenticating a client.
*/ */
...@@ -125,4 +131,16 @@ public interface AuthenticationSystem { ...@@ -125,4 +131,16 @@ 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();
}
} }
...@@ -17,6 +17,7 @@ public final class DefaultAuthentication implements AuthenticationSystem { ...@@ -17,6 +17,7 @@ public final class DefaultAuthentication implements AuthenticationSystem {
private final Authenticator<LoginResultJson> tokenAuthenticator = new TokenAuthenticator(); private final Authenticator<LoginResultJson> tokenAuthenticator = new TokenAuthenticator();
private final Authenticator<ComboTokenResJson> sessionKeyAuthenticator = new SessionKeyAuthenticator(); private final Authenticator<ComboTokenResJson> sessionKeyAuthenticator = new SessionKeyAuthenticator();
private final ExternalAuthenticator externalAuthenticator = new ExternalAuthentication(); private final ExternalAuthenticator externalAuthenticator = new ExternalAuthentication();
private final OAuthAuthenticator oAuthAuthenticator = new OAuthAuthentication();
@Override @Override
public void createAccount(String username, String password) { public void createAccount(String username, String password) {
...@@ -53,4 +54,9 @@ public final class DefaultAuthentication implements AuthenticationSystem { ...@@ -53,4 +54,9 @@ public final class DefaultAuthentication implements AuthenticationSystem {
public ExternalAuthenticator getExternalAuthenticator() { public ExternalAuthenticator getExternalAuthenticator() {
return this.externalAuthenticator; return this.externalAuthenticator;
} }
@Override
public OAuthAuthenticator getOAuthAuthenticator() {
return this.oAuthAuthenticator;
}
} }
...@@ -174,4 +174,29 @@ public final class DefaultAuthenticators { ...@@ -174,4 +174,29 @@ public final class DefaultAuthenticators {
request.getResponse().send("Authentication is not available with the default authentication method."); request.getResponse().send("Authentication is not available with the default authentication method.");
} }
} }
/**
* Handles authentication requests from OAuth sources.
*/
public static class OAuthAuthentication implements OAuthAuthenticator {
@Override public void handleLogin(AuthenticationRequest request) {
assert request.getResponse() != null;
request.getResponse().send("Authentication is not available with the default authentication method.");
}
@Override public void handleDesktopRedirection(AuthenticationRequest request) {
assert request.getResponse() != null;
request.getResponse().send("Authentication is not available with the default authentication method.");
}
@Override public void handleMobileRedirection(AuthenticationRequest request) {
assert request.getResponse() != null;
request.getResponse().send("Authentication is not available with the default authentication method.");
}
@Override public void handleTokenProcess(AuthenticationRequest request) {
assert request.getResponse() != null;
request.getResponse().send("Authentication is not available with the default authentication method.");
}
}
} }
package emu.grasscutter.auth;
import emu.grasscutter.auth.AuthenticationSystem.AuthenticationRequest;
/**
* Handles authentication via OAuth routes.
*/
public interface OAuthAuthenticator {
/**
* Called when an OAuth login request is made.
* @param request The authentication request.
*/
void handleLogin(AuthenticationRequest request);
/**
* Called when an client requests to redirect to login page.
* @param request The authentication request.
*/
void handleDesktopRedirection(AuthenticationRequest request);
void handleMobileRedirection(AuthenticationRequest request);
/**
* Called when an OAuth login requests callback.
* @param request The authentication request.
*/
void handleTokenProcess(AuthenticationRequest request);
}
...@@ -33,6 +33,14 @@ public final class DispatchHandler implements Router { ...@@ -33,6 +33,14 @@ public final class DispatchHandler implements Router {
.handleAccountCreation(AuthenticationSystem.fromExternalRequest(request, response))); .handleAccountCreation(AuthenticationSystem.fromExternalRequest(request, response)));
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
express.post("/hk4e_global/mdk/shield/api/loginByThirdparty", (request, response) -> Grasscutter.getAuthenticationSystem().getOAuthAuthenticator().handleLogin(AuthenticationSystem.fromOAuthRequest(request, response)));
// OAuth querystring convert redirection
express.get("/authentication/openid/redirect", (request, response) -> Grasscutter.getAuthenticationSystem().getOAuthAuthenticator().handleTokenProcess(AuthenticationSystem.fromOAuthRequest(request, response)));
// OAuth redirection
express.get("/Api/twitter_login", (request, response) -> Grasscutter.getAuthenticationSystem().getOAuthAuthenticator().handleDesktopRedirection(AuthenticationSystem.fromOAuthRequest(request, response)));
express.get("/sdkTwitterLogin.html", (request, response) -> Grasscutter.getAuthenticationSystem().getOAuthAuthenticator().handleMobileRedirection(AuthenticationSystem.fromOAuthRequest(request, response)));
} }
/** /**
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment