Add WebSocket Authentification

This commit is contained in:
jeffcheasey88 2023-09-23 17:40:51 +02:00
parent 4999115ca9
commit bda04a188b
3 changed files with 22 additions and 9 deletions

View file

@ -29,6 +29,10 @@ public class Context{
return user != null;
}
void setUser(User user){
this.user = user;
}
public <U extends User> U getUser(){
return (U) user;
}

View file

@ -4,7 +4,11 @@ import java.security.MessageDigest;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RouteMapper{
import dev.peerat.framework.utils.json.JsonMap;
public class RouteMapper<U extends User>{
private Router<U> router;
private Response[] responses;
private Route[] routes;
@ -12,7 +16,8 @@ public class RouteMapper{
private int[] calls;
private int dif;
public RouteMapper(){
public RouteMapper(Router<U> router){
this.router = router;
this.responses = new Response[0];
this.routes = new Route[0];
this.patterns = new Pattern[0];
@ -44,14 +49,18 @@ public class RouteMapper{
Pattern pattern = patterns[i];
matcher = pattern.matcher(path);
if(matcher.matches()){
if((!context.isLogged()) && route.needLogin()){
writer.response(401, "Access-Control-Allow-Origin: *");
return true;
}
if(route.websocket()){
switchToWebSocket(reader, writer);
reader = new WebSocketReader(reader);
writer = new WebSocketWriter(writer);
if(route.needLogin()){
String token = reader.<JsonMap>readJson().get("token");
context.setUser(this.router.getUser(token));
}
}
if((!context.isLogged()) && route.needLogin()){
writer.response(401, router.getDefaultHeaders(context.getType()));
return true;
}
order(i);
result = response;

View file

@ -28,7 +28,7 @@ public class Router<U extends User>{
}
private Locker<Context> logger;
private RouteMapper[] mappers;
private RouteMapper<U>[] mappers;
private Response noFileFound;
private RsaJsonWebKey rsaJsonWebKey;
private JwtConsumer jwtConsumer;
@ -41,7 +41,7 @@ public class Router<U extends User>{
this.logger = new Locker<>();
int types = RequestType.values().length;
this.mappers = new RouteMapper[types];
for(RequestType type : RequestType.values()) this.mappers[type.ordinal()] = new RouteMapper();
for(RequestType type : RequestType.values()) this.mappers[type.ordinal()] = new RouteMapper<>(this);
this.rsaJsonWebKey = RsaJwkGenerator.generateJwk(2048);
this.headers = new String[types][0];
}
@ -89,7 +89,7 @@ public class Router<U extends User>{
}
public Router<U> activeReOrdering(){
for(RouteMapper mapper : this.mappers) mapper.activeReOrdering();
for(RouteMapper<?> mapper : this.mappers) mapper.activeReOrdering();
return this;
}