peer-at-code-backend/src/be/jeffcheasey88/peeratcode/webserver/Client.java
2023-02-27 14:52:42 +01:00

61 lines
No EOL
1.8 KiB
Java

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{
private HttpReader reader;
private HttpWriter writer;
private Router router;
private RsaJsonWebKey key;
public Client(Socket socket, Router router, RsaJsonWebKey key) throws Exception{
this.reader = new HttpReader(socket);
this.writer = new HttpWriter(socket);
this.router = router;
this.key = key;
}
@Override
public void run(){
try {
String[] headers = reader.readLine().split("\\s");
System.out.println(Arrays.toString(headers));
router.exec(headers[0], headers[1], isLogin(reader), reader, writer);
writer.flush();
writer.close();
} catch (Exception e){}
}
private User isLogin(HttpReader reader) throws Exception{
String auth = HttpUtil.readAutorization(reader);
if(auth == null) return null;
try {
JwtConsumer jwtConsumer = new JwtConsumerBuilder()
.setRequireExpirationTime()
.setAllowedClockSkewInSeconds(30)
.setRequireSubject()
.setExpectedIssuer(this.router.getTokenIssuer())
.setVerificationKey(this.router.getWebKey().getKey())
.setJwsAlgorithmConstraints(
ConstraintType.PERMIT, AlgorithmIdentifiers.RSA_USING_SHA256)
.build();
JwtClaims jwtClaims = jwtConsumer.processToClaims(auth);
return new User(jwtClaims);
}catch(Exception e){
HttpUtil.responseHeaders(writer, 401, "Access-Control-Allow-Origin: *");
}
return null;
}
}