From fb442f075b6953ed02ecfc035531847b0d5c34f7 Mon Sep 17 00:00:00 2001 From: jeffcheasey88 <66554203+jeffcheasey88@users.noreply.github.com> Date: Wed, 26 Jul 2023 16:01:07 +0200 Subject: [PATCH] Make User customizable --- .../peeratcode/framework/Client.java | 15 ++++---------- .../peeratcode/framework/Router.java | 20 ++++++++++--------- .../peeratcode/framework/User.java | 13 +++--------- 3 files changed, 18 insertions(+), 30 deletions(-) diff --git a/src/be/jeffcheasey88/peeratcode/framework/Client.java b/src/be/jeffcheasey88/peeratcode/framework/Client.java index 0f726cc..bcc8043 100644 --- a/src/be/jeffcheasey88/peeratcode/framework/Client.java +++ b/src/be/jeffcheasey88/peeratcode/framework/Client.java @@ -3,19 +3,13 @@ package be.jeffcheasey88.peeratcode.framework; import java.net.Socket; import java.util.Arrays; -import org.jose4j.jwa.AlgorithmConstraints.ConstraintType; -import org.jose4j.jws.AlgorithmIdentifiers; -import org.jose4j.jwt.JwtClaims; -import org.jose4j.jwt.consumer.JwtConsumer; -import org.jose4j.jwt.consumer.JwtConsumerBuilder; - -public class Client extends Thread{ +public class Client extends Thread{ private HttpReader reader; private HttpWriter writer; - private Router router; + private Router router; - public Client(Socket socket, Router router) throws Exception{ + public Client(Socket socket, Router router) throws Exception{ this.reader = new HttpReader(socket); this.writer = new HttpWriter(socket); this.router = router; @@ -41,8 +35,7 @@ public class Client extends Thread{ if(auth == null) return null; auth = auth.substring(7); try{ - JwtClaims jwtClaims = this.router.getJwtConsumer().processToClaims(auth); - return new User(jwtClaims); + return this.router.getUser(auth); }catch(Exception e){ writer.response(401, "Access-Control-Allow-Origin: *"); writer.flush(); diff --git a/src/be/jeffcheasey88/peeratcode/framework/Router.java b/src/be/jeffcheasey88/peeratcode/framework/Router.java index b336fa9..040d8f2 100644 --- a/src/be/jeffcheasey88/peeratcode/framework/Router.java +++ b/src/be/jeffcheasey88/peeratcode/framework/Router.java @@ -8,6 +8,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.function.Consumer; +import java.util.function.Function; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -24,7 +25,7 @@ import org.jose4j.jwt.consumer.JwtConsumer; import org.jose4j.jwt.consumer.JwtConsumerBuilder; import org.jose4j.lang.JoseException; -public class Router{ +public class Router{ private Map> responses; private Map patterns; @@ -32,16 +33,16 @@ public class Router{ private RsaJsonWebKey rsaJsonWebKey; private JwtConsumer jwtConsumer; private Consumer claims; + private Function userCreator; public Router() throws Exception{ this.responses = new HashMap<>(); for(RequestType type : RequestType.values()) this.responses.put(type, new HashMap<>()); this.patterns = new HashMap<>(); this.rsaJsonWebKey = RsaJwkGenerator.generateJwk(2048); - } - public Router configureJwt(Consumer consumer, Consumer claims){ + public Router configureJwt(Consumer consumer, Consumer claims, Function userCreator){ JwtConsumerBuilder builder = new JwtConsumerBuilder() .setRequireExpirationTime() .setAllowedClockSkewInSeconds(30) @@ -52,6 +53,7 @@ public class Router{ this.jwtConsumer = builder.build(); this.claims = claims; + this.userCreator = userCreator; return this; } @@ -64,7 +66,7 @@ public class Router{ while (!server.isClosed()) { Socket socket = server.accept(); - Client client = new Client(socket, this); + Client client = new Client<>(socket, this); client.start(); } } catch (Exception e) { @@ -78,7 +80,7 @@ public class Router{ try (ServerSocket server = new ServerSocket(port)) { while (!server.isClosed()) { Socket socket = server.accept(); - Client client = new Client(socket, this); + Client client = new Client<>(socket, this); client.start(); } } catch (Exception e) { @@ -130,18 +132,18 @@ public class Router{ System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword); } - public JwtConsumer getJwtConsumer(){ - return this.jwtConsumer; + public U getUser(String token) throws Exception{ + return this.userCreator.apply(this.jwtConsumer.processToClaims(token)); } - public String createAuthUser(int id) throws JoseException{ + public String createAuthUser(U user) throws JoseException{ JwtClaims claims = new JwtClaims(); claims.setGeneratedJwtId(); // a unique identifier for the token claims.setIssuedAtToNow(); // when the token was issued/created (now) claims.setNotBeforeMinutesInThePast(2); // time before which the token is not yet valid (2 minutes ago) this.claims.accept(claims); - claims.setClaim("id", id); + user.write(claims); JsonWebSignature jws = new JsonWebSignature(); jws.setPayload(claims.toJson()); diff --git a/src/be/jeffcheasey88/peeratcode/framework/User.java b/src/be/jeffcheasey88/peeratcode/framework/User.java index 663c0f0..09f682e 100644 --- a/src/be/jeffcheasey88/peeratcode/framework/User.java +++ b/src/be/jeffcheasey88/peeratcode/framework/User.java @@ -2,15 +2,8 @@ package be.jeffcheasey88.peeratcode.framework; import org.jose4j.jwt.JwtClaims; -public class User{ - - private int id; - - public User(JwtClaims jwtClaims){ - this.id = ((Long) jwtClaims.getClaimValue("id")).intValue(); - } +public abstract class User{ + + public abstract void write(JwtClaims claims); - public int getId(){ - return this.id; - } } \ No newline at end of file