61 lines
No EOL
1.8 KiB
Java
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;
|
|
}
|
|
} |