diff --git a/src/be/jeffcheasey88/peeratcode/framework/Response.java b/src/be/jeffcheasey88/peeratcode/framework/Response.java deleted file mode 100644 index 392c6f3..0000000 --- a/src/be/jeffcheasey88/peeratcode/framework/Response.java +++ /dev/null @@ -1,9 +0,0 @@ -package be.jeffcheasey88.peeratcode.framework; - -import java.util.regex.Matcher; - -public interface Response{ - - void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception; - -} \ No newline at end of file diff --git a/src/be/jeffcheasey88/peeratcode/framework/Client.java b/src/dev/peerat/framework/Client.java similarity index 95% rename from src/be/jeffcheasey88/peeratcode/framework/Client.java rename to src/dev/peerat/framework/Client.java index bcc8043..ac04951 100644 --- a/src/be/jeffcheasey88/peeratcode/framework/Client.java +++ b/src/dev/peerat/framework/Client.java @@ -1,4 +1,4 @@ -package be.jeffcheasey88.peeratcode.framework; +package dev.peerat.framework; import java.net.Socket; import java.util.Arrays; diff --git a/src/dev/peerat/framework/Context.java b/src/dev/peerat/framework/Context.java new file mode 100644 index 0000000..2f10803 --- /dev/null +++ b/src/dev/peerat/framework/Context.java @@ -0,0 +1,35 @@ +package dev.peerat.framework; + +public class Context{ + + private User user; + private int responseCode; + private HttpWriter writer; + private String[] headers; + + public Context(User user, HttpWriter writer, String... headers){ + this.user = user; + this.writer = writer; + this.headers = headers; + } + + public U getUser(){ + return (U) user; + } + + public void response(int code, String... headers) throws Exception{ + if(headers != null && headers.length > 0 && this.headers.length > 0){ + String[] copy = new String[this.headers.length+headers.length]; + System.arraycopy(this.headers, 0, copy, 0, this.headers.length); + System.arraycopy(headers, 0, copy, this.headers.length, headers.length); + this.headers = copy; + } + this.responseCode = code; + this.writer.response(code, this.headers); + } + + public int getResponseCode(){ + return this.responseCode; + } + +} diff --git a/src/be/jeffcheasey88/peeratcode/framework/HttpReader.java b/src/dev/peerat/framework/HttpReader.java similarity index 98% rename from src/be/jeffcheasey88/peeratcode/framework/HttpReader.java rename to src/dev/peerat/framework/HttpReader.java index 7239e0e..edf44b3 100644 --- a/src/be/jeffcheasey88/peeratcode/framework/HttpReader.java +++ b/src/dev/peerat/framework/HttpReader.java @@ -1,4 +1,4 @@ -package be.jeffcheasey88.peeratcode.framework; +package dev.peerat.framework; import java.io.BufferedReader; import java.io.IOException; diff --git a/src/be/jeffcheasey88/peeratcode/framework/HttpWriter.java b/src/dev/peerat/framework/HttpWriter.java similarity index 93% rename from src/be/jeffcheasey88/peeratcode/framework/HttpWriter.java rename to src/dev/peerat/framework/HttpWriter.java index 819a2aa..3616336 100644 --- a/src/be/jeffcheasey88/peeratcode/framework/HttpWriter.java +++ b/src/dev/peerat/framework/HttpWriter.java @@ -1,4 +1,4 @@ -package be.jeffcheasey88.peeratcode.framework; +package dev.peerat.framework; import java.io.BufferedWriter; import java.io.IOException; @@ -39,13 +39,11 @@ public class HttpWriter{ this.writer.close(); } - public void response(int code, String... headers) throws Exception{ + void response(int code, String... headers) throws Exception{ write("HTTP/1.1 "+code+codeMessage(code)+"\n"); for(String header : headers) write(header+"\n"); write("\n"); flush(); - StackTraceElement[] e = Thread.currentThread().getStackTrace(); - System.out.println(e[2]+" -> response "+code); } private static String[] HEIGHTBITS = new String[9]; diff --git a/src/be/jeffcheasey88/peeratcode/framework/Locker.java b/src/dev/peerat/framework/Locker.java similarity index 96% rename from src/be/jeffcheasey88/peeratcode/framework/Locker.java rename to src/dev/peerat/framework/Locker.java index 8dc02be..b90c448 100644 --- a/src/be/jeffcheasey88/peeratcode/framework/Locker.java +++ b/src/dev/peerat/framework/Locker.java @@ -1,4 +1,4 @@ -package be.jeffcheasey88.peeratcode.framework; +package dev.peerat.framework; import java.util.HashMap; import java.util.Map; diff --git a/src/be/jeffcheasey88/peeratcode/framework/RequestType.java b/src/dev/peerat/framework/RequestType.java similarity index 68% rename from src/be/jeffcheasey88/peeratcode/framework/RequestType.java rename to src/dev/peerat/framework/RequestType.java index 1f0b211..39c5a17 100644 --- a/src/be/jeffcheasey88/peeratcode/framework/RequestType.java +++ b/src/dev/peerat/framework/RequestType.java @@ -1,4 +1,4 @@ -package be.jeffcheasey88.peeratcode.framework; +package dev.peerat.framework; public enum RequestType{ diff --git a/src/dev/peerat/framework/Response.java b/src/dev/peerat/framework/Response.java new file mode 100644 index 0000000..6df2e6b --- /dev/null +++ b/src/dev/peerat/framework/Response.java @@ -0,0 +1,9 @@ +package dev.peerat.framework; + +import java.util.regex.Matcher; + +public interface Response{ + + void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception; + +} \ No newline at end of file diff --git a/src/be/jeffcheasey88/peeratcode/framework/Route.java b/src/dev/peerat/framework/Route.java similarity index 89% rename from src/be/jeffcheasey88/peeratcode/framework/Route.java rename to src/dev/peerat/framework/Route.java index 47ede2e..778a71a 100644 --- a/src/be/jeffcheasey88/peeratcode/framework/Route.java +++ b/src/dev/peerat/framework/Route.java @@ -1,4 +1,4 @@ -package be.jeffcheasey88.peeratcode.framework; +package dev.peerat.framework; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/src/be/jeffcheasey88/peeratcode/framework/Router.java b/src/dev/peerat/framework/Router.java similarity index 87% rename from src/be/jeffcheasey88/peeratcode/framework/Router.java rename to src/dev/peerat/framework/Router.java index e60f484..d37edc6 100644 --- a/src/be/jeffcheasey88/peeratcode/framework/Router.java +++ b/src/dev/peerat/framework/Router.java @@ -1,4 +1,4 @@ -package be.jeffcheasey88.peeratcode.framework; +package dev.peerat.framework; import java.lang.reflect.Method; import java.net.ServerSocket; @@ -27,19 +27,26 @@ import org.jose4j.lang.JoseException; public class Router{ - private Map> responses; + public static void main(String[] args) { + + } + + private Map[] responses; private Map patterns; private Response noFileFound; private RsaJsonWebKey rsaJsonWebKey; private JwtConsumer jwtConsumer; private Consumer claims; private Function userCreator; + private String[][] headers; public Router() throws Exception{ - this.responses = new HashMap<>(); - for(RequestType type : RequestType.values()) this.responses.put(type, new HashMap<>()); + int types = RequestType.values().length; + this.responses = new HashMap[types]; + for(RequestType type : RequestType.values()) this.responses[type.ordinal()] = new HashMap<>(); this.patterns = new HashMap<>(); this.rsaJsonWebKey = RsaJwkGenerator.generateJwk(2048); + this.headers = new String[types][0]; } public Router configureJwt(Consumer consumer, Consumer claims, Function userCreator){ @@ -57,6 +64,14 @@ public class Router{ return this; } + public void addDefaultHeaders(RequestType type, String... headers){ + String[] origin = this.headers[type.ordinal()]; + String[] copy = new String[origin.length+headers.length]; + System.arraycopy(origin, 0, copy, 0, origin.length); + System.arraycopy(headers, 0, copy, origin.length, headers.length); + this.headers[type.ordinal()] = copy; + } + public void listen(int port, boolean ssl) throws Exception{ if (ssl) { // Not needed with the use of a proxy SSLServerSocket server = null; @@ -95,7 +110,7 @@ public class Router{ Response.class.getDeclaredMethods()[0].getParameterTypes()); Route route = method.getAnnotation(Route.class); - this.responses.get(route.type()).put(response, route); + this.responses[route.type().ordinal()].put(response, route); this.patterns.put(response, Pattern.compile(route.path())); }catch(Exception e){ throw new IllegalArgumentException(e); @@ -110,7 +125,8 @@ public class Router{ void exec(RequestType type, String path, User user, HttpReader reader, HttpWriter writer) throws Exception{ if(type == null) return; - for(Entry routes : this.responses.get(type).entrySet()){ + Context context = new Context(user, writer, this.headers[type.ordinal()]); + for(Entry routes : this.responses[type.ordinal()].entrySet()){ Matcher matcher = this.patterns.get(routes.getKey()).matcher(path); if(matcher.matches()){ if(user == null && routes.getValue().needLogin()){ @@ -122,11 +138,11 @@ public class Router{ reader = new WebSocketReader(reader); writer = new WebSocketWriter(writer); } - routes.getKey().exec(matcher, user, reader, writer); + routes.getKey().exec(matcher, context, reader, writer); return; } } - if(noFileFound != null) noFileFound.exec(null, user, reader, writer); + if(noFileFound != null) noFileFound.exec(null, context, reader, writer); } public Router configureSSL(String keyStore, String keyStorePassword){ diff --git a/src/be/jeffcheasey88/peeratcode/framework/User.java b/src/dev/peerat/framework/User.java similarity index 70% rename from src/be/jeffcheasey88/peeratcode/framework/User.java rename to src/dev/peerat/framework/User.java index 09f682e..f9979a0 100644 --- a/src/be/jeffcheasey88/peeratcode/framework/User.java +++ b/src/dev/peerat/framework/User.java @@ -1,4 +1,4 @@ -package be.jeffcheasey88.peeratcode.framework; +package dev.peerat.framework; import org.jose4j.jwt.JwtClaims; diff --git a/src/be/jeffcheasey88/peeratcode/framework/WebSocketReader.java b/src/dev/peerat/framework/WebSocketReader.java similarity index 96% rename from src/be/jeffcheasey88/peeratcode/framework/WebSocketReader.java rename to src/dev/peerat/framework/WebSocketReader.java index 7007402..88ea1ce 100644 --- a/src/be/jeffcheasey88/peeratcode/framework/WebSocketReader.java +++ b/src/dev/peerat/framework/WebSocketReader.java @@ -1,4 +1,4 @@ -package be.jeffcheasey88.peeratcode.framework; +package dev.peerat.framework; import java.io.IOException; diff --git a/src/be/jeffcheasey88/peeratcode/framework/WebSocketWriter.java b/src/dev/peerat/framework/WebSocketWriter.java similarity index 96% rename from src/be/jeffcheasey88/peeratcode/framework/WebSocketWriter.java rename to src/dev/peerat/framework/WebSocketWriter.java index ac093f0..3186107 100644 --- a/src/be/jeffcheasey88/peeratcode/framework/WebSocketWriter.java +++ b/src/dev/peerat/framework/WebSocketWriter.java @@ -1,4 +1,4 @@ -package be.jeffcheasey88.peeratcode.framework; +package dev.peerat.framework; import java.io.IOException;