From 89dc0ede9e5c5fc84de84b6915dd5117960c80e0 Mon Sep 17 00:00:00 2001 From: jeffcheasey88 <66554203+jeffcheasey88@users.noreply.github.com> Date: Mon, 6 Mar 2023 12:11:29 +0100 Subject: [PATCH] Fix reception of the puzzle --- src/be/jeffcheasey88/peeratcode/Main.java | 19 ++++++++++ .../peeratcode/routes/PuzzleResponse.java | 37 ++++--------------- .../peeratcode/webserver/HttpUtil.java | 22 +++++++++++ 3 files changed, 48 insertions(+), 30 deletions(-) diff --git a/src/be/jeffcheasey88/peeratcode/Main.java b/src/be/jeffcheasey88/peeratcode/Main.java index 574a025..15fbc0b 100644 --- a/src/be/jeffcheasey88/peeratcode/Main.java +++ b/src/be/jeffcheasey88/peeratcode/Main.java @@ -66,6 +66,25 @@ public class Main { writer.close(); } }); + + router.register(new Response(){ + @Override + public Pattern getPattern() { + return Pattern.compile("^(.*)$"); + } + @Override + public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception { + HttpUtil.responseHeaders(writer, 200, + "Access-Control-Allow-Origin: *", + "Access-Control-Allow-Methods: *", + "Access-Control-Allow-Headers: *"); + } + + @Override + public String getType() { + return "OPTIONS"; + } + }); initRoutes(router); diff --git a/src/be/jeffcheasey88/peeratcode/routes/PuzzleResponse.java b/src/be/jeffcheasey88/peeratcode/routes/PuzzleResponse.java index e77accd..4236280 100644 --- a/src/be/jeffcheasey88/peeratcode/routes/PuzzleResponse.java +++ b/src/be/jeffcheasey88/peeratcode/routes/PuzzleResponse.java @@ -5,6 +5,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -32,9 +33,6 @@ public class PuzzleResponse implements Response { HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *"); return; } - - HttpUtil.skipHeaders(reader); - ReceivedResponse received = new ReceivedResponse(matcher, reader); saveSourceCode(received, databaseRepo.getPlayer(user.getId())); @@ -74,6 +72,7 @@ public class PuzzleResponse implements Response { } class ReceivedResponse { + private int puzzleId; private byte[] response; private String fileName; @@ -84,33 +83,11 @@ class ReceivedResponse { public ReceivedResponse(Matcher matcher, HttpReader reader) throws Exception { this.reader = reader; puzzleId = Integer.parseInt(matcher.group(1)); - readResponse(); - readFileName(); - readSourceCode(); - } - - private void readResponse() throws Exception { - int hSize = reader.readInt(); - response = new byte[hSize]; - if (hSize != reader.read(response)) - response = null; - } - - private void readFileName() throws Exception { - byte[] tmpFileName; - int hSize = reader.readInt(); - tmpFileName = new byte[hSize]; - if (hSize == reader.read(tmpFileName)) - fileName = tmpFileName.toString(); - else - fileName = null; - } - - private void readSourceCode() throws Exception { - int hSize = reader.readInt(); - sourceCode = new byte[hSize]; - if (hSize != reader.read(sourceCode)) - sourceCode = null; + + List multiPartData = HttpUtil.readMultiPartData(reader); + this.response = multiPartData.get(0).getBytes(); + this.fileName = multiPartData.get(1); + this.sourceCode = multiPartData.get(2).getBytes(); } public int getPuzzleId() { diff --git a/src/be/jeffcheasey88/peeratcode/webserver/HttpUtil.java b/src/be/jeffcheasey88/peeratcode/webserver/HttpUtil.java index a49dd95..319c590 100644 --- a/src/be/jeffcheasey88/peeratcode/webserver/HttpUtil.java +++ b/src/be/jeffcheasey88/peeratcode/webserver/HttpUtil.java @@ -1,6 +1,8 @@ package be.jeffcheasey88.peeratcode.webserver; import java.security.MessageDigest; +import java.util.ArrayList; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -22,6 +24,26 @@ public class HttpUtil { while(((line = reader.readLine()) != null) && (line.length() > 0)); } + public static List readMultiPartData(HttpReader reader) throws Exception{ + List list = new ArrayList<>(); + + reader.readLine(); + + while(reader.ready()){ + String line; + while(((line = reader.readLine()) != null) && (line.length() > 0)){ + + } + String buffer = ""; + while(((line = reader.readLine()) != null) && (!line.startsWith("------WebKitFormBoundary"))){ + buffer+=line; + } + list.add(buffer); + } + + return list; + } + public static void switchToWebSocket(HttpReader reader, HttpWriter writer) throws Exception{ String key = readWebSocketKey(reader); if(key == null) throw new IllegalArgumentException();