diff --git a/src/be/jeffcheasey88/peeratcode/framework/HttpReader.java b/src/be/jeffcheasey88/peeratcode/framework/HttpReader.java index 338beea..bd148a2 100644 --- a/src/be/jeffcheasey88/peeratcode/framework/HttpReader.java +++ b/src/be/jeffcheasey88/peeratcode/framework/HttpReader.java @@ -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 { diff --git a/src/be/jeffcheasey88/peeratcode/framework/HttpUtil.java b/src/be/jeffcheasey88/peeratcode/framework/HttpUtil.java index ba3ab79..2f4c655 100644 --- a/src/be/jeffcheasey88/peeratcode/framework/HttpUtil.java +++ b/src/be/jeffcheasey88/peeratcode/framework/HttpUtil.java @@ -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 readMultiPartData(HttpReader reader) throws Exception{ List 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"); diff --git a/src/be/jeffcheasey88/peeratcode/repository/DatabaseQuery.java b/src/be/jeffcheasey88/peeratcode/repository/DatabaseQuery.java index c54e8bf..21afb32 100644 --- a/src/be/jeffcheasey88/peeratcode/repository/DatabaseQuery.java +++ b/src/be/jeffcheasey88/peeratcode/repository/DatabaseQuery.java @@ -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 * diff --git a/src/be/jeffcheasey88/peeratcode/repository/DatabaseRepository.java b/src/be/jeffcheasey88/peeratcode/repository/DatabaseRepository.java index 21b719e..8c7ad59 100644 --- a/src/be/jeffcheasey88/peeratcode/repository/DatabaseRepository.java +++ b/src/be/jeffcheasey88/peeratcode/repository/DatabaseRepository.java @@ -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; } diff --git a/src/be/jeffcheasey88/peeratcode/routes/PuzzleResponse.java b/src/be/jeffcheasey88/peeratcode/routes/PuzzleResponse.java index d6fecac..0ec95b9 100644 --- a/src/be/jeffcheasey88/peeratcode/routes/PuzzleResponse.java +++ b/src/be/jeffcheasey88/peeratcode/routes/PuzzleResponse.java @@ -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 multiPartData = HttpUtil.readMultiPartData(reader); if (multiPartData != null && multiPartData.size() > 0) { this.response = multiPartData.get(0).getBytes(); diff --git a/test/be/jeffcheasey88/peeratcode/routes/TmpRoutesTests.java b/test/be/jeffcheasey88/peeratcode/routes/TmpRoutesTests.java index ad258b6..7275f10 100644 --- a/test/be/jeffcheasey88/peeratcode/routes/TmpRoutesTests.java +++ b/test/be/jeffcheasey88/peeratcode/routes/TmpRoutesTests.java @@ -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){