From c915a96535cc46e7ed37cee99ba4dfe97c3d9c44 Mon Sep 17 00:00:00 2001 From: jeffcheasey88 <66554203+jeffcheasey88@users.noreply.github.com> Date: Thu, 23 Feb 2023 16:26:57 +0100 Subject: [PATCH] Fixing Yannick's problem --- .classpath | 1 + .../peeratcode/routes/PuzzleResponse.java | 3 +- .../peeratcode/routes/Result.java | 3 +- .../peeratcode/webserver/Client.java | 28 +++++++++++++- .../peeratcode/webserver/Router.java | 10 ++++- .../peeratcode/webserver/User.java | 37 +++++-------------- 6 files changed, 50 insertions(+), 32 deletions(-) diff --git a/.classpath b/.classpath index 15c4f2a..72e7d1e 100644 --- a/.classpath +++ b/.classpath @@ -6,5 +6,6 @@ + diff --git a/src/be/jeffcheasey88/peeratcode/routes/PuzzleResponse.java b/src/be/jeffcheasey88/peeratcode/routes/PuzzleResponse.java index 4742433..81e7b64 100644 --- a/src/be/jeffcheasey88/peeratcode/routes/PuzzleResponse.java +++ b/src/be/jeffcheasey88/peeratcode/routes/PuzzleResponse.java @@ -11,6 +11,7 @@ import be.jeffcheasey88.peeratcode.webserver.HttpReader; import be.jeffcheasey88.peeratcode.webserver.HttpUtil; import be.jeffcheasey88.peeratcode.webserver.HttpWriter; import be.jeffcheasey88.peeratcode.webserver.Response; +import be.jeffcheasey88.peeratcode.webserver.User; public class PuzzleResponse implements Response { private final DatabaseRepository databaseRepo; @@ -20,7 +21,7 @@ public class PuzzleResponse implements Response { } @Override - public void exec(Matcher matcher, HttpReader reader, HttpWriter writer) throws Exception { + public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception { HttpUtil.skipHeaders(reader); int puzzleId = Integer.parseInt(matcher.group(1)); diff --git a/src/be/jeffcheasey88/peeratcode/routes/Result.java b/src/be/jeffcheasey88/peeratcode/routes/Result.java index e28e57f..de1cb0d 100644 --- a/src/be/jeffcheasey88/peeratcode/routes/Result.java +++ b/src/be/jeffcheasey88/peeratcode/routes/Result.java @@ -8,6 +8,7 @@ import be.jeffcheasey88.peeratcode.webserver.HttpReader; import be.jeffcheasey88.peeratcode.webserver.HttpUtil; import be.jeffcheasey88.peeratcode.webserver.HttpWriter; import be.jeffcheasey88.peeratcode.webserver.Response; +import be.jeffcheasey88.peeratcode.webserver.User; public class Result implements Response{ @@ -18,7 +19,7 @@ public class Result implements Response{ } @Override - public void exec(Matcher matcher, HttpReader reader, HttpWriter writer) throws Exception { + public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception { int puzzle = Integer.parseInt(matcher.group(1)); int score = this.repo.getScore(0, puzzle); diff --git a/src/be/jeffcheasey88/peeratcode/webserver/Client.java b/src/be/jeffcheasey88/peeratcode/webserver/Client.java index 4e6b136..c882f41 100644 --- a/src/be/jeffcheasey88/peeratcode/webserver/Client.java +++ b/src/be/jeffcheasey88/peeratcode/webserver/Client.java @@ -3,7 +3,13 @@ package be.jeffcheasey88.peeratcode.webserver; import java.net.Socket; import java.util.Arrays; +import org.jose4j.jwa.AlgorithmConstraints.ConstraintType; import org.jose4j.jwk.RsaJsonWebKey; +import org.jose4j.jwk.RsaJwkGenerator; +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{ @@ -25,10 +31,28 @@ public class Client extends Thread{ String[] headers = reader.readLine().split("\\s"); System.out.println(Arrays.toString(headers)); - User user = new User(HttpUtil.readAutorization(reader)); - router.exec(headers[0], headers[1], user, reader, writer); + router.exec(headers[0], headers[1], isLogin(reader), reader, writer); } catch (Exception e) { e.printStackTrace(); } } + + private User isLogin(HttpReader reader){ + try { + JwtConsumer jwtConsumer = new JwtConsumerBuilder() + .setRequireExpirationTime() + .setAllowedClockSkewInSeconds(30) + .setRequireSubject() + .setExpectedIssuer("Issuer") + .setExpectedAudience("Audience") + .setVerificationKey(this.router.getWebKey().getKey()) + .setJwsAlgorithmConstraints( + ConstraintType.PERMIT, AlgorithmIdentifiers.RSA_USING_SHA256) + .build(); + + JwtClaims jwtClaims = jwtConsumer.processToClaims(HttpUtil.readAutorization(reader)); + return new User(jwtClaims); + }catch(Exception e){} + return null; + } } \ No newline at end of file diff --git a/src/be/jeffcheasey88/peeratcode/webserver/Router.java b/src/be/jeffcheasey88/peeratcode/webserver/Router.java index 4bc9882..0159e28 100644 --- a/src/be/jeffcheasey88/peeratcode/webserver/Router.java +++ b/src/be/jeffcheasey88/peeratcode/webserver/Router.java @@ -4,13 +4,18 @@ import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; +import org.jose4j.jwk.RsaJsonWebKey; +import org.jose4j.jwk.RsaJwkGenerator; + public class Router{ private List responses; private Response noFileFound; + private RsaJsonWebKey rsaJsonWebKey; - public Router(){ + public Router() throws Exception{ this.responses = new ArrayList<>(); + this.rsaJsonWebKey = RsaJwkGenerator.generateJwk(2048); } public void register(Response response){ @@ -34,4 +39,7 @@ public class Router{ if(noFileFound != null) noFileFound.exec(null, user, reader, writer); } + public RsaJsonWebKey getWebKey(){ + return this.rsaJsonWebKey; + } } \ No newline at end of file diff --git a/src/be/jeffcheasey88/peeratcode/webserver/User.java b/src/be/jeffcheasey88/peeratcode/webserver/User.java index 341dc3b..b4c91fc 100644 --- a/src/be/jeffcheasey88/peeratcode/webserver/User.java +++ b/src/be/jeffcheasey88/peeratcode/webserver/User.java @@ -1,39 +1,22 @@ package be.jeffcheasey88.peeratcode.webserver; -import org.jose4j.jwa.AlgorithmConstraints.ConstraintType; -import org.jose4j.jwe.JsonWebEncryption; -import org.jose4j.jwk.JsonWebKey; -import org.jose4j.jwk.RsaJsonWebKey; -import org.jose4j.jwk.RsaJwkGenerator; -import org.jose4j.jws.AlgorithmIdentifiers; import org.jose4j.jwt.JwtClaims; -import org.jose4j.jwt.consumer.ErrorCodes; -import org.jose4j.jwt.consumer.InvalidJwtException; -import org.jose4j.jwt.consumer.JwtConsumer; -import org.jose4j.jwt.consumer.JwtConsumerBuilder; -import org.jose4j.lang.JoseException; public class User { - private final String username; + private String username; + private int id; - public User(final RsaJsonWebKey rsaJsonWebKey, final String jwt) throws InvalidJwtException { - JwtConsumer jwtConsumer = new JwtConsumerBuilder() - .setRequireExpirationTime() - .setAllowedClockSkewInSeconds(30) - .setRequireSubject() - .setExpectedIssuer("Issuer") - .setExpectedAudience("Audience") - .setVerificationKey(rsaJsonWebKey.getKey()) - .setJwsAlgorithmConstraints( - ConstraintType.PERMIT, AlgorithmIdentifiers.RSA_USING_SHA256) - .build(); - - JwtClaims jwtClaims = jwtConsumer.processToClaims(jwt); - username = (String) jwtClaims.getClaimValue("username"); + public User(JwtClaims jwtClaims){ + this.username = (String) jwtClaims.getClaimValue("username"); + this.id = (int) jwtClaims.getClaimValue("id"); } - public String getUsername() { + public String getUsername(){ return username; } + + public int getId(){ + return this.id; + } } \ No newline at end of file