Fix reception of the puzzle
This commit is contained in:
parent
80bfa7816f
commit
89dc0ede9e
3 changed files with 48 additions and 30 deletions
|
@ -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);
|
||||
|
||||
|
|
|
@ -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<String> multiPartData = HttpUtil.readMultiPartData(reader);
|
||||
this.response = multiPartData.get(0).getBytes();
|
||||
this.fileName = multiPartData.get(1);
|
||||
this.sourceCode = multiPartData.get(2).getBytes();
|
||||
}
|
||||
|
||||
public int getPuzzleId() {
|
||||
|
|
|
@ -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<String> readMultiPartData(HttpReader reader) throws Exception{
|
||||
List<String> 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();
|
||||
|
|
Loading…
Add table
Reference in a new issue