Added login request handler
This commit is contained in:
Generated
+6
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="DeveloperToolsToolWindowSettingsV1" lastSelectedContentNodeId="base64-encoder-decoder" pluginVersion="7.1.0">
|
||||||
|
<developerToolsConfigurations />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
@@ -2,6 +2,7 @@ package dev.coph.flightscore.backend;
|
|||||||
|
|
||||||
import dev.coph.flightscore.backend.config.Config;
|
import dev.coph.flightscore.backend.config.Config;
|
||||||
import dev.coph.flightscore.backend.provider.ProviderManager;
|
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.UserProvider;
|
||||||
import dev.coph.flightscore.backend.user.permission.PermissionProvider;
|
import dev.coph.flightscore.backend.user.permission.PermissionProvider;
|
||||||
import dev.coph.flightscore.backend.user.role.RoleProvider;
|
import dev.coph.flightscore.backend.user.role.RoleProvider;
|
||||||
@@ -76,6 +77,7 @@ public class Backend {
|
|||||||
logger.success("Database started!");
|
logger.success("Database started!");
|
||||||
|
|
||||||
logger.info("Loading routes...");
|
logger.info("Loading routes...");
|
||||||
|
webServer.registerRequestHandler(new LoginRequestHandler(this));
|
||||||
|
|
||||||
logger.success("Routes loaded!");
|
logger.success("Routes loaded!");
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package dev.coph.flightscore.backend.action.result;
|
package dev.coph.flightscore.backend.actionResult;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
+1
-1
@@ -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 dev.coph.flightscore.backend.user.User;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@@ -16,6 +16,7 @@ public class ProviderManager {
|
|||||||
public void createAllDatabaseTables() {
|
public void createAllDatabaseTables() {
|
||||||
Query query = new Query(backend.databaseAdapter());
|
Query query = new Query(backend.databaseAdapter());
|
||||||
providers.values().stream().sorted((a, b) -> Integer.compare(b.priority(), a.priority())).forEach(provider -> provider.createDatabaseTables(query));
|
providers.values().stream().sorted((a, b) -> Integer.compare(b.priority(), a.priority())).forEach(provider -> provider.createDatabaseTables(query));
|
||||||
|
query.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void enableAllProviders() {
|
public void enableAllProviders() {
|
||||||
|
|||||||
+67
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package dev.coph.flightscore.backend.user;
|
package dev.coph.flightscore.backend.user;
|
||||||
|
|
||||||
import dev.coph.flightscore.backend.Backend;
|
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.config.Config;
|
||||||
import dev.coph.flightscore.backend.provider.Provider;
|
import dev.coph.flightscore.backend.provider.Provider;
|
||||||
import dev.coph.flightscore.backend.user.role.Role;
|
import dev.coph.flightscore.backend.user.role.Role;
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ public class RoleProvider implements Provider {
|
|||||||
.table("roles")
|
.table("roles")
|
||||||
.column("id", DataType.BINARY, 26, true)
|
.column("id", DataType.BINARY, 26, true)
|
||||||
.column("name", DataType.VARCHAR, 255)
|
.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"));
|
.primaryKey(List.of("id"));
|
||||||
query.query(tableCreate);
|
query.query(tableCreate);
|
||||||
|
|
||||||
@@ -70,7 +70,7 @@ public class RoleProvider implements Provider {
|
|||||||
srs.forEach(resultSet -> {
|
srs.forEach(resultSet -> {
|
||||||
var roleIdBytes = resultSet.getBytes("id");
|
var roleIdBytes = resultSet.getBytes("id");
|
||||||
var roleName = resultSet.getString("name");
|
var roleName = resultSet.getString("name");
|
||||||
var isDefault = resultSet.getBoolean("default");
|
var isDefault = resultSet.getBoolean("is_default");
|
||||||
var roleId = new ULID(roleIdBytes);
|
var roleId = new ULID(roleIdBytes);
|
||||||
Role role = new Role(roleId, roleName, isDefault);
|
Role role = new Role(roleId, roleName, isDefault);
|
||||||
roles.put(roleId, role);
|
roles.put(roleId, role);
|
||||||
|
|||||||
Reference in New Issue
Block a user