Fix login & Leaderboard

This commit is contained in:
jeffcheasey88 2023-04-12 17:49:35 +02:00
parent 1007ac87da
commit 43d498a822
10 changed files with 205 additions and 10 deletions

View file

@ -5,8 +5,6 @@ import static be.jeffcheasey88.peeratcode.framework.RequestType.OPTIONS;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Timer;
import java.util.TimerTask;
import java.util.regex.Matcher;
import javax.net.ssl.SSLServerSocket;
@ -20,7 +18,6 @@ import be.jeffcheasey88.peeratcode.framework.Response;
import be.jeffcheasey88.peeratcode.framework.Route;
import be.jeffcheasey88.peeratcode.framework.Router;
import be.jeffcheasey88.peeratcode.framework.User;
import be.jeffcheasey88.peeratcode.model.Completion;
import be.jeffcheasey88.peeratcode.repository.DatabaseRepository;
import be.jeffcheasey88.peeratcode.routes.BadgeDetails;
import be.jeffcheasey88.peeratcode.routes.ChapterElement;

View file

@ -4,7 +4,6 @@ import java.net.Socket;
import java.util.Arrays;
import org.jose4j.jwa.AlgorithmConstraints.ConstraintType;
import org.jose4j.jwk.RsaJsonWebKey;
import org.jose4j.jws.AlgorithmIdentifiers;
import org.jose4j.jwt.JwtClaims;
import org.jose4j.jwt.consumer.JwtConsumer;

View file

@ -7,6 +7,7 @@ import java.io.InputStreamReader;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

View file

@ -56,6 +56,7 @@ 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

@ -59,7 +59,74 @@ public enum DatabaseQuery {
// BADGES
GET_BADGE("SELECT * FROM badges WHERE id_badge = ?"), GET_BADGES_OF_PLAYER(
"SELECT * FROM badges b LEFT JOIN containsBadges cb ON cb.fk_badge = b.id_badge WHERE cb.fk_player = ?");
"SELECT * FROM badges b LEFT JOIN containsBadges cb ON cb.fk_badge = b.id_badge WHERE cb.fk_player = ?"),
//TRIGGER
FIRST_TRY("CREATE OR REPLACE TRIGGER FirstTry\r\n"
+ "AFTER INSERT\r\n"
+ " ON completions FOR EACH ROW\r\n"
+ "BEGIN\r\n"
+ " DECLARE badge INT;\r\n"
+ " DECLARE player INT;\r\n"
+ " DECLARE contain INT;\r\n"
+ "\r\n"
+ " SELECT id_badge\r\n"
+ " INTO badge\r\n"
+ " FROM badges\r\n"
+ " WHERE name = 'FirstTry';\r\n"
+ "\r\n"
+ " IF @badge is not null THEN\r\n"
+ "\r\n"
+ " SELECT fk_player\r\n"
+ " INTO player\r\n"
+ " FROM inserted;\r\n"
+ "\r\n"
+ " SELECT count(*)\r\n"
+ " INTO contain\r\n"
+ " FROM containsBadges\r\n"
+ " WHERE fk_badge = badge AND fk_player = player;\r\n"
+ "\r\n"
+ " IF (@contain = 0) THEN\r\n"
+ "\r\n"
+ " INSERT INTO containsBadges(fk_player, fk_badge) VALUES (@player, @badge);\r\n"
+ " END IF;\r\n"
+ " END IF;\r\n"
+ "END;"),
EventParticipation("CREATE OR REPLACE TRIGGER EventParticipation\r\n"
+ "AFTER INSERT\r\n"
+ " ON completions FOR EACH ROW\r\n"
+ "BEGIN\r\n"
+ " DECLARE badge INT;\r\n"
+ " DECLARE endDate datetime;\r\n"
+ " DECLARE player INT;\r\n"
+ " DECLARE contain INT;\r\n"
+ "\r\n"
+ " SELECT id_badge\r\n"
+ " INTO badge\r\n"
+ " FROM badges\r\n"
+ " WHERE name = 'EventParticipation';\r\n"
+ "\r\n"
+ " IF @badge is not null THEN\r\n"
+ "\r\n"
+ " SELECT c.end_date, i.fk_player\r\n"
+ " INTO endDate, player\r\n"
+ " FROM inserted i\r\n"
+ " JOIN puzzles p ON i.fk_puzzle = p.id_puzzle\r\n"
+ " JOIN chapters c on p.fk_chapter = c.id_chapter;\r\n"
+ "\r\n"
+ " IF @endDate is not null THEN\r\n"
+ "\r\n"
+ " SELECT count(*)\r\n"
+ " INTO contain\r\n"
+ " FROM containsBadges\r\n"
+ " WHERE fk_badge = badge AND fk_player = player;\r\n"
+ "\r\n"
+ " IF (@contain = 0) THEN\r\n"
+ " INSERT INTO containsBadges(fk_player, fk_badge) VALUES (@player, @badge);\r\n"
+ " END IF;\r\n"
+ " END IF;\r\n"
+ " END IF;\r\n"
+ "END;");
private String request;
@ -80,3 +147,81 @@ public enum DatabaseQuery {
return this.request;
}
}
/* TRIGGER PLACE
*
CREATE OR REPLACE TRIGGER FirstTry
AFTER INSERT
ON completions FOR EACH ROW
BEGIN
DECLARE badge INT;
DECLARE player INT;
DECLARE contain INT;
SELECT id_badge
INTO badge
FROM badges
WHERE name = 'FirstTry';
IF @badge is not null THEN
SELECT fk_player
INTO player
FROM inserted;
SELECT count(*)
INTO contain
FROM containsBadges
WHERE fk_badge = badge AND fk_player = player;
IF (@contain = 0) THEN
INSERT INTO containsBadges(fk_player, fk_badge) VALUES (@player, @badge);
END IF;
END IF;
END;
CREATE OR REPLACE TRIGGER EventParticipation
AFTER INSERT
ON completions FOR EACH ROW
BEGIN
DECLARE badge INT;
DECLARE endDate datetime;
DECLARE player INT;
DECLARE contain INT;
SELECT id_badge
INTO badge
FROM badges
WHERE name = 'EventParticipation';
IF @badge is not null THEN
SELECT c.end_date, i.fk_player
INTO endDate, player
FROM inserted i
JOIN puzzles p ON i.fk_puzzle = p.id_puzzle
JOIN chapters c on p.fk_chapter = c.id_chapter;
IF @endDate is not null THEN
SELECT count(*)
INTO contain
FROM containsBadges
WHERE fk_badge = badge AND fk_player = player;
IF (@contain = 0) THEN
INSERT INTO containsBadges(fk_player, fk_badge) VALUES (@player, @badge);
END IF;
END IF;
END IF;
END;
*
*/

View file

@ -1,7 +1,6 @@
package be.jeffcheasey88.peeratcode.routes;
import java.io.IOException;
import java.util.Base64;
import java.util.SortedSet;
import java.util.regex.Matcher;

View file

@ -40,10 +40,10 @@ public class Login implements Response {
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *",
"Access-Control-Expose-Headers: Authorization",
"Authorization: Bearer " + this.router.createAuthUser(id));
return;
}
} else {
HttpUtil.responseHeaders(writer, 400, "Access-Control-Allow-Origin: *");
}
HttpUtil.responseHeaders(writer, 400, "Access-Control-Allow-Origin: *");
}
}

View file

@ -2,7 +2,6 @@ package be.jeffcheasey88.peeratcode.routes;
import static org.junit.jupiter.api.Assertions.fail;
import org.json.simple.JSONObject;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

View file

@ -0,0 +1,54 @@
package be.jeffcheasey88.peeratcode.routes;
import static org.junit.jupiter.api.Assertions.fail;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestInstance.Lifecycle;
import be.jeffcheasey88.peeratcode.Main;
import be.jeffcheasey88.peeratcode.webclient.WebClient;
@TestInstance(Lifecycle.PER_CLASS)
public class TriggerTests {
private Thread server;
private WebClient client;
private boolean ready;
@BeforeAll
void init(){
server = new Thread(new Runnable(){
@Override
public void run(){
try {
Main.main(null);
} catch (Exception e) {
e.printStackTrace();
};
}
});
server.start();
client = new WebClient("localhost", 80);
}
@AfterAll
void close(){
server.interrupt();
}
@Test
void testOnDeployed(){
try {
client.auth("JeffCheasey88", "TheoPueDesPieds");
client.route("/puzzleResponse/9", "POST", WebClient.buildMultiPartData("1"));
client.route("/player/", "GET");
}catch(Exception e){
e.printStackTrace();
fail(e);
}
}
}