From e300d913cc2a193504f8403f76214d860cd71791 Mon Sep 17 00:00:00 2001 From: jeffcheasey88 <66554203+jeffcheasey88@users.noreply.github.com> Date: Wed, 12 Apr 2023 10:08:52 +0200 Subject: [PATCH] Rules for groups & response --- src/be/jeffcheasey88/peeratcode/model/Group.java | 15 ++++++++------- .../peeratcode/repository/DatabaseQuery.java | 1 + .../peeratcode/repository/DatabaseRepository.java | 14 ++++++++++++++ .../peeratcode/routes/PuzzleResponse.java | 4 ++++ .../peeratcode/routes/groups/GroupCreate.java | 12 ++++++++++-- .../peeratcode/routes/groups/GroupJoin.java | 12 ++++++++++-- .../peeratcode/routes/groups/GroupQuit.java | 12 ++++++++++-- 7 files changed, 57 insertions(+), 13 deletions(-) diff --git a/src/be/jeffcheasey88/peeratcode/model/Group.java b/src/be/jeffcheasey88/peeratcode/model/Group.java index f083b68..9e27dc3 100644 --- a/src/be/jeffcheasey88/peeratcode/model/Group.java +++ b/src/be/jeffcheasey88/peeratcode/model/Group.java @@ -125,14 +125,15 @@ public class Group implements Comparable { @Override public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; + if(obj == this) return true; + if(obj == null) return false; + if(!(obj instanceof Group)) return false; 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); + } } diff --git a/src/be/jeffcheasey88/peeratcode/repository/DatabaseQuery.java b/src/be/jeffcheasey88/peeratcode/repository/DatabaseQuery.java index d5d7da1..920027b 100644 --- a/src/be/jeffcheasey88/peeratcode/repository/DatabaseQuery.java +++ b/src/be/jeffcheasey88/peeratcode/repository/DatabaseQuery.java @@ -17,6 +17,7 @@ public enum DatabaseQuery { // 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 = ?)"), INSERT_GROUP("INSERT INTO groups (name, fk_chapter, fk_puzzle) VALUES (?,?,?)"), INSERT_PLAYER_IN_GROUP("INSERT INTO containsGroups (fk_player, fk_group) VALUES (?,?)"), diff --git a/src/be/jeffcheasey88/peeratcode/repository/DatabaseRepository.java b/src/be/jeffcheasey88/peeratcode/repository/DatabaseRepository.java index b998da9..612f159 100644 --- a/src/be/jeffcheasey88/peeratcode/repository/DatabaseRepository.java +++ b/src/be/jeffcheasey88/peeratcode/repository/DatabaseRepository.java @@ -508,6 +508,20 @@ public class DatabaseRepository { 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{ ensureConnection(); PreparedStatement stmt = DatabaseQuery.GET_GROUP_ID_BY_DATA.prepare(this.con); diff --git a/src/be/jeffcheasey88/peeratcode/routes/PuzzleResponse.java b/src/be/jeffcheasey88/peeratcode/routes/PuzzleResponse.java index 489c8eb..7dba331 100644 --- a/src/be/jeffcheasey88/peeratcode/routes/PuzzleResponse.java +++ b/src/be/jeffcheasey88/peeratcode/routes/PuzzleResponse.java @@ -45,6 +45,10 @@ public class PuzzleResponse implements Response { //saveSourceCode(received, databaseRepo.getPlayer(user.getId())); 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()); Completion completion = databaseRepo.insertOrUpdatePuzzleResponse(received.getPuzzleId(), user.getId(), received.getFileName(), received.getSourceCode(), received.getResponse(), currentPuzzle); diff --git a/src/be/jeffcheasey88/peeratcode/routes/groups/GroupCreate.java b/src/be/jeffcheasey88/peeratcode/routes/groups/GroupCreate.java index 0ee4898..8d13599 100644 --- a/src/be/jeffcheasey88/peeratcode/routes/groups/GroupCreate.java +++ b/src/be/jeffcheasey88/peeratcode/routes/groups/GroupCreate.java @@ -24,8 +24,16 @@ public class GroupCreate implements Response { } @Route(path = "^\\/groupCreate$", type = POST, needLogin = true) - public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception { - if (this.repo.insertGroup(new Group((JSONObject) HttpUtil.readJson(reader)), user)) { + public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{ + 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: *"); } else { HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *"); diff --git a/src/be/jeffcheasey88/peeratcode/routes/groups/GroupJoin.java b/src/be/jeffcheasey88/peeratcode/routes/groups/GroupJoin.java index c17fc47..d3653c9 100644 --- a/src/be/jeffcheasey88/peeratcode/routes/groups/GroupJoin.java +++ b/src/be/jeffcheasey88/peeratcode/routes/groups/GroupJoin.java @@ -24,8 +24,16 @@ public class GroupJoin implements Response{ } @Route(path = "^\\/groupJoin$", type = POST, needLogin = true) - public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception { - if (this.repo.insertUserInGroup(new Group((JSONObject) HttpUtil.readJson(reader)), user)) { + public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{ + 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: *"); } else { HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *"); diff --git a/src/be/jeffcheasey88/peeratcode/routes/groups/GroupQuit.java b/src/be/jeffcheasey88/peeratcode/routes/groups/GroupQuit.java index dd21bdb..f9cd808 100644 --- a/src/be/jeffcheasey88/peeratcode/routes/groups/GroupQuit.java +++ b/src/be/jeffcheasey88/peeratcode/routes/groups/GroupQuit.java @@ -24,8 +24,16 @@ public class GroupQuit implements Response{ } @Route(path = "^\\/groupQuit$", type = POST, needLogin = true) - public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception { - if (this.repo.leaveGroup(new Group((JSONObject) HttpUtil.readJson(reader)), user)) { + public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{ + 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: *"); } else { HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *");