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)){
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 {

View file

@ -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");

View file

@ -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
*

View file

@ -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;
}

View file

@ -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();

View file

@ -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){