base servlet

This commit is contained in:
jeffcheasey88 2023-12-21 22:58:21 +01:00
parent 8ea733c637
commit 4707e80617
11 changed files with 156 additions and 13 deletions

View file

@ -5,6 +5,7 @@
<classpathentry exported="true" kind="lib" path="jose4j-0.9.3.jar"/>
<classpathentry exported="true" kind="lib" path="password4j-1.6.3.jar"/>
<classpathentry exported="true" kind="lib" path="slf4j-api-2.0.6.jar"/>
<classpathentry exported="true" kind="lib" path="C:/Users/jeffc/eclipse-workspace/peer-at-code-framework/PeerAtCodeParser.jar"/>
<classpathentry kind="lib" path="C:/Users/jeffc/eclipse-workspace/peer-at-code-framework/javax.servlet-api-4.0.1.jar"/>
<classpathentry kind="lib" path="C:/Users/jeffc/eclipse-workspace/PeerAtORM/PeerAtCodeParser.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

BIN
javax.servlet-api-4.0.1.jar Normal file

Binary file not shown.

View file

@ -26,7 +26,7 @@ public class Client<U extends User> extends Thread{
reader.readHeaders();
RequestType type = RequestType.valueOf(headers[0]);
context = new Context(type, headers[1], isLogin(router, type, reader), writer, router.getDefaultHeaders(type));
context = new Context(type, headers[1], isLogin(type, reader), writer, router.getDefaultHeaders(type));
router.exec(context, reader, writer);
writer.flush();
writer.close();
@ -44,12 +44,12 @@ public class Client<U extends User> extends Thread{
if(context != null) logger.setValue(context);
}
private User isLogin(Router<U> router, RequestType type, HttpReader reader) throws InvalidJwtException{
private User isLogin(RequestType type, HttpReader reader) throws InvalidJwtException{
String auth = reader.getHeader("Authorization");
if(auth == null) return null;
auth = auth.substring(7);
try{
return this.router.getUser(auth);
return router.getUser(auth);
}catch(InvalidJwtException e){
try{
writer.response(401, router.getDefaultHeaders(type));

View file

@ -39,6 +39,11 @@ public class HttpReader{
this.reader = origin.reader;
}
HttpReader(InputStream in, BufferedReader reader){
this.in = in;
this.reader = reader;
}
public boolean isClosed(){
return this.socket.isClosed();
}

View file

@ -21,6 +21,11 @@ public class HttpWriter{
this.out = origin.out;
this.writer = origin.writer;
}
public HttpWriter(OutputStream out, BufferedWriter writer){
this.out = out;
this.writer = writer;
}
public void write(byte[] buffer) throws IOException{
this.out.write(buffer);

View file

@ -9,6 +9,8 @@ import java.util.regex.Pattern;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jose4j.jwa.AlgorithmConstraints.ConstraintType;
import org.jose4j.jwk.RsaJsonWebKey;
@ -101,7 +103,7 @@ public class Router<U extends User>{
if(this.mappers[context.getType().ordinal()].exec(context, reader, writer)) return;
if(noFileFound != null) noFileFound.exec(null, context, reader, writer);
}
public Router<U> configureSSL(String keyStore, String keyStorePassword){
System.setProperty("javax.net.ssl.keyStore", keyStore);
System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword);
@ -133,6 +135,10 @@ public class Router<U extends User>{
return this.logger;
}
public void useTomcat(){
TomcatServlet.setRouter(this);
}
public void listen(int port, boolean ssl) throws Exception{
if (ssl) { // Not needed with the use of a proxy
try {

View file

@ -0,0 +1,27 @@
package dev.peerat.framework;
import javax.servlet.http.HttpServletRequest;
public class TomcatHttpReader extends HttpReader{
private HttpServletRequest request;
public TomcatHttpReader(HttpServletRequest request) throws Exception{
super(request.getInputStream(), request.getReader());
this.request = request;
}
@Override
public boolean isClosed(){
return false;
}
@Override
void readHeaders() throws Exception{}
@Override
public String getHeader(String key){
return request.getHeader(key);
}
}

View file

@ -0,0 +1,24 @@
package dev.peerat.framework;
import java.io.BufferedWriter;
import javax.servlet.http.HttpServletResponse;
public class TomcatHttpWriter extends HttpWriter{
private HttpServletResponse response;
public TomcatHttpWriter(HttpServletResponse response) throws Exception{
super(response.getOutputStream(), new BufferedWriter(response.getWriter()));
this.response = response;
}
@Override
void response(int code, String... headers) throws Exception {
response.setStatus(code);
for(String header : headers){
String[] split = header.split("\\s*:\\s*");
response.setHeader(split[0], split[1]);
}
}
}

View file

@ -0,0 +1,75 @@
package dev.peerat.framework;
import java.io.IOException;
import java.lang.reflect.Method;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jose4j.jwt.consumer.InvalidJwtException;
public class TomcatServlet extends HttpServlet{
private static Router<?> router;
static void setRouter(Router<?> router){
TomcatServlet.router = router;
}
@Override
public void init(ServletConfig config) throws ServletException{
try{
String value = config.getInitParameter("router");
Class<?> clazz = Class.forName(value);
for(Method method : clazz.getDeclaredMethods()){
if(method.getName().equals("main")) method.invoke(null, new Object[] {null});
}
}catch(Exception ex){
throw new RuntimeException(ex);
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
Context context = null;
HttpReader reader = null;
HttpWriter writer = null;
try{
reader = new TomcatHttpReader(request);
writer = new TomcatHttpWriter(response);
context = new Context(RequestType.GET, request.getPathInfo(), isLogin(router, RequestType.GET, reader, writer), writer);
router.exec(context, reader, writer);
writer.flush();
writer.close();
}catch(InvalidJwtException e){
}catch(Exception e){
if(context != null && context.getResponseCode() == 0){
try{
context.response(500);
writer.flush();
writer.close();
}catch(Exception ex){}
}
}
if(context != null) router.getLogger().setValue(context);
}
private User isLogin(Router<?> router, RequestType type, HttpReader reader, HttpWriter writer) throws Exception{
String auth = reader.getHeader("Authorization");
if(auth == null) return null;
auth = auth.substring(7);
try{
return router.getUser(auth);
}catch(InvalidJwtException e){
try{
writer.response(401, router.getDefaultHeaders(type));
writer.flush();
writer.close();
}catch(Exception ex){}
throw e;
}
}
}

View file

@ -6,11 +6,11 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import be.jeffcheasey88.peeratcode.parser.Parser;
import be.jeffcheasey88.peeratcode.parser.Token;
import be.jeffcheasey88.peeratcode.parser.TokenType;
import be.jeffcheasey88.peeratcode.parser.state.RedirectStateTree;
import be.jeffcheasey88.peeratcode.parser.state.StateTree;
import dev.peerat.parser.Parser;
import dev.peerat.parser.Token;
import dev.peerat.parser.TokenType;
import dev.peerat.parser.state.RedirectStateTree;
import dev.peerat.parser.state.StateTree;
public class JsonParser extends Parser<Json>{

View file

@ -1,8 +1,8 @@
package dev.peerat.framework.utils.json;
import be.jeffcheasey88.peeratcode.parser.Token;
import be.jeffcheasey88.peeratcode.parser.TokenType;
import be.jeffcheasey88.peeratcode.parser.Tokenizer;
import dev.peerat.parser.Token;
import dev.peerat.parser.TokenType;
import dev.peerat.parser.Tokenizer;
public class JsonTokenizer extends Tokenizer{