From 6eca824961bdf369b4046e607c20917be7aa691d Mon Sep 17 00:00:00 2001 From: CodingPhoenixx Date: Sun, 15 Feb 2026 19:55:02 +0100 Subject: [PATCH] Added login request handler --- .idea/developer-tools.xml | 6 ++ .../dev/coph/flightscore/backend/Backend.java | 2 + .../result => actionResult}/ActionResult.java | 2 +- .../LoginActionResult.java | 2 +- .../backend/provider/ProviderManager.java | 1 + .../auth/LoginRequestHandler.java | 67 +++++++++++++++++++ .../backend/user/UserProvider.java | 2 +- .../backend/user/role/RoleProvider.java | 4 +- 8 files changed, 81 insertions(+), 5 deletions(-) create mode 100644 .idea/developer-tools.xml rename src/main/java/dev/coph/flightscore/backend/{action/result => actionResult}/ActionResult.java (86%) rename src/main/java/dev/coph/flightscore/backend/{action/result => actionResult}/LoginActionResult.java (93%) create mode 100644 src/main/java/dev/coph/flightscore/backend/requestHandler/auth/LoginRequestHandler.java diff --git a/.idea/developer-tools.xml b/.idea/developer-tools.xml new file mode 100644 index 0000000..bccc5cc --- /dev/null +++ b/.idea/developer-tools.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/dev/coph/flightscore/backend/Backend.java b/src/main/java/dev/coph/flightscore/backend/Backend.java index 550e0cf..6e5778a 100644 --- a/src/main/java/dev/coph/flightscore/backend/Backend.java +++ b/src/main/java/dev/coph/flightscore/backend/Backend.java @@ -2,6 +2,7 @@ package dev.coph.flightscore.backend; import dev.coph.flightscore.backend.config.Config; import dev.coph.flightscore.backend.provider.ProviderManager; +import dev.coph.flightscore.backend.requestHandler.auth.LoginRequestHandler; import dev.coph.flightscore.backend.user.UserProvider; import dev.coph.flightscore.backend.user.permission.PermissionProvider; import dev.coph.flightscore.backend.user.role.RoleProvider; @@ -76,6 +77,7 @@ public class Backend { logger.success("Database started!"); logger.info("Loading routes..."); + webServer.registerRequestHandler(new LoginRequestHandler(this)); logger.success("Routes loaded!"); diff --git a/src/main/java/dev/coph/flightscore/backend/action/result/ActionResult.java b/src/main/java/dev/coph/flightscore/backend/actionResult/ActionResult.java similarity index 86% rename from src/main/java/dev/coph/flightscore/backend/action/result/ActionResult.java rename to src/main/java/dev/coph/flightscore/backend/actionResult/ActionResult.java index acd5ee7..bbfd4e8 100644 --- a/src/main/java/dev/coph/flightscore/backend/action/result/ActionResult.java +++ b/src/main/java/dev/coph/flightscore/backend/actionResult/ActionResult.java @@ -1,4 +1,4 @@ -package dev.coph.flightscore.backend.action.result; +package dev.coph.flightscore.backend.actionResult; import lombok.Getter; import lombok.experimental.Accessors; diff --git a/src/main/java/dev/coph/flightscore/backend/action/result/LoginActionResult.java b/src/main/java/dev/coph/flightscore/backend/actionResult/LoginActionResult.java similarity index 93% rename from src/main/java/dev/coph/flightscore/backend/action/result/LoginActionResult.java rename to src/main/java/dev/coph/flightscore/backend/actionResult/LoginActionResult.java index ab9527d..46b3c2e 100644 --- a/src/main/java/dev/coph/flightscore/backend/action/result/LoginActionResult.java +++ b/src/main/java/dev/coph/flightscore/backend/actionResult/LoginActionResult.java @@ -1,4 +1,4 @@ -package dev.coph.flightscore.backend.action.result; +package dev.coph.flightscore.backend.actionResult; import dev.coph.flightscore.backend.user.User; import lombok.Getter; diff --git a/src/main/java/dev/coph/flightscore/backend/provider/ProviderManager.java b/src/main/java/dev/coph/flightscore/backend/provider/ProviderManager.java index 92c45c8..f3befc3 100644 --- a/src/main/java/dev/coph/flightscore/backend/provider/ProviderManager.java +++ b/src/main/java/dev/coph/flightscore/backend/provider/ProviderManager.java @@ -16,6 +16,7 @@ public class ProviderManager { public void createAllDatabaseTables() { Query query = new Query(backend.databaseAdapter()); providers.values().stream().sorted((a, b) -> Integer.compare(b.priority(), a.priority())).forEach(provider -> provider.createDatabaseTables(query)); + query.execute(); } public void enableAllProviders() { diff --git a/src/main/java/dev/coph/flightscore/backend/requestHandler/auth/LoginRequestHandler.java b/src/main/java/dev/coph/flightscore/backend/requestHandler/auth/LoginRequestHandler.java new file mode 100644 index 0000000..9ecff74 --- /dev/null +++ b/src/main/java/dev/coph/flightscore/backend/requestHandler/auth/LoginRequestHandler.java @@ -0,0 +1,67 @@ +package dev.coph.flightscore.backend.requestHandler.auth; + +import dev.coph.flightscore.backend.Backend; +import dev.coph.simplelogger.Logger; +import dev.coph.simplerequest.body.Body; +import dev.coph.simplerequest.body.JsonBody; +import dev.coph.simplerequest.handler.RequestHandler; +import dev.coph.simplerequest.handler.RequestMethod; +import dev.coph.simplerequest.util.ResponseUtil; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.jetty.http.HttpStatus; +import org.eclipse.jetty.server.Response; +import org.eclipse.jetty.util.Callback; +import org.json.JSONObject; + +import java.io.IOException; +import java.util.Map; + +@Slf4j +public class LoginRequestHandler { + private final Logger logger = Logger.of("RH - Login"); + private final Backend backend; + + + public LoginRequestHandler(Backend backend) { + this.backend = backend; + } + + + @RequestHandler( + path = "/auth/login", + method = RequestMethod.POST + ) + public void handle(Response response, Callback callback, Body body) { + JsonBody json; + try { + json = body.asJSON(); + } catch (IOException e) { + logger.error("Failed to parse JSON body", e); + response.setStatus(HttpStatus.BAD_REQUEST_400); + ResponseUtil.writeAnswer(response, callback, "Invalid body"); + return; + } + + String email = json.getString("email"); + String password = json.getString("password"); + + if (email == null || password == null) { + response.setStatus(HttpStatus.BAD_REQUEST_400); + ResponseUtil.writeAnswer(response, callback, "Missing email or password"); + return; + } + var loginResponse = backend.userProvider().login(email, password); + + if (!loginResponse.success()) { + ResponseUtil.writeAnswer(response, callback, loginResponse.message()); + return; + } + + var responseObject = new JSONObject(); + + responseObject.put("accessToken", loginResponse.accessToken()); + responseObject.put("refreshToken", loginResponse.refreshToken()); + + ResponseUtil.writeSuccessfulAnswer(response, callback, responseObject); + } +} diff --git a/src/main/java/dev/coph/flightscore/backend/user/UserProvider.java b/src/main/java/dev/coph/flightscore/backend/user/UserProvider.java index 2c66f98..ca7179a 100644 --- a/src/main/java/dev/coph/flightscore/backend/user/UserProvider.java +++ b/src/main/java/dev/coph/flightscore/backend/user/UserProvider.java @@ -1,7 +1,7 @@ package dev.coph.flightscore.backend.user; import dev.coph.flightscore.backend.Backend; -import dev.coph.flightscore.backend.action.result.LoginActionResult; +import dev.coph.flightscore.backend.actionResult.LoginActionResult; import dev.coph.flightscore.backend.config.Config; import dev.coph.flightscore.backend.provider.Provider; import dev.coph.flightscore.backend.user.role.Role; diff --git a/src/main/java/dev/coph/flightscore/backend/user/role/RoleProvider.java b/src/main/java/dev/coph/flightscore/backend/user/role/RoleProvider.java index d988d7a..f90bd09 100644 --- a/src/main/java/dev/coph/flightscore/backend/user/role/RoleProvider.java +++ b/src/main/java/dev/coph/flightscore/backend/user/role/RoleProvider.java @@ -47,7 +47,7 @@ public class RoleProvider implements Provider { .table("roles") .column("id", DataType.BINARY, 26, true) .column("name", DataType.VARCHAR, 255) - .column(new Column("default", DataType.BOOLEAN, true).defaultValue(false)) + .column(new Column("is_default", DataType.BOOLEAN, true).defaultValue(false)) .primaryKey(List.of("id")); query.query(tableCreate); @@ -70,7 +70,7 @@ public class RoleProvider implements Provider { srs.forEach(resultSet -> { var roleIdBytes = resultSet.getBytes("id"); var roleName = resultSet.getString("name"); - var isDefault = resultSet.getBoolean("default"); + var isDefault = resultSet.getBoolean("is_default"); var roleId = new ULID(roleIdBytes); Role role = new Role(roleId, roleName, isDefault); roles.put(roleId, role);