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(); JSONObject badgeJSON = new JSONObject();
if (badge != null) { if (badge != null) {
badgeJSON.put("name", badge.getName()); 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()); badgeJSON.put("level", badge.getLevel());
} }
writer.write(badgeJSON.toJSONString()); writer.write(badgeJSON.toJSONString().replace("\\", ""));
} }
else { else {
HttpUtil.responseHeaders(writer, 400, "Access-Control-Allow-Origin: *"); HttpUtil.responseHeaders(writer, 400, "Access-Control-Allow-Origin: *");
@ -48,4 +48,4 @@ public class BadgeDetails implements Response {
public Pattern getPattern() { public Pattern getPattern() {
return Pattern.compile("^\\/badge\\/([0-9]+)$"); return Pattern.compile("^\\/badge\\/([0-9]+)$");
} }
} }

View file

@ -14,6 +14,7 @@ import be.jeffcheasey88.peeratcode.webserver.HttpReader;
import be.jeffcheasey88.peeratcode.webserver.HttpUtil; import be.jeffcheasey88.peeratcode.webserver.HttpUtil;
import be.jeffcheasey88.peeratcode.webserver.HttpWriter; import be.jeffcheasey88.peeratcode.webserver.HttpWriter;
import be.jeffcheasey88.peeratcode.webserver.Response; import be.jeffcheasey88.peeratcode.webserver.Response;
import be.jeffcheasey88.peeratcode.webserver.Route;
import be.jeffcheasey88.peeratcode.webserver.Router; import be.jeffcheasey88.peeratcode.webserver.Router;
import be.jeffcheasey88.peeratcode.webserver.User; import be.jeffcheasey88.peeratcode.webserver.User;
@ -27,6 +28,7 @@ public class Login implements Response {
this.router = router; this.router = router;
} }
@Route(path = "^\\/login$", type = "POST")
@Override @Override
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception { public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception {
if(user != null){ if(user != null){
@ -49,14 +51,4 @@ public class Login implements Response {
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *"); 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.Response;
import be.jeffcheasey88.peeratcode.webserver.User; import be.jeffcheasey88.peeratcode.webserver.User;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject; import org.json.simple.JSONObject;
import java.util.Arrays;
import java.util.Base64; import java.util.Base64;
import java.util.SortedSet;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -54,9 +57,4 @@ public class PlayerDetails implements Response {
public Pattern getPattern() { public Pattern getPattern() {
return Pattern.compile("^\\/player\\/(.+)?$"); 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 ; 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; package be.jeffcheasey88.peeratcode.webserver;
import java.util.ArrayList; import java.lang.reflect.Method;
import java.util.List; import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jose4j.jwk.RsaJsonWebKey; import org.jose4j.jwk.RsaJsonWebKey;
import org.jose4j.jwk.RsaJwkGenerator; import org.jose4j.jwk.RsaJwkGenerator;
@ -15,7 +18,8 @@ import be.jeffcheasey88.peeratcode.repository.DatabaseRepository;
public class Router{ public class Router{
private List<Response> responses; private Map<Response, Route> responses;
private Map<Response, Pattern> patterns;
private Response noFileFound; private Response noFileFound;
private RsaJsonWebKey rsaJsonWebKey; private RsaJsonWebKey rsaJsonWebKey;
private DatabaseRepository repo; private DatabaseRepository repo;
@ -26,7 +30,8 @@ public class Router{
this.repo = repo; this.repo = repo;
this.token_issuer = token_issuer; this.token_issuer = token_issuer;
this.token_expiration = token_expiration; this.token_expiration = token_expiration;
this.responses = new ArrayList<>(); this.responses = new HashMap<>();
this.patterns = new HashMap<>();
this.rsaJsonWebKey = RsaJwkGenerator.generateJwk(2048); this.rsaJsonWebKey = RsaJwkGenerator.generateJwk(2048);
} }
@ -35,7 +40,15 @@ public class Router{
} }
public void register(Response response){ 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){ 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 { public void exec(String type, String path, User user, HttpReader reader, HttpWriter writer) throws Exception {
for(Response response : this.responses){ for(Entry<Response, Route> routes : this.responses.entrySet()){
if(type.equals(response.getType())){ if(routes.getValue().type().equals(type)){
Matcher matcher = response.getPattern().matcher(path); Matcher matcher = this.patterns.get(routes.getKey()).matcher(path);
if(matcher.matches()){ if(matcher.matches()){
if(user == null && response.needLogin()) return; if(user == null && routes.getValue().needLogin()) return;
response.exec(matcher, user, reader, writer); routes.getKey().exec(matcher, user, reader, writer);
return; return;
} }
} }