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"?>
|
||||
<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">
|
||||
<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>
|
||||
|
||||
Generated
+1
-1
@@ -5,7 +5,7 @@
|
||||
<file type="web" url="file://$PROJECT_DIR$" />
|
||||
</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" />
|
||||
</component>
|
||||
</project>
|
||||
Generated
+1
-1
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -27,9 +27,9 @@ public class Backend {
|
||||
|
||||
private final ProviderManager providerManager;
|
||||
|
||||
private PermissionProvider permissionProvider;
|
||||
private RoleProvider roleProvider;
|
||||
private UserProvider userProvider;
|
||||
private final PermissionProvider permissionProvider;
|
||||
private final RoleProvider roleProvider;
|
||||
private final UserProvider userProvider;
|
||||
|
||||
|
||||
public Backend() {
|
||||
|
||||
@@ -6,7 +6,7 @@ import lombok.experimental.Accessors;
|
||||
|
||||
@Getter
|
||||
@Accessors(fluent = true)
|
||||
public class LoginActionResult extends ActionResult{
|
||||
public class LoginActionResult extends ActionResult {
|
||||
|
||||
|
||||
private final User user;
|
||||
@@ -19,6 +19,7 @@ public class LoginActionResult extends ActionResult{
|
||||
this.accessToken = null;
|
||||
this.refreshToken = null;
|
||||
}
|
||||
|
||||
public LoginActionResult(User user, String accessToken, String refreshToken) {
|
||||
super(true, "Login successful");
|
||||
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.RequestMethod;
|
||||
import dev.coph.simplerequest.util.ResponseUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.eclipse.jetty.http.HttpCookie;
|
||||
import org.eclipse.jetty.http.HttpStatus;
|
||||
import org.eclipse.jetty.server.Response;
|
||||
@@ -15,9 +14,7 @@ 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;
|
||||
|
||||
@@ -11,14 +11,14 @@ import java.util.Locale;
|
||||
@Accessors(fluent = true)
|
||||
public class User {
|
||||
|
||||
private ULID id;
|
||||
private String firstName;
|
||||
private String lastName;
|
||||
private String email;
|
||||
private String phoneNumber;
|
||||
private Locale country;
|
||||
private final ULID id;
|
||||
private final String firstName;
|
||||
private final String lastName;
|
||||
private final String email;
|
||||
private final String phoneNumber;
|
||||
private final Locale country;
|
||||
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) {
|
||||
this.id = id;
|
||||
|
||||
@@ -11,7 +11,6 @@ import dev.coph.flightscore.backend.utils.TokenGenerator;
|
||||
import dev.coph.simpleauthentication.cryptography.CCrypt;
|
||||
import dev.coph.simpleauthentication.jwt.JWT;
|
||||
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.JwtSignAlgorithm;
|
||||
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.query.Query;
|
||||
import dev.coph.simpleutilities.ulid.ULID;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.json.JSONArray;
|
||||
|
||||
import java.io.File;
|
||||
import java.sql.Timestamp;
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
@Slf4j
|
||||
public class UserProvider implements Provider {
|
||||
private Logger logger = Logger.of("UserProvider");
|
||||
private final Backend backend;
|
||||
|
||||
private final Logger logger = Logger.of("UserProvider");
|
||||
private JwtSignAlgorithm jwtSignAlgorithm;
|
||||
private long JWT_EXPIRATION_TIME;
|
||||
|
||||
@@ -253,6 +247,30 @@ public class UserProvider implements Provider {
|
||||
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) {
|
||||
if (refreshToken == null || refreshToken.isEmpty()) {
|
||||
return new LoginActionResult(false, "Invalid refresh token");
|
||||
@@ -368,28 +386,4 @@ public class UserProvider implements Provider {
|
||||
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
|
||||
@Accessors(fluent = true)
|
||||
public class Permission {
|
||||
private final ULID id;
|
||||
private final String name;
|
||||
public Permission(ULID id, String name) {
|
||||
this.id = id;
|
||||
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("name", DataType.VARCHAR, 255)
|
||||
.primaryKey(List.of("id"));
|
||||
;
|
||||
query.query(tableCreate);
|
||||
}
|
||||
|
||||
|
||||
@@ -11,15 +11,14 @@ import java.util.HashSet;
|
||||
@Accessors(fluent = true)
|
||||
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) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
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 lombok.Getter;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.checkerframework.checker.units.qual.C;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@@ -19,12 +18,11 @@ import java.util.List;
|
||||
@Accessors(fluent = true)
|
||||
public class RoleProvider implements Provider {
|
||||
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
|
||||
private Role defaultRole;
|
||||
|
||||
private final Backend backend;
|
||||
|
||||
public RoleProvider(Backend backend) {
|
||||
this.backend = backend;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package dev.coph.flightscore.backend.utils;
|
||||
|
||||
import dev.coph.simplelogger.GenericLogger;
|
||||
import dev.coph.simplelogger.Logger;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.MessageDigest;
|
||||
|
||||
Reference in New Issue
Block a user