Fixing Yannick's problem

This commit is contained in:
jeffcheasey88 2023-02-23 16:26:57 +01:00
parent 688ff3cedd
commit c915a96535
6 changed files with 50 additions and 32 deletions

View file

@ -6,5 +6,6 @@
<classpathentry exported="true" kind="lib" path="mysql-connector-java-8.0.28.jar"/>
<classpathentry exported="true" kind="lib" path="password4j-1.6.3.jar"/>
<classpathentry exported="true" kind="lib" path="slf4j-api-2.0.6.jar"/>
<classpathentry exported="true" kind="lib" path="jose4j-0.9.3.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View file

@ -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));

View file

@ -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);

View file

@ -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;
}
}

View file

@ -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<Response> 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;
}
}

View file

@ -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;
}
}