Fix Boundary

This commit is contained in:
jeffcheasey88 2023-04-12 22:25:21 +02:00
parent 8923c331c4
commit 39a56ca16c
6 changed files with 47 additions and 18 deletions

View file

@ -43,12 +43,12 @@ public class HttpReader {
while(((line = reader.readLine()) != null) && (line.length() > 0)){ while(((line = reader.readLine()) != null) && (line.length() > 0)){
Matcher matcher = HEADER_PATTERN.matcher(line); Matcher matcher = HEADER_PATTERN.matcher(line);
matcher.matches(); 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){ public String getHeader(String key){
return this.headers.get(key); return this.headers.get(key.toLowerCase());
} }
public int read(byte[] buffer) throws IOException { public int read(byte[] buffer) throws IOException {

View file

@ -15,18 +15,24 @@ public class HttpUtil{
for(String header : headers) writer.write(header+"\n"); for(String header : headers) writer.write(header+"\n");
writer.write("\n"); writer.write("\n");
writer.flush(); writer.flush();
StackTraceElement[] e = Thread.currentThread().getStackTrace();
System.out.println(e[2]+" -> response "+code);
} }
public static List<String> readMultiPartData(HttpReader reader) throws Exception{ public static List<String> readMultiPartData(HttpReader reader) throws Exception{
List<String> list = new ArrayList<>(); List<String> list = new ArrayList<>();
String boundary = reader.getHeader("content-type");
if(boundary == null) return list;
boundary = boundary.split(";")[1].split("=")[1];
reader.readLine(); reader.readLine();
while(reader.ready()){ while(reader.ready()){
String line; String line;
while (((line = reader.readLine()) != null) && (line.length() > 0)); while (((line = reader.readLine()) != null) && (line.length() > 0));
String buffer = ""; String buffer = "";
while (((line = reader.readLine()) != null) && (!line.startsWith("------WebKitFormBoundary"))){ while (((line = reader.readLine()) != null) && (!line.startsWith("--"+boundary))){
buffer += line; buffer += line;
} }
list.add(buffer); list.add(buffer);
@ -56,7 +62,6 @@ Content-Type: text/javascript
public static void switchToWebSocket(HttpReader reader, HttpWriter writer) throws Exception{ public static void switchToWebSocket(HttpReader reader, HttpWriter writer) throws Exception{
String key = reader.getHeader("Sec-WebSocket-Key"); String key = reader.getHeader("Sec-WebSocket-Key");
if(key == null) key = reader.getHeader("Sec-Websocket-Key");
if (key == null) throw new IllegalArgumentException(); if (key == null) throw new IllegalArgumentException();
writer.write("HTTP/1.1 101 Switching Protocols\n"); writer.write("HTTP/1.1 101 Switching Protocols\n");

View file

@ -52,10 +52,14 @@ public enum DatabaseQuery {
// PLAYERS // PLAYERS
GET_PLAYER_SIMPLE("SELECT pseudo, email, firstname, lastname, description FROM players WHERE id_player = ?"), GET_PLAYER_SIMPLE("SELECT pseudo, email, firstname, lastname, description FROM players WHERE id_player = ?"),
GET_PLAYER_DETAILS( 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"
"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 "), + "FROM players p\r\n"
GET_PLAYER_DETAILS_BY_ID(GET_PLAYER_DETAILS, " p.id_player = ? ORDER BY g.fk_chapter, g.fk_puzzle;"), + "LEFT OUTER JOIN containsGroups cg ON p.id_player = cg.fk_player\r\n"
GET_PLAYER_DETAILS_BY_PSEUDO(GET_PLAYER_DETAILS, "p.pseudo = ? ORDER BY g.fk_chapter, g.fk_puzzle;"), + "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 // BADGES
GET_BADGE("SELECT * FROM badges WHERE id_badge = ?"), GET_BADGES_OF_PLAYER( 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 /* TRIGGER PLACE
* *

View file

@ -504,7 +504,9 @@ public class DatabaseRepository {
statement.setObject(2, group.getLinkToChapter()); statement.setObject(2, group.getLinkToChapter());
statement.setObject(3, group.getLinkToPuzzle()); statement.setObject(3, group.getLinkToPuzzle());
if(statement.executeUpdate() >= 0) return insertUserInGroup(group, creator); if(statement.executeUpdate() >= 0) return insertUserInGroup(group, creator);
} catch (Exception e){} } catch (Exception e){
e.printStackTrace();
}
return false; return false;
} }

View file

@ -38,14 +38,13 @@ public class PuzzleResponse implements Response {
@Route(path = "^\\/puzzleResponse\\/([0-9]+)$", type = POST, needLogin = true) @Route(path = "^\\/puzzleResponse\\/([0-9]+)$", type = POST, needLogin = true)
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{ public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{
ReceivedResponse received = new ReceivedResponse(matcher, reader); ReceivedResponse received = new ReceivedResponse(matcher, reader);
if (received.getResponse() == null) { if (received.getResponse() == null){
HttpUtil.responseHeaders(writer, 400, "Access-Control-Allow-Origin: *"); HttpUtil.responseHeaders(writer, 400, "Access-Control-Allow-Origin: *");
return; return;
} }
//saveSourceCode(received, databaseRepo.getPlayer(user.getId())); //saveSourceCode(received, databaseRepo.getPlayer(user.getId()));
JSONObject responseJSON = new JSONObject(); 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: *"); HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
return; return;
} }
@ -93,7 +92,7 @@ class ReceivedResponse {
public ReceivedResponse(Matcher matcher, HttpReader reader) throws Exception { public ReceivedResponse(Matcher matcher, HttpReader reader) throws Exception {
puzzleId = Integer.parseInt(matcher.group(1)); puzzleId = Integer.parseInt(matcher.group(1));
List<String> multiPartData = HttpUtil.readMultiPartData(reader); List<String> multiPartData = HttpUtil.readMultiPartData(reader);
if (multiPartData != null && multiPartData.size() > 0) { if (multiPartData != null && multiPartData.size() > 0) {
this.response = multiPartData.get(0).getBytes(); this.response = multiPartData.get(0).getBytes();

View file

@ -42,9 +42,9 @@ public class TmpRoutesTests {
void testOnDeployed(){ void testOnDeployed(){
try { try {
client.auth("JeffCheasey88", "TheoPueDesPieds"); client.auth("JeffCheasey88", "TheoPueDesPieds");
client.route("/puzzleResponse/8", "POST", WebClient.buildMultiPartData("1")); client.route("/puzzleResponse/10", "POST", WebClient.buildMultiPartData("1"));
client.route("/puzzleResponse/8", "POST", WebClient.buildMultiPartData("1")); client.route("/puzzleResponse/10", "POST", WebClient.buildMultiPartData("1"));
client.route("/puzzleResponse/8", "POST", WebClient.buildMultiPartData("one")); client.route("/puzzleResponse/10", "POST", WebClient.buildMultiPartData("one"));
client.assertResponseCode(200); client.assertResponseCode(200);
}catch(Exception e){ }catch(Exception e){