This commit is contained in:
jeffcheasey88 2023-03-18 15:04:50 +01:00
parent eb5f62c19d
commit 7174a24ca8
5 changed files with 31 additions and 33 deletions

View file

@ -34,10 +34,10 @@ public class BadgeDetails implements Response {
JSONObject badgeJSON = new JSONObject();
if (badge != null) {
badgeJSON.put("name", badge.getName());
if(badge.getLogo() != null) badgeJSON.put("logo", new String(Base64.getEncoder().encode(badge.getLogo())));
if(badge.getLogo() != null) badgeJSON.put("logo", Base64.getEncoder().encodeToString(badge.getLogo()));
badgeJSON.put("level", badge.getLevel());
}
writer.write(badgeJSON.toJSONString());
writer.write(badgeJSON.toJSONString().replace("\\", ""));
}
else {
HttpUtil.responseHeaders(writer, 400, "Access-Control-Allow-Origin: *");

View file

@ -14,6 +14,7 @@ import be.jeffcheasey88.peeratcode.webserver.HttpReader;
import be.jeffcheasey88.peeratcode.webserver.HttpUtil;
import be.jeffcheasey88.peeratcode.webserver.HttpWriter;
import be.jeffcheasey88.peeratcode.webserver.Response;
import be.jeffcheasey88.peeratcode.webserver.Route;
import be.jeffcheasey88.peeratcode.webserver.Router;
import be.jeffcheasey88.peeratcode.webserver.User;
@ -27,6 +28,7 @@ public class Login implements Response {
this.router = router;
}
@Route(path = "^\\/login$", type = "POST")
@Override
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception {
if(user != null){
@ -49,14 +51,4 @@ public class Login implements Response {
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
}
@Override
public Pattern getPattern() {
return Pattern.compile("^\\/login$");
}
@Override
public String getType(){
return "POST";
}
}

View file

@ -8,9 +8,12 @@ import be.jeffcheasey88.peeratcode.webserver.HttpWriter;
import be.jeffcheasey88.peeratcode.webserver.Response;
import be.jeffcheasey88.peeratcode.webserver.User;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import java.util.Arrays;
import java.util.Base64;
import java.util.SortedSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -54,9 +57,4 @@ public class PlayerDetails implements Response {
public Pattern getPattern() {
return Pattern.compile("^\\/player\\/(.+)?$");
}
@Override
public boolean needLogin(){
return true;
}
}

View file

@ -7,9 +7,4 @@ public interface Response{
void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception ;
Pattern getPattern();
default String getType(){ return "GET"; }
default boolean needLogin() { return false; }
}

View file

@ -1,8 +1,11 @@
package be.jeffcheasey88.peeratcode.webserver;
import java.util.ArrayList;
import java.util.List;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jose4j.jwk.RsaJsonWebKey;
import org.jose4j.jwk.RsaJwkGenerator;
@ -15,7 +18,8 @@ import be.jeffcheasey88.peeratcode.repository.DatabaseRepository;
public class Router{
private List<Response> responses;
private Map<Response, Route> responses;
private Map<Response, Pattern> patterns;
private Response noFileFound;
private RsaJsonWebKey rsaJsonWebKey;
private DatabaseRepository repo;
@ -26,7 +30,8 @@ public class Router{
this.repo = repo;
this.token_issuer = token_issuer;
this.token_expiration = token_expiration;
this.responses = new ArrayList<>();
this.responses = new HashMap<>();
this.patterns = new HashMap<>();
this.rsaJsonWebKey = RsaJwkGenerator.generateJwk(2048);
}
@ -35,7 +40,15 @@ public class Router{
}
public void register(Response response){
this.responses.add(response);
try {
Method method = response.getClass().getDeclaredMethod("exec");
Route route = method.getAnnotation(Route.class);
this.responses.put(response, route);
this.patterns.put(response, Pattern.compile(route.path()));
} catch (Exception e){
throw new IllegalArgumentException(e);
}
}
public void setDefault(Response response){
@ -43,12 +56,12 @@ public class Router{
}
public void exec(String type, String path, User user, HttpReader reader, HttpWriter writer) throws Exception {
for(Response response : this.responses){
if(type.equals(response.getType())){
Matcher matcher = response.getPattern().matcher(path);
for(Entry<Response, Route> routes : this.responses.entrySet()){
if(routes.getValue().type().equals(type)){
Matcher matcher = this.patterns.get(routes.getKey()).matcher(path);
if(matcher.matches()){
if(user == null && response.needLogin()) return;
response.exec(matcher, user, reader, writer);
if(user == null && routes.getValue().needLogin()) return;
routes.getKey().exec(matcher, user, reader, writer);
return;
}
}