Fixing Yannick's problem
This commit is contained in:
parent
688ff3cedd
commit
c915a96535
6 changed files with 50 additions and 32 deletions
|
@ -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>
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue