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