Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
ziqian zhang
Grasscutter
Commits
04d9613f
Commit
04d9613f
authored
May 14, 2022
by
KingRainbow44
Browse files
External authentication
parent
5d7edc38
Changes
7
Show whitespace changes
Inline
Side-by-side
src/main/java/emu/grasscutter/Grasscutter.java
View file @
04d9613f
...
...
@@ -35,7 +35,6 @@ import emu.grasscutter.utils.Language;
import
emu.grasscutter.server.game.GameServer
;
import
emu.grasscutter.tools.Tools
;
import
emu.grasscutter.utils.Crypto
;
import
emu.grasscutter.BuildConfig
;
import
javax.annotation.Nullable
;
...
...
@@ -129,7 +128,6 @@ public final class Grasscutter {
httpServer
.
addRouter
(
GenericHandler
.
class
);
httpServer
.
addRouter
(
AnnouncementsHandler
.
class
);
httpServer
.
addRouter
(
DispatchHandler
.
class
);
httpServer
.
addRouter
(
LegacyAuthHandler
.
class
);
httpServer
.
addRouter
(
GachaHandler
.
class
);
// TODO: find a better place?
...
...
src/main/java/emu/grasscutter/auth/AuthenticationSystem.java
View file @
04d9613f
...
...
@@ -2,6 +2,7 @@ package emu.grasscutter.auth;
import
emu.grasscutter.server.http.objects.*
;
import
express.http.Request
;
import
express.http.Response
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Getter
;
...
...
@@ -52,12 +53,20 @@ public interface AuthenticationSystem {
*/
Authenticator
<
ComboTokenResJson
>
getSessionKeyAuthenticator
();
/**
* This is the authenticator used for handling external authentication requests.
* @return An authenticator.
*/
ExternalAuthenticator
getExternalAuthenticator
();
/**
* A data container that holds relevant data for authenticating a client.
*/
@Builder
@AllArgsConstructor
@Getter
class
AuthenticationRequest
{
private
final
Request
request
;
@Nullable
private
final
Response
response
;
@Nullable
private
final
LoginAccountRequestJson
passwordRequest
;
@Nullable
private
final
LoginTokenRequestJson
tokenRequest
;
@Nullable
private
final
ComboTokenReqJson
sessionKeyRequest
;
...
...
@@ -104,4 +113,15 @@ public interface AuthenticationSystem {
.
sessionKeyData
(
tokenData
)
.
build
();
}
/**
* Generates an authentication request from a {@link Response} object.
* @param request The Express request.
* @param response the Express response.
* @return An authentication request.
*/
static
AuthenticationRequest
fromExternalRequest
(
Request
request
,
Response
response
)
{
return
AuthenticationRequest
.
builder
().
request
(
request
)
.
response
(
response
).
build
();
}
}
src/main/java/emu/grasscutter/auth/DefaultAuthentication.java
View file @
04d9613f
...
...
@@ -15,6 +15,7 @@ public final class DefaultAuthentication implements AuthenticationSystem {
private
final
Authenticator
<
LoginResultJson
>
passwordAuthenticator
=
new
PasswordAuthenticator
();
private
final
Authenticator
<
LoginResultJson
>
tokenAuthenticator
=
new
TokenAuthenticator
();
private
final
Authenticator
<
ComboTokenResJson
>
sessionKeyAuthenticator
=
new
SessionKeyAuthenticator
();
private
final
ExternalAuthenticator
externalAuthenticator
=
new
ExternalAuthentication
();
@Override
public
void
createAccount
(
String
username
,
String
password
)
{
...
...
@@ -46,4 +47,9 @@ public final class DefaultAuthentication implements AuthenticationSystem {
public
Authenticator
<
ComboTokenResJson
>
getSessionKeyAuthenticator
()
{
return
this
.
sessionKeyAuthenticator
;
}
@Override
public
ExternalAuthenticator
getExternalAuthenticator
()
{
return
this
.
externalAuthenticator
;
}
}
src/main/java/emu/grasscutter/auth/DefaultAuthenticators.java
View file @
04d9613f
...
...
@@ -158,4 +158,24 @@ public final class DefaultAuthenticators {
return
response
;
}
}
/**
* Handles authentication requests from external sources.
*/
public
static
class
ExternalAuthentication
implements
ExternalAuthenticator
{
@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
handleAccountCreation
(
AuthenticationRequest
request
)
{
assert
request
.
getResponse
()
!=
null
;
request
.
getResponse
().
send
(
"Authentication is not available with the default authentication method."
);
}
@Override
public
void
handlePasswordReset
(
AuthenticationRequest
request
)
{
assert
request
.
getResponse
()
!=
null
;
request
.
getResponse
().
send
(
"Authentication is not available with the default authentication method."
);
}
}
}
src/main/java/emu/grasscutter/auth/ExternalAuthenticator.java
0 → 100644
View file @
04d9613f
package
emu.grasscutter.auth
;
import
emu.grasscutter.auth.AuthenticationSystem.AuthenticationRequest
;
/**
* Handles authentication via external routes.
*/
public
interface
ExternalAuthenticator
{
/**
* Called when an external login request is made.
* @param request The authentication request.
*/
void
handleLogin
(
AuthenticationRequest
request
);
/**
* Called when an external account creation request is made.
* @param request The authentication request.
*
* For developers: Use {@link AuthenticationRequest#getRequest()} to get the request body.
* Use {@link AuthenticationRequest#getResponse()} to get the response body.
*/
void
handleAccountCreation
(
AuthenticationRequest
request
);
/**
* Called when an external password reset request is made.
* @param request The authentication request.
*
* For developers: Use {@link AuthenticationRequest#getRequest()} to get the request body.
* Use {@link AuthenticationRequest#getResponse()} to get the response body.
*/
void
handlePasswordReset
(
AuthenticationRequest
request
);
}
src/main/java/emu/grasscutter/server/http/dispatch/DispatchHandler.java
View file @
04d9613f
...
...
@@ -24,6 +24,12 @@ public final class DispatchHandler implements Router {
express
.
post
(
"/hk4e_global/mdk/shield/api/verify"
,
DispatchHandler:
:
tokenLogin
);
// Combo token login (from session key).
express
.
post
(
"/hk4e_global/combo/granter/login/v2/login"
,
DispatchHandler:
:
sessionKeyLogin
);
// External login (from other clients).
express
.
get
(
"/authentication/type"
,
(
request
,
response
)
->
response
.
send
(
Grasscutter
.
getAuthenticationSystem
().
getClass
().
getSimpleName
()));
express
.
post
(
"/authentication/login"
,
(
request
,
response
)
->
response
.
status
(
500
).
send
(
"{\"notice\":\"This API is deprecated.\"}"
));
express
.
post
(
"/authentication/register"
,
(
request
,
response
)
->
response
.
status
(
500
).
send
(
"{\"notice\":\"This API is deprecated.\"}"
));
express
.
post
(
"/authentication/change_password"
,
(
request
,
response
)
->
response
.
status
(
500
).
send
(
"{\"notice\":\"This API is deprecated.\"}"
));
}
/**
...
...
src/main/java/emu/grasscutter/server/http/handlers/LegacyAuthHandler.java
deleted
100644 → 0
View file @
5d7edc38
package
emu.grasscutter.server.http.handlers
;
import
emu.grasscutter.server.http.Router
;
import
express.Express
;
import
io.javalin.Javalin
;
/**
* Handles the legacy authentication system routes.
*/
public
final
class
LegacyAuthHandler
implements
Router
{
@Override
public
void
applyRoutes
(
Express
express
,
Javalin
handle
)
{
express
.
get
(
"/authentication/type"
,
(
request
,
response
)
->
response
.
status
(
500
).
send
(
"{\"notice\":\"This API is deprecated.\"}"
));
express
.
post
(
"/authentication/login"
,
(
request
,
response
)
->
response
.
status
(
500
).
send
(
"{\"notice\":\"This API is deprecated.\"}"
));
express
.
post
(
"/authentication/register"
,
(
request
,
response
)
->
response
.
status
(
500
).
send
(
"{\"notice\":\"This API is deprecated.\"}"
));
express
.
post
(
"/authentication/change_password"
,
(
request
,
response
)
->
response
.
status
(
500
).
send
(
"{\"notice\":\"This API is deprecated.\"}"
));
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment