change class name

This commit is contained in:
muhammadeko 2022-05-15 09:30:08 +07:00
parent 0310d47939
commit 2c0fd486e1
No known key found for this signature in database
GPG Key ID: 51366716C10E98B1
4 changed files with 232 additions and 232 deletions

View File

@ -33,7 +33,7 @@ public class GCAuth extends Plugin {
} }
} }
loadConfig(); loadConfig();
Grasscutter.setAuthenticationSystem(new GCAuthAuthentication()); Grasscutter.setAuthenticationSystem(new GCAuthAuthenticationHandler());
getLogger().info("GCAuth Enabled!"); getLogger().info("GCAuth Enabled!");
config.jwtSecret = Authentication.generateRandomString(32); config.jwtSecret = Authentication.generateRandomString(32);
saveConfig(); saveConfig();

View File

@ -1,47 +0,0 @@
package me.exzork.gcauth.handler;
import emu.grasscutter.auth.*;
import emu.grasscutter.server.http.objects.ComboTokenResJson;
import emu.grasscutter.server.http.objects.LoginResultJson;
public class GCAuthAuthentication implements AuthenticationSystem {
private final Authenticator<LoginResultJson> gcAuthAuthenticator = new GCAuthenticators.GCAuthAuthenticator();
private final Authenticator<LoginResultJson> tokenAuthenticator = new DefaultAuthenticators.TokenAuthenticator();
private final Authenticator<ComboTokenResJson> sessionKeyAuthenticator = new DefaultAuthenticators.SessionKeyAuthenticator();
private final GCAuthAuthenticationHandler externalAuthenticator = new GCAuthAuthenticationHandler();
@Override
public void createAccount(String username, String password) {
// Unhandled.
}
@Override
public void resetPassword(String username) {
// Unhandled.
}
@Override
public boolean verifyUser(String s) {
return false;
}
@Override
public Authenticator<LoginResultJson> getPasswordAuthenticator() {
return gcAuthAuthenticator;
}
@Override
public Authenticator<LoginResultJson> getTokenAuthenticator() {
return tokenAuthenticator;
}
@Override
public Authenticator<ComboTokenResJson> getSessionKeyAuthenticator() {
return sessionKeyAuthenticator;
}
@Override
public ExternalAuthenticator getExternalAuthenticator() {
return externalAuthenticator;
}
}

View File

@ -1,198 +1,47 @@
package me.exzork.gcauth.handler; package me.exzork.gcauth.handler;
import com.google.gson.Gson; import emu.grasscutter.auth.*;
import emu.grasscutter.Grasscutter; import emu.grasscutter.server.http.objects.ComboTokenResJson;
import emu.grasscutter.auth.AuthenticationSystem; import emu.grasscutter.server.http.objects.LoginResultJson;
import emu.grasscutter.auth.ExternalAuthenticator;
import emu.grasscutter.database.DatabaseHelper; public class GCAuthAuthenticationHandler implements AuthenticationSystem {
import emu.grasscutter.game.Account; private final Authenticator<LoginResultJson> gcAuthAuthenticator = new GCAuthenticators.GCAuthAuthenticator();
import express.http.Response; private final Authenticator<LoginResultJson> tokenAuthenticator = new DefaultAuthenticators.TokenAuthenticator();
import me.exzork.gcauth.GCAuth; private final Authenticator<ComboTokenResJson> sessionKeyAuthenticator = new DefaultAuthenticators.SessionKeyAuthenticator();
import me.exzork.gcauth.json.AuthResponseJson; private final GCAuthExternalAuthenticator externalAuthenticator = new GCAuthExternalAuthenticator();
import me.exzork.gcauth.json.ChangePasswordAccount;
import me.exzork.gcauth.json.LoginGenerateToken;
import me.exzork.gcauth.json.RegisterAccount;
import me.exzork.gcauth.utils.Authentication;
public class GCAuthAuthenticationHandler implements ExternalAuthenticator {
@Override @Override
public void handleLogin(AuthenticationSystem.AuthenticationRequest authenticationRequest) { public void createAccount(String username, String password) {
AuthResponseJson authResponse = new AuthResponseJson(); // Unhandled.
Response response = authenticationRequest.getResponse();
assert response != null; // This should never be null.
try {
String requestBody = response.ctx().body();
if (requestBody.isEmpty()) {
authResponse.success = false;
authResponse.message = "EMPTY_BODY"; // ENG = "No data was sent with the request"
authResponse.jwt = "";
} else {
LoginGenerateToken loginGenerateToken = new Gson().fromJson(requestBody, LoginGenerateToken.class);
if (!GCAuth.getConfigStatic().ACCESS_KEY.isEmpty() && !GCAuth.getConfigStatic().ACCESS_KEY.equals(loginGenerateToken.access_key)){
authResponse.success = false;
authResponse.message = "ERROR_ACCESS_KEY"; // ENG = "Error access key was sent with the request"
authResponse.jwt = "";
} else {
Account account = Authentication.getAccountByUsernameAndPassword(loginGenerateToken.username, loginGenerateToken.password);
if (account == null) {
authResponse.success = false;
authResponse.message = "INVALID_ACCOUNT"; // ENG = "Invalid username or password"
authResponse.jwt = "";
} else {
if (account.getPassword() != null && !account.getPassword().isEmpty()) {
authResponse.success = true;
authResponse.message = "";
authResponse.jwt = Authentication.generateJwt(account);
} else {
authResponse.success = false;
authResponse.message = "NO_PASSWORD"; // ENG = "There is no account password set. Please create a password by resetting it."
authResponse.jwt = "";
}
}
}
}
} catch (Exception e) {
authResponse.success = false;
authResponse.message = "UNKNOWN"; // ENG = "An unknown error has occurred..."
authResponse.jwt = "";
Grasscutter.getLogger().error("[Dispatch] An error occurred while a user was logging in.");
e.printStackTrace();
}
response.send(authResponse);
} }
@Override @Override
public void handleAccountCreation(AuthenticationSystem.AuthenticationRequest authenticationRequest) { public void resetPassword(String username) {
AuthResponseJson authResponse = new AuthResponseJson(); // Unhandled.
Response response = authenticationRequest.getResponse();
assert response != null; // This should never be null.
Account account = null;
try {
String requestBody = response.ctx().body();
if (requestBody.isEmpty()) {
authResponse.success = false;
authResponse.message = "EMPTY_BODY"; // ENG = "No data was sent with the request"
authResponse.jwt = "";
} else {
RegisterAccount registerAccount = new Gson().fromJson(requestBody, RegisterAccount.class);
if (!GCAuth.getConfigStatic().ACCESS_KEY.isEmpty() && !GCAuth.getConfigStatic().ACCESS_KEY.equals(registerAccount.access_key)){
authResponse.success = false;
authResponse.message = "ERROR_ACCESS_KEY"; // ENG = "Error access key was sent with the request"
authResponse.jwt = "";
} else {
if (registerAccount.password.equals(registerAccount.password_confirmation)) {
if (registerAccount.password.length() >= 8) {
String password = Authentication.generateHash(registerAccount.password);
try{
account = Authentication.getAccountByUsernameAndPassword(registerAccount.username, "");
if (account != null) {
account.setPassword(password);
account.save();
authResponse.success = true;
authResponse.message = "";
authResponse.jwt = "";
} else {
account = DatabaseHelper.createAccountWithPassword(registerAccount.username, password);
if (account == null) {
authResponse.success = false;
authResponse.message = "USERNAME_TAKEN"; // ENG = "Username has already been taken by another user."
authResponse.jwt = "";
} else {
authResponse.success = true;
authResponse.message = "";
authResponse.jwt = "";
}
}
}catch (Exception ignored){
authResponse.success = false;
authResponse.message = "UNKNOWN"; // ENG = "Username has already been taken by another user."
authResponse.jwt = "";
}
} else {
authResponse.success = false;
authResponse.message = "PASSWORD_INVALID"; // ENG = "Password must be at least 8 characters long"
authResponse.jwt = "";
}
} else {
authResponse.success = false;
authResponse.message = "PASSWORD_MISMATCH"; // ENG = "Passwords do not match."
authResponse.jwt = "";
}
}
}
} catch (Exception e) {
authResponse.success = false;
authResponse.message = "UNKNOWN"; // ENG = "An unknown error has occurred..."
authResponse.jwt = "";
Grasscutter.getLogger().error("[Dispatch] An error occurred while creating an account.");
e.printStackTrace();
}
if (authResponse.success) {
if (GCAuth.getConfigStatic().defaultPermissions.length > 0) {
for (String permission : GCAuth.getConfigStatic().defaultPermissions) {
account.addPermission(permission);
}
}
}
response.send(authResponse);
} }
@Override @Override
public void handlePasswordReset(AuthenticationSystem.AuthenticationRequest authenticationRequest) { public boolean verifyUser(String s) {
AuthResponseJson authResponse = new AuthResponseJson(); return false;
Response response = authenticationRequest.getResponse(); }
assert response != null; // This should never be null.
try { @Override
String requestBody = response.ctx().body(); public Authenticator<LoginResultJson> getPasswordAuthenticator() {
if (requestBody.isEmpty()) { return gcAuthAuthenticator;
authResponse.success = false; }
authResponse.message = "EMPTY_BODY"; // ENG = "No data was sent with the request"
authResponse.jwt = "";
} else {
ChangePasswordAccount changePasswordAccount = new Gson().fromJson(requestBody, ChangePasswordAccount.class);
if (!GCAuth.getConfigStatic().ACCESS_KEY.isEmpty() && !GCAuth.getConfigStatic().ACCESS_KEY.equals(changePasswordAccount.access_key)){
authResponse.success = false;
authResponse.message = "ERROR_ACCESS_KEY"; // ENG = "Error access key was sent with the request"
authResponse.jwt = "";
} else {
if (changePasswordAccount.new_password.equals(changePasswordAccount.new_password_confirmation)) {
Account account = Authentication.getAccountByUsernameAndPassword(changePasswordAccount.username, changePasswordAccount.old_password);
if (account == null) {
authResponse.success = false;
authResponse.message = "INVALID_ACCOUNT"; // ENG = "Invalid username or password"
authResponse.jwt = "";
} else {
if (changePasswordAccount.new_password.length() >= 8) {
String newPassword = Authentication.generateHash(changePasswordAccount.new_password);
account.setPassword(newPassword);
account.save();
authResponse.success = true;
authResponse.message = "";
authResponse.jwt = "";
} else {
authResponse.success = false;
authResponse.message = "PASSWORD_INVALID"; // ENG = "Password must be at least 8 characters long"
authResponse.jwt = "";
}
}
} else {
authResponse.success = false;
authResponse.message = "PASSWORD_MISMATCH"; // ENG = "Passwords do not match."
authResponse.jwt = "";
}
}
}
} catch (Exception e) {
authResponse.success = false;
authResponse.message = "UNKNOWN"; // ENG = "An unknown error has occurred..."
authResponse.jwt = "";
Grasscutter.getLogger().error("[Dispatch] Error while changing user password.");
e.printStackTrace();
}
response.send(authResponse); @Override
public Authenticator<LoginResultJson> getTokenAuthenticator() {
return tokenAuthenticator;
}
@Override
public Authenticator<ComboTokenResJson> getSessionKeyAuthenticator() {
return sessionKeyAuthenticator;
}
@Override
public ExternalAuthenticator getExternalAuthenticator() {
return externalAuthenticator;
} }
} }

View File

@ -0,0 +1,198 @@
package me.exzork.gcauth.handler;
import com.google.gson.Gson;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.auth.AuthenticationSystem;
import emu.grasscutter.auth.ExternalAuthenticator;
import emu.grasscutter.database.DatabaseHelper;
import emu.grasscutter.game.Account;
import express.http.Response;
import me.exzork.gcauth.GCAuth;
import me.exzork.gcauth.json.AuthResponseJson;
import me.exzork.gcauth.json.ChangePasswordAccount;
import me.exzork.gcauth.json.LoginGenerateToken;
import me.exzork.gcauth.json.RegisterAccount;
import me.exzork.gcauth.utils.Authentication;
public class GCAuthExternalAuthenticator implements ExternalAuthenticator {
@Override
public void handleLogin(AuthenticationSystem.AuthenticationRequest authenticationRequest) {
AuthResponseJson authResponse = new AuthResponseJson();
Response response = authenticationRequest.getResponse();
assert response != null; // This should never be null.
try {
String requestBody = response.ctx().body();
if (requestBody.isEmpty()) {
authResponse.success = false;
authResponse.message = "EMPTY_BODY"; // ENG = "No data was sent with the request"
authResponse.jwt = "";
} else {
LoginGenerateToken loginGenerateToken = new Gson().fromJson(requestBody, LoginGenerateToken.class);
if (!GCAuth.getConfigStatic().ACCESS_KEY.isEmpty() && !GCAuth.getConfigStatic().ACCESS_KEY.equals(loginGenerateToken.access_key)){
authResponse.success = false;
authResponse.message = "ERROR_ACCESS_KEY"; // ENG = "Error access key was sent with the request"
authResponse.jwt = "";
} else {
Account account = Authentication.getAccountByUsernameAndPassword(loginGenerateToken.username, loginGenerateToken.password);
if (account == null) {
authResponse.success = false;
authResponse.message = "INVALID_ACCOUNT"; // ENG = "Invalid username or password"
authResponse.jwt = "";
} else {
if (account.getPassword() != null && !account.getPassword().isEmpty()) {
authResponse.success = true;
authResponse.message = "";
authResponse.jwt = Authentication.generateJwt(account);
} else {
authResponse.success = false;
authResponse.message = "NO_PASSWORD"; // ENG = "There is no account password set. Please create a password by resetting it."
authResponse.jwt = "";
}
}
}
}
} catch (Exception e) {
authResponse.success = false;
authResponse.message = "UNKNOWN"; // ENG = "An unknown error has occurred..."
authResponse.jwt = "";
Grasscutter.getLogger().error("[Dispatch] An error occurred while a user was logging in.");
e.printStackTrace();
}
response.send(authResponse);
}
@Override
public void handleAccountCreation(AuthenticationSystem.AuthenticationRequest authenticationRequest) {
AuthResponseJson authResponse = new AuthResponseJson();
Response response = authenticationRequest.getResponse();
assert response != null; // This should never be null.
Account account = null;
try {
String requestBody = response.ctx().body();
if (requestBody.isEmpty()) {
authResponse.success = false;
authResponse.message = "EMPTY_BODY"; // ENG = "No data was sent with the request"
authResponse.jwt = "";
} else {
RegisterAccount registerAccount = new Gson().fromJson(requestBody, RegisterAccount.class);
if (!GCAuth.getConfigStatic().ACCESS_KEY.isEmpty() && !GCAuth.getConfigStatic().ACCESS_KEY.equals(registerAccount.access_key)){
authResponse.success = false;
authResponse.message = "ERROR_ACCESS_KEY"; // ENG = "Error access key was sent with the request"
authResponse.jwt = "";
} else {
if (registerAccount.password.equals(registerAccount.password_confirmation)) {
if (registerAccount.password.length() >= 8) {
String password = Authentication.generateHash(registerAccount.password);
try{
account = Authentication.getAccountByUsernameAndPassword(registerAccount.username, "");
if (account != null) {
account.setPassword(password);
account.save();
authResponse.success = true;
authResponse.message = "";
authResponse.jwt = "";
} else {
account = DatabaseHelper.createAccountWithPassword(registerAccount.username, password);
if (account == null) {
authResponse.success = false;
authResponse.message = "USERNAME_TAKEN"; // ENG = "Username has already been taken by another user."
authResponse.jwt = "";
} else {
authResponse.success = true;
authResponse.message = "";
authResponse.jwt = "";
}
}
}catch (Exception ignored){
authResponse.success = false;
authResponse.message = "UNKNOWN"; // ENG = "Username has already been taken by another user."
authResponse.jwt = "";
}
} else {
authResponse.success = false;
authResponse.message = "PASSWORD_INVALID"; // ENG = "Password must be at least 8 characters long"
authResponse.jwt = "";
}
} else {
authResponse.success = false;
authResponse.message = "PASSWORD_MISMATCH"; // ENG = "Passwords do not match."
authResponse.jwt = "";
}
}
}
} catch (Exception e) {
authResponse.success = false;
authResponse.message = "UNKNOWN"; // ENG = "An unknown error has occurred..."
authResponse.jwt = "";
Grasscutter.getLogger().error("[Dispatch] An error occurred while creating an account.");
e.printStackTrace();
}
if (authResponse.success) {
if (GCAuth.getConfigStatic().defaultPermissions.length > 0) {
for (String permission : GCAuth.getConfigStatic().defaultPermissions) {
account.addPermission(permission);
}
}
}
response.send(authResponse);
}
@Override
public void handlePasswordReset(AuthenticationSystem.AuthenticationRequest authenticationRequest) {
AuthResponseJson authResponse = new AuthResponseJson();
Response response = authenticationRequest.getResponse();
assert response != null; // This should never be null.
try {
String requestBody = response.ctx().body();
if (requestBody.isEmpty()) {
authResponse.success = false;
authResponse.message = "EMPTY_BODY"; // ENG = "No data was sent with the request"
authResponse.jwt = "";
} else {
ChangePasswordAccount changePasswordAccount = new Gson().fromJson(requestBody, ChangePasswordAccount.class);
if (!GCAuth.getConfigStatic().ACCESS_KEY.isEmpty() && !GCAuth.getConfigStatic().ACCESS_KEY.equals(changePasswordAccount.access_key)){
authResponse.success = false;
authResponse.message = "ERROR_ACCESS_KEY"; // ENG = "Error access key was sent with the request"
authResponse.jwt = "";
} else {
if (changePasswordAccount.new_password.equals(changePasswordAccount.new_password_confirmation)) {
Account account = Authentication.getAccountByUsernameAndPassword(changePasswordAccount.username, changePasswordAccount.old_password);
if (account == null) {
authResponse.success = false;
authResponse.message = "INVALID_ACCOUNT"; // ENG = "Invalid username or password"
authResponse.jwt = "";
} else {
if (changePasswordAccount.new_password.length() >= 8) {
String newPassword = Authentication.generateHash(changePasswordAccount.new_password);
account.setPassword(newPassword);
account.save();
authResponse.success = true;
authResponse.message = "";
authResponse.jwt = "";
} else {
authResponse.success = false;
authResponse.message = "PASSWORD_INVALID"; // ENG = "Password must be at least 8 characters long"
authResponse.jwt = "";
}
}
} else {
authResponse.success = false;
authResponse.message = "PASSWORD_MISMATCH"; // ENG = "Passwords do not match."
authResponse.jwt = "";
}
}
}
} catch (Exception e) {
authResponse.success = false;
authResponse.message = "UNKNOWN"; // ENG = "An unknown error has occurred..."
authResponse.jwt = "";
Grasscutter.getLogger().error("[Dispatch] Error while changing user password.");
e.printStackTrace();
}
response.send(authResponse);
}
}