Make fields in user-related classes immutable and simplify logger usage
This commit is contained in:
Generated
+1
@@ -0,0 +1 @@
|
|||||||
|
FlightScoreBackend
|
||||||
Generated
+8
@@ -1,5 +1,13 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
|
<component name="db-forest-configuration">
|
||||||
|
<data version="2">.
|
||||||
|
----------------------------------------
|
||||||
|
1:0:e0f49905-9df6-459a-a57c-731edb2c1607
|
||||||
|
2:0:74720f71-b717-4c46-a783-e93fc40a8785
|
||||||
|
3:0:c2ae7de6-543e-4eed-8b31-a13cb00693a8
|
||||||
|
.</data>
|
||||||
|
</component>
|
||||||
<component name="db-tree-configuration">
|
<component name="db-tree-configuration">
|
||||||
<option name="data" value="---------------------------------------- 1:0:e0f49905-9df6-459a-a57c-731edb2c1607 2:0:74720f71-b717-4c46-a783-e93fc40a8785 3:0:c2ae7de6-543e-4eed-8b31-a13cb00693a8 " />
|
<option name="data" value="---------------------------------------- 1:0:e0f49905-9df6-459a-a57c-731edb2c1607 2:0:74720f71-b717-4c46-a783-e93fc40a8785 3:0:c2ae7de6-543e-4eed-8b31-a13cb00693a8 " />
|
||||||
</component>
|
</component>
|
||||||
|
|||||||
Generated
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
<file type="web" url="file://$PROJECT_DIR$" />
|
<file type="web" url="file://$PROJECT_DIR$" />
|
||||||
</component>
|
</component>
|
||||||
<component name="KubernetesApiProvider"><![CDATA[{}]]></component>
|
<component name="KubernetesApiProvider"><![CDATA[{}]]></component>
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_25" default="true" project-jdk-name="openjdk-25" project-jdk-type="JavaSDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_26" default="true" project-jdk-name="26" project-jdk-type="JavaSDK">
|
||||||
<output url="file://$PROJECT_DIR$/out" />
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
Generated
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="VcsDirectoryMappings">
|
<component name="VcsDirectoryMappings">
|
||||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
<mapping directory="" vcs="Git" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
@@ -27,9 +27,9 @@ public class Backend {
|
|||||||
|
|
||||||
private final ProviderManager providerManager;
|
private final ProviderManager providerManager;
|
||||||
|
|
||||||
private PermissionProvider permissionProvider;
|
private final PermissionProvider permissionProvider;
|
||||||
private RoleProvider roleProvider;
|
private final RoleProvider roleProvider;
|
||||||
private UserProvider userProvider;
|
private final UserProvider userProvider;
|
||||||
|
|
||||||
|
|
||||||
public Backend() {
|
public Backend() {
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ public class LoginActionResult extends ActionResult{
|
|||||||
this.accessToken = null;
|
this.accessToken = null;
|
||||||
this.refreshToken = null;
|
this.refreshToken = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LoginActionResult(User user, String accessToken, String refreshToken) {
|
public LoginActionResult(User user, String accessToken, String refreshToken) {
|
||||||
super(true, "Login successful");
|
super(true, "Login successful");
|
||||||
this.user = user;
|
this.user = user;
|
||||||
|
|||||||
-3
@@ -7,7 +7,6 @@ import dev.coph.simplerequest.body.JsonBody;
|
|||||||
import dev.coph.simplerequest.handler.RequestHandler;
|
import dev.coph.simplerequest.handler.RequestHandler;
|
||||||
import dev.coph.simplerequest.handler.RequestMethod;
|
import dev.coph.simplerequest.handler.RequestMethod;
|
||||||
import dev.coph.simplerequest.util.ResponseUtil;
|
import dev.coph.simplerequest.util.ResponseUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.eclipse.jetty.http.HttpCookie;
|
import org.eclipse.jetty.http.HttpCookie;
|
||||||
import org.eclipse.jetty.http.HttpStatus;
|
import org.eclipse.jetty.http.HttpStatus;
|
||||||
import org.eclipse.jetty.server.Response;
|
import org.eclipse.jetty.server.Response;
|
||||||
@@ -15,9 +14,7 @@ import org.eclipse.jetty.util.Callback;
|
|||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@Slf4j
|
|
||||||
public class LoginRequestHandler {
|
public class LoginRequestHandler {
|
||||||
private final Logger logger = Logger.of("RH - Login");
|
private final Logger logger = Logger.of("RH - Login");
|
||||||
private final Backend backend;
|
private final Backend backend;
|
||||||
|
|||||||
@@ -11,14 +11,14 @@ import java.util.Locale;
|
|||||||
@Accessors(fluent = true)
|
@Accessors(fluent = true)
|
||||||
public class User {
|
public class User {
|
||||||
|
|
||||||
private ULID id;
|
private final ULID id;
|
||||||
private String firstName;
|
private final String firstName;
|
||||||
private String lastName;
|
private final String lastName;
|
||||||
private String email;
|
private final String email;
|
||||||
private String phoneNumber;
|
private final String phoneNumber;
|
||||||
private Locale country;
|
private final Locale country;
|
||||||
private Role role;
|
private Role role;
|
||||||
private boolean blocked;
|
private final boolean blocked;
|
||||||
|
|
||||||
public User(ULID id, String firstname, String lastname, String email, String phoneNumber, Locale country, boolean blocked) {
|
public User(ULID id, String firstname, String lastname, String email, String phoneNumber, Locale country, boolean blocked) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import dev.coph.flightscore.backend.utils.TokenGenerator;
|
|||||||
import dev.coph.simpleauthentication.cryptography.CCrypt;
|
import dev.coph.simpleauthentication.cryptography.CCrypt;
|
||||||
import dev.coph.simpleauthentication.jwt.JWT;
|
import dev.coph.simpleauthentication.jwt.JWT;
|
||||||
import dev.coph.simpleauthentication.jwt.JwtException;
|
import dev.coph.simpleauthentication.jwt.JwtException;
|
||||||
import dev.coph.simpleauthentication.jwt.algorithm.EdDSAAlgorithm;
|
|
||||||
import dev.coph.simpleauthentication.jwt.algorithm.HS256Algorithm;
|
import dev.coph.simpleauthentication.jwt.algorithm.HS256Algorithm;
|
||||||
import dev.coph.simpleauthentication.jwt.algorithm.JwtSignAlgorithm;
|
import dev.coph.simpleauthentication.jwt.algorithm.JwtSignAlgorithm;
|
||||||
import dev.coph.simplecache.Cache;
|
import dev.coph.simplecache.Cache;
|
||||||
@@ -23,24 +22,19 @@ import dev.coph.simplesql.database.attributes.CreateMethod;
|
|||||||
import dev.coph.simplesql.database.attributes.DataType;
|
import dev.coph.simplesql.database.attributes.DataType;
|
||||||
import dev.coph.simplesql.query.Query;
|
import dev.coph.simplesql.query.Query;
|
||||||
import dev.coph.simpleutilities.ulid.ULID;
|
import dev.coph.simpleutilities.ulid.ULID;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
@Slf4j
|
|
||||||
public class UserProvider implements Provider {
|
public class UserProvider implements Provider {
|
||||||
private Logger logger = Logger.of("UserProvider");
|
|
||||||
private final Backend backend;
|
private final Backend backend;
|
||||||
|
private final Logger logger = Logger.of("UserProvider");
|
||||||
private JwtSignAlgorithm jwtSignAlgorithm;
|
private JwtSignAlgorithm jwtSignAlgorithm;
|
||||||
private long JWT_EXPIRATION_TIME;
|
private long JWT_EXPIRATION_TIME;
|
||||||
|
|
||||||
@@ -253,6 +247,30 @@ public class UserProvider implements Provider {
|
|||||||
return new LoginActionResult(user, accessToken, refreshToken);
|
return new LoginActionResult(user, accessToken, refreshToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String createAccessToken(User user, long expiresAt) {
|
||||||
|
try {
|
||||||
|
JWT.Builder builder = new JWT.Builder()
|
||||||
|
.algorithm(jwtSignAlgorithm)
|
||||||
|
.audience("flightscore-api")
|
||||||
|
.issuer("flightscore-api")
|
||||||
|
.subject(user.id().toString())
|
||||||
|
.expiresAt(expiresAt / 1000)
|
||||||
|
.issuedAt(System.currentTimeMillis() / 1000);
|
||||||
|
|
||||||
|
if (user.role() != null) {
|
||||||
|
JSONArray permissions = new JSONArray();
|
||||||
|
user.role().permissions().forEach(permission -> permissions.put(permission.name()));
|
||||||
|
builder.claim("permission", permissions.toString());
|
||||||
|
builder.claim("role", user.role().id().toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return builder.sign();
|
||||||
|
} catch (JwtException e) {
|
||||||
|
logger.error("Error creating JWT", e);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public LoginActionResult refreshToken(String refreshToken) {
|
public LoginActionResult refreshToken(String refreshToken) {
|
||||||
if (refreshToken == null || refreshToken.isEmpty()) {
|
if (refreshToken == null || refreshToken.isEmpty()) {
|
||||||
return new LoginActionResult(false, "Invalid refresh token");
|
return new LoginActionResult(false, "Invalid refresh token");
|
||||||
@@ -368,28 +386,4 @@ public class UserProvider implements Provider {
|
|||||||
return exists.get();
|
return exists.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
private String createAccessToken(User user, long expiresAt) {
|
|
||||||
try {
|
|
||||||
JWT.Builder builder = new JWT.Builder()
|
|
||||||
.algorithm(jwtSignAlgorithm)
|
|
||||||
.audience("flightscore-api")
|
|
||||||
.issuer("flightscore-api")
|
|
||||||
.subject(user.id().toString())
|
|
||||||
.expiresAt(expiresAt / 1000)
|
|
||||||
.issuedAt(System.currentTimeMillis() / 1000);
|
|
||||||
|
|
||||||
if (user.role() != null) {
|
|
||||||
JSONArray permissions = new JSONArray();
|
|
||||||
user.role().permissions().forEach(permission -> permissions.put(permission.name()));
|
|
||||||
builder.claim("permission", permissions.toString());
|
|
||||||
builder.claim("role", user.role().id().toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
return builder.sign();
|
|
||||||
} catch (JwtException e) {
|
|
||||||
logger.error("Error creating JWT", e);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,12 +7,11 @@ import lombok.experimental.Accessors;
|
|||||||
@Getter
|
@Getter
|
||||||
@Accessors(fluent = true)
|
@Accessors(fluent = true)
|
||||||
public class Permission {
|
public class Permission {
|
||||||
|
private final ULID id;
|
||||||
|
private final String name;
|
||||||
public Permission(ULID id, String name) {
|
public Permission(ULID id, String name) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ULID id;
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ public class PermissionProvider implements Provider {
|
|||||||
.column("id", DataType.BINARY, 26, true)
|
.column("id", DataType.BINARY, 26, true)
|
||||||
.column("name", DataType.VARCHAR, 255)
|
.column("name", DataType.VARCHAR, 255)
|
||||||
.primaryKey(List.of("id"));
|
.primaryKey(List.of("id"));
|
||||||
;
|
|
||||||
query.query(tableCreate);
|
query.query(tableCreate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,15 +11,14 @@ import java.util.HashSet;
|
|||||||
@Accessors(fluent = true)
|
@Accessors(fluent = true)
|
||||||
public class Role {
|
public class Role {
|
||||||
|
|
||||||
|
private final ULID id;
|
||||||
|
private final String name;
|
||||||
|
private final boolean defaultRole;
|
||||||
|
private final HashSet<Permission> permissions = new HashSet<>();
|
||||||
public Role(ULID id, String name, boolean defaultRole) {
|
public Role(ULID id, String name, boolean defaultRole) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.defaultRole = defaultRole;
|
this.defaultRole = defaultRole;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ULID id;
|
|
||||||
private String name;
|
|
||||||
private boolean defaultRole;
|
|
||||||
private HashSet<Permission> permissions = new HashSet<>();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import dev.coph.simplesql.query.Query;
|
|||||||
import dev.coph.simpleutilities.ulid.ULID;
|
import dev.coph.simpleutilities.ulid.ULID;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
import org.checkerframework.checker.units.qual.C;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -19,12 +18,11 @@ import java.util.List;
|
|||||||
@Accessors(fluent = true)
|
@Accessors(fluent = true)
|
||||||
public class RoleProvider implements Provider {
|
public class RoleProvider implements Provider {
|
||||||
private final Logger logger = Logger.of("RoleProvider");
|
private final Logger logger = Logger.of("RoleProvider");
|
||||||
private HashMap<ULID, Role> roles = new HashMap<>();
|
private final Backend backend;
|
||||||
|
private final HashMap<ULID, Role> roles = new HashMap<>();
|
||||||
@Getter
|
@Getter
|
||||||
private Role defaultRole;
|
private Role defaultRole;
|
||||||
|
|
||||||
private final Backend backend;
|
|
||||||
|
|
||||||
public RoleProvider(Backend backend) {
|
public RoleProvider(Backend backend) {
|
||||||
this.backend = backend;
|
this.backend = backend;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package dev.coph.flightscore.backend.utils;
|
package dev.coph.flightscore.backend.utils;
|
||||||
|
|
||||||
import dev.coph.simplelogger.GenericLogger;
|
import dev.coph.simplelogger.GenericLogger;
|
||||||
import dev.coph.simplelogger.Logger;
|
|
||||||
|
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.security.MessageDigest;
|
import java.security.MessageDigest;
|
||||||
|
|||||||
Reference in New Issue
Block a user