Add WebSocket Authentification
This commit is contained in:
parent
4999115ca9
commit
bda04a188b
3 changed files with 22 additions and 9 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue