Rules for groups & response

This commit is contained in:
jeffcheasey88 2023-04-12 10:08:52 +02:00
parent 1bbe38b540
commit e300d913cc
7 changed files with 57 additions and 13 deletions

View file

@ -125,14 +125,15 @@ public class Group implements Comparable<Group> {
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if (this == obj) if(obj == this) return true;
return true; if(obj == null) return false;
if (obj == null) if(!(obj instanceof Group)) return false;
return false;
if (getClass() != obj.getClass())
return false;
Group other = (Group) obj; Group other = (Group) obj;
return Objects.equals(name, other.name); return this.name.equals(other.name) && integerEquals(this.linkToChapter, other.linkToChapter) && integerEquals(this.linkToPuzzle, other.linkToPuzzle);
} }
private boolean integerEquals(Integer a, Integer b){
if(a == null) return b == null;
return a.equals(b);
}
} }

View file

@ -17,6 +17,7 @@ public enum DatabaseQuery {
// GROUPS // GROUPS
ALL_GROUPS("SELECT * FROM groups"), ALL_GROUPS("SELECT * FROM groups"),
GET_GROUP_FOR_PLAYER("SELECT g.* FROM groups g JOIN containsGroups cg ON cg.fk_group = c.id_group WHERE cg.fk_player = ? AND g.fk_chapter = ? AND g.fk_puzzle = ?"),
GET_GROUP_ID_BY_DATA("SELECT id_group FROM groups WHERE name = ? AND (fk_chapter = ? OR fk_puzzle = ?)"), GET_GROUP_ID_BY_DATA("SELECT id_group FROM groups WHERE name = ? AND (fk_chapter = ? OR fk_puzzle = ?)"),
INSERT_GROUP("INSERT INTO groups (name, fk_chapter, fk_puzzle) VALUES (?,?,?)"), INSERT_GROUP("INSERT INTO groups (name, fk_chapter, fk_puzzle) VALUES (?,?,?)"),
INSERT_PLAYER_IN_GROUP("INSERT INTO containsGroups (fk_player, fk_group) VALUES (?,?)"), INSERT_PLAYER_IN_GROUP("INSERT INTO containsGroups (fk_player, fk_group) VALUES (?,?)"),

View file

@ -508,6 +508,20 @@ public class DatabaseRepository {
return false; return false;
} }
public Group getPlayerGroup(int user, Integer chapter, Integer puzzle){
try {
ensureConnection();
PreparedStatement stmt = DatabaseQuery.GET_GROUP_FOR_PLAYER.prepare(this.con);
stmt.setInt(1, user);
stmt.setObject(2, chapter);
stmt.setObject(3, puzzle);
ResultSet result = stmt.executeQuery();
if(result.next()) return makeGroup(result);
}catch(Exception e){}
return null;
}
private int getGroupId(Group group) throws Exception{ private int getGroupId(Group group) throws Exception{
ensureConnection(); ensureConnection();
PreparedStatement stmt = DatabaseQuery.GET_GROUP_ID_BY_DATA.prepare(this.con); PreparedStatement stmt = DatabaseQuery.GET_GROUP_ID_BY_DATA.prepare(this.con);

View file

@ -45,6 +45,10 @@ public class PuzzleResponse implements Response {
//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(), 0) >= received.getPuzzleId()){
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
return;
}
Puzzle currentPuzzle = databaseRepo.getPuzzle(received.getPuzzleId()); Puzzle currentPuzzle = databaseRepo.getPuzzle(received.getPuzzleId());
Completion completion = databaseRepo.insertOrUpdatePuzzleResponse(received.getPuzzleId(), user.getId(), Completion completion = databaseRepo.insertOrUpdatePuzzleResponse(received.getPuzzleId(), user.getId(),
received.getFileName(), received.getSourceCode(), received.getResponse(), currentPuzzle); received.getFileName(), received.getSourceCode(), received.getResponse(), currentPuzzle);

View file

@ -24,8 +24,16 @@ public class GroupCreate implements Response {
} }
@Route(path = "^\\/groupCreate$", type = POST, needLogin = true) @Route(path = "^\\/groupCreate$", 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{
if (this.repo.insertGroup(new Group((JSONObject) HttpUtil.readJson(reader)), user)) { Group group = new Group((JSONObject) HttpUtil.readJson(reader));
Group userGroup = this.repo.getPlayerGroup(user.getId(), group.getLinkToChapter(), group.getLinkToPuzzle());
if(group.equals(userGroup)){
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
return;
}
if (this.repo.insertGroup(group, user)) {
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *"); HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *");
} else { } else {
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *"); HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");

View file

@ -24,8 +24,16 @@ public class GroupJoin implements Response{
} }
@Route(path = "^\\/groupJoin$", type = POST, needLogin = true) @Route(path = "^\\/groupJoin$", 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{
if (this.repo.insertUserInGroup(new Group((JSONObject) HttpUtil.readJson(reader)), user)) { Group group = new Group((JSONObject) HttpUtil.readJson(reader));
Group userGroup = this.repo.getPlayerGroup(user.getId(), group.getLinkToChapter(), group.getLinkToPuzzle());
if(group.equals(userGroup)){
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
return;
}
if (this.repo.insertUserInGroup(group, user)) {
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *"); HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *");
} else { } else {
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *"); HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");

View file

@ -24,8 +24,16 @@ public class GroupQuit implements Response{
} }
@Route(path = "^\\/groupQuit$", type = POST, needLogin = true) @Route(path = "^\\/groupQuit$", 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{
if (this.repo.leaveGroup(new Group((JSONObject) HttpUtil.readJson(reader)), user)) { Group group = new Group((JSONObject) HttpUtil.readJson(reader));
Group userGroup = this.repo.getPlayerGroup(user.getId(), group.getLinkToChapter(), group.getLinkToPuzzle());
if(!group.equals(userGroup)){
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");
return;
}
if (this.repo.leaveGroup(group, user)) {
HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *"); HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *");
} else { } else {
HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *"); HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");