Fix Boundary
This commit is contained in:
parent
8923c331c4
commit
39a56ca16c
6 changed files with 47 additions and 18 deletions
|
@ -43,12 +43,12 @@ public class HttpReader {
|
|||
while(((line = reader.readLine()) != null) && (line.length() > 0)){
|
||||
Matcher matcher = HEADER_PATTERN.matcher(line);
|
||||
matcher.matches();
|
||||
this.headers.put(matcher.group(1), matcher.group(2));
|
||||
this.headers.put(matcher.group(1).toLowerCase(), matcher.group(2));
|
||||
}
|
||||
}
|
||||
|
||||
public String getHeader(String key){
|
||||
return this.headers.get(key);
|
||||
return this.headers.get(key.toLowerCase());
|
||||
}
|
||||
|
||||
public int read(byte[] buffer) throws IOException {
|
||||
|
|
|
@ -15,18 +15,24 @@ public class HttpUtil{
|
|||
for(String header : headers) writer.write(header+"\n");
|
||||
writer.write("\n");
|
||||
writer.flush();
|
||||
StackTraceElement[] e = Thread.currentThread().getStackTrace();
|
||||
System.out.println(e[2]+" -> response "+code);
|
||||
}
|
||||
|
||||
public static List<String> readMultiPartData(HttpReader reader) throws Exception{
|
||||
List<String> list = new ArrayList<>();
|
||||
|
||||
|
||||
String boundary = reader.getHeader("content-type");
|
||||
if(boundary == null) return list;
|
||||
boundary = boundary.split(";")[1].split("=")[1];
|
||||
|
||||
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"))){
|
||||
while (((line = reader.readLine()) != null) && (!line.startsWith("--"+boundary))){
|
||||
buffer += line;
|
||||
}
|
||||
list.add(buffer);
|
||||
|
@ -56,7 +62,6 @@ Content-Type: text/javascript
|
|||
|
||||
public static void switchToWebSocket(HttpReader reader, HttpWriter writer) throws Exception{
|
||||
String key = reader.getHeader("Sec-WebSocket-Key");
|
||||
if(key == null) key = reader.getHeader("Sec-Websocket-Key");
|
||||
if (key == null) throw new IllegalArgumentException();
|
||||
|
||||
writer.write("HTTP/1.1 101 Switching Protocols\n");
|
||||
|
|
|
@ -52,10 +52,14 @@ public enum DatabaseQuery {
|
|||
|
||||
// PLAYERS
|
||||
GET_PLAYER_SIMPLE("SELECT pseudo, email, firstname, lastname, description FROM players WHERE id_player = ?"),
|
||||
GET_PLAYER_DETAILS(
|
||||
"SELECT p.*, scores.score, scores.completions, scores.tries, scores.rank, g.* FROM players p, (SELECT fk_player, SUM(c.score) AS score, COUNT(c.id_completion) AS completions, SUM(c.tries) AS tries, rank() over(ORDER BY score DESC) AS rank FROM completions c GROUP BY c.fk_player) AS scores LEFT JOIN containsGroups cg ON scores.fk_player = cg.fk_player LEFT JOIN groups g ON cg.fk_group = g.id_group WHERE p.id_player = scores.fk_player AND c.score > 0 AND "),
|
||||
GET_PLAYER_DETAILS_BY_ID(GET_PLAYER_DETAILS, " p.id_player = ? ORDER BY g.fk_chapter, g.fk_puzzle;"),
|
||||
GET_PLAYER_DETAILS_BY_PSEUDO(GET_PLAYER_DETAILS, "p.pseudo = ? ORDER BY g.fk_chapter, g.fk_puzzle;"),
|
||||
GET_PLAYER_DETAILS("SELECT p.*, g.*, SUM(c.score) AS score, COUNT(c.id_completion) AS completions, SUM(c.tries) AS tries, rank() over(ORDER BY score DESC) AS rank\r\n"
|
||||
+ "FROM players p\r\n"
|
||||
+ "LEFT OUTER JOIN containsGroups cg ON p.id_player = cg.fk_player\r\n"
|
||||
+ "LEFT OUTER JOIN groups g ON cg.fk_group = g.id_group\r\n"
|
||||
+ "LEFT OUTER JOIN completions c on p.id_player = c.fk_player\r\n"
|
||||
+ "WHERE "),
|
||||
GET_PLAYER_DETAILS_BY_ID(GET_PLAYER_DETAILS, " p.id_player = ? GROUP BY g.name ORDER BY g.fk_chapter, g.fk_puzzle;"),
|
||||
GET_PLAYER_DETAILS_BY_PSEUDO(GET_PLAYER_DETAILS, "p.pseudo = ? GROUP BY g.name ORDER BY g.fk_chapter, g.fk_puzzle;"),
|
||||
|
||||
// BADGES
|
||||
GET_BADGE("SELECT * FROM badges WHERE id_badge = ?"), GET_BADGES_OF_PLAYER(
|
||||
|
@ -149,6 +153,25 @@ public enum DatabaseQuery {
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
|
||||
SELECT p.*, scores.score, scores.completions, scores.tries, scores.rank, g.*
|
||||
FROM players p,
|
||||
(SELECT fk_player, SUM(c.score) AS score,
|
||||
COUNT(c.id_completion) AS completions,
|
||||
SUM(c.tries) AS tries,
|
||||
rank() over(ORDER BY score DESC) AS rank
|
||||
FROM completions c GROUP BY c.fk_player)
|
||||
AS scores
|
||||
LEFT OUTER JOIN containsGroups cg ON scores.fk_player = cg.fk_player
|
||||
LEFT OUTER JOIN groups g ON cg.fk_group = g.id_group
|
||||
WHERE p.id_player = scores.fk_player AND "),
|
||||
|
||||
|
||||
*
|
||||
*/
|
||||
|
||||
/* TRIGGER PLACE
|
||||
*
|
||||
|
||||
|
|
|
@ -504,7 +504,9 @@ public class DatabaseRepository {
|
|||
statement.setObject(2, group.getLinkToChapter());
|
||||
statement.setObject(3, group.getLinkToPuzzle());
|
||||
if(statement.executeUpdate() >= 0) return insertUserInGroup(group, creator);
|
||||
} catch (Exception e){}
|
||||
} catch (Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -38,14 +38,13 @@ public class PuzzleResponse implements Response {
|
|||
@Route(path = "^\\/puzzleResponse\\/([0-9]+)$", type = POST, needLogin = true)
|
||||
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{
|
||||
ReceivedResponse received = new ReceivedResponse(matcher, reader);
|
||||
if (received.getResponse() == null) {
|
||||
if (received.getResponse() == null){
|
||||
HttpUtil.responseHeaders(writer, 400, "Access-Control-Allow-Origin: *");
|
||||
return;
|
||||
}
|
||||
//saveSourceCode(received, databaseRepo.getPlayer(user.getId()));
|
||||
|
||||
JSONObject responseJSON = new JSONObject();
|
||||
if(this.databaseRepo.getScore(user.getId(), received.getPuzzleId()) >= 0){
|
||||
if(this.databaseRepo.getScore(user.getId(), received.getPuzzleId()) > 0){
|
||||
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
|
||||
return;
|
||||
}
|
||||
|
@ -93,7 +92,7 @@ class ReceivedResponse {
|
|||
|
||||
public ReceivedResponse(Matcher matcher, HttpReader reader) throws Exception {
|
||||
puzzleId = Integer.parseInt(matcher.group(1));
|
||||
|
||||
|
||||
List<String> multiPartData = HttpUtil.readMultiPartData(reader);
|
||||
if (multiPartData != null && multiPartData.size() > 0) {
|
||||
this.response = multiPartData.get(0).getBytes();
|
||||
|
|
|
@ -42,9 +42,9 @@ public class TmpRoutesTests {
|
|||
void testOnDeployed(){
|
||||
try {
|
||||
client.auth("JeffCheasey88", "TheoPueDesPieds");
|
||||
client.route("/puzzleResponse/8", "POST", WebClient.buildMultiPartData("1"));
|
||||
client.route("/puzzleResponse/8", "POST", WebClient.buildMultiPartData("1"));
|
||||
client.route("/puzzleResponse/8", "POST", WebClient.buildMultiPartData("one"));
|
||||
client.route("/puzzleResponse/10", "POST", WebClient.buildMultiPartData("1"));
|
||||
client.route("/puzzleResponse/10", "POST", WebClient.buildMultiPartData("1"));
|
||||
client.route("/puzzleResponse/10", "POST", WebClient.buildMultiPartData("one"));
|
||||
|
||||
client.assertResponseCode(200);
|
||||
}catch(Exception e){
|
||||
|
|
Loading…
Add table
Reference in a new issue