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;
|
return user != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setUser(User user){
|
||||||
|
this.user = user;
|
||||||
|
}
|
||||||
|
|
||||||
public <U extends User> U getUser(){
|
public <U extends User> U getUser(){
|
||||||
return (U) user;
|
return (U) user;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,11 @@ import java.security.MessageDigest;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
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 Response[] responses;
|
||||||
private Route[] routes;
|
private Route[] routes;
|
||||||
|
@ -12,7 +16,8 @@ public class RouteMapper{
|
||||||
private int[] calls;
|
private int[] calls;
|
||||||
private int dif;
|
private int dif;
|
||||||
|
|
||||||
public RouteMapper(){
|
public RouteMapper(Router<U> router){
|
||||||
|
this.router = router;
|
||||||
this.responses = new Response[0];
|
this.responses = new Response[0];
|
||||||
this.routes = new Route[0];
|
this.routes = new Route[0];
|
||||||
this.patterns = new Pattern[0];
|
this.patterns = new Pattern[0];
|
||||||
|
@ -44,14 +49,18 @@ public class RouteMapper{
|
||||||
Pattern pattern = patterns[i];
|
Pattern pattern = patterns[i];
|
||||||
matcher = pattern.matcher(path);
|
matcher = pattern.matcher(path);
|
||||||
if(matcher.matches()){
|
if(matcher.matches()){
|
||||||
if((!context.isLogged()) && route.needLogin()){
|
|
||||||
writer.response(401, "Access-Control-Allow-Origin: *");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if(route.websocket()){
|
if(route.websocket()){
|
||||||
switchToWebSocket(reader, writer);
|
switchToWebSocket(reader, writer);
|
||||||
reader = new WebSocketReader(reader);
|
reader = new WebSocketReader(reader);
|
||||||
writer = new WebSocketWriter(writer);
|
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);
|
order(i);
|
||||||
result = response;
|
result = response;
|
||||||
|
|
|
@ -28,7 +28,7 @@ public class Router<U extends User>{
|
||||||
}
|
}
|
||||||
|
|
||||||
private Locker<Context> logger;
|
private Locker<Context> logger;
|
||||||
private RouteMapper[] mappers;
|
private RouteMapper<U>[] mappers;
|
||||||
private Response noFileFound;
|
private Response noFileFound;
|
||||||
private RsaJsonWebKey rsaJsonWebKey;
|
private RsaJsonWebKey rsaJsonWebKey;
|
||||||
private JwtConsumer jwtConsumer;
|
private JwtConsumer jwtConsumer;
|
||||||
|
@ -41,7 +41,7 @@ public class Router<U extends User>{
|
||||||
this.logger = new Locker<>();
|
this.logger = new Locker<>();
|
||||||
int types = RequestType.values().length;
|
int types = RequestType.values().length;
|
||||||
this.mappers = new RouteMapper[types];
|
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.rsaJsonWebKey = RsaJwkGenerator.generateJwk(2048);
|
||||||
this.headers = new String[types][0];
|
this.headers = new String[types][0];
|
||||||
}
|
}
|
||||||
|
@ -89,7 +89,7 @@ public class Router<U extends User>{
|
||||||
}
|
}
|
||||||
|
|
||||||
public Router<U> activeReOrdering(){
|
public Router<U> activeReOrdering(){
|
||||||
for(RouteMapper mapper : this.mappers) mapper.activeReOrdering();
|
for(RouteMapper<?> mapper : this.mappers) mapper.activeReOrdering();
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue