diff --git a/PeerAtCodeFramework.jar b/PeerAtCodeFramework.jar index 5eb43e1..d48268b 100644 Binary files a/PeerAtCodeFramework.jar and b/PeerAtCodeFramework.jar differ diff --git a/src/dev/peerat/backend/Main.java b/src/dev/peerat/backend/Main.java index a5790a2..04822d4 100644 --- a/src/dev/peerat/backend/Main.java +++ b/src/dev/peerat/backend/Main.java @@ -9,47 +9,9 @@ import java.util.Map.Entry; import java.util.regex.Matcher; import dev.peerat.backend.bonus.extract.RouteExtracter; -import dev.peerat.backend.model.Completion; import dev.peerat.backend.model.Group; import dev.peerat.backend.model.PeerAtUser; import dev.peerat.backend.repository.DatabaseRepository; -import dev.peerat.backend.routes.BadgeDetails; -import dev.peerat.backend.routes.ChapterElement; -import dev.peerat.backend.routes.ChapterList; -import dev.peerat.backend.routes.DynamicLeaderboard; -import dev.peerat.backend.routes.Leaderboard; -import dev.peerat.backend.routes.PlayerDetails; -import dev.peerat.backend.routes.PuzzleElement; -import dev.peerat.backend.routes.PuzzleResponse; -import dev.peerat.backend.routes.Result; -import dev.peerat.backend.routes.Swagger; -import dev.peerat.backend.routes.admins.DynamicLogs; -import dev.peerat.backend.routes.admins.ExceptionLogs; -import dev.peerat.backend.routes.admins.WebHookLeaderboard; -import dev.peerat.backend.routes.admins.chapter.AddChapter; -import dev.peerat.backend.routes.admins.chapter.DeleteChapter; -import dev.peerat.backend.routes.admins.chapter.EditChapter; -import dev.peerat.backend.routes.admins.chapter.GetChapter; -import dev.peerat.backend.routes.admins.puzzle.AddPuzzle; -import dev.peerat.backend.routes.admins.puzzle.DeletePuzzle; -import dev.peerat.backend.routes.admins.puzzle.EditPuzzle; -import dev.peerat.backend.routes.admins.puzzle.GetPuzzle; -import dev.peerat.backend.routes.admins.puzzle.GetPuzzles; -import dev.peerat.backend.routes.admins.tag.AddTag; -import dev.peerat.backend.routes.admins.tag.DeleteTag; -import dev.peerat.backend.routes.admins.tag.EditTag; -import dev.peerat.backend.routes.admins.tag.GetTags; -import dev.peerat.backend.routes.groups.GroupCreate; -import dev.peerat.backend.routes.groups.GroupJoin; -import dev.peerat.backend.routes.groups.GroupList; -import dev.peerat.backend.routes.groups.GroupQuit; -import dev.peerat.backend.routes.users.ChangePassword; -import dev.peerat.backend.routes.users.ForgotPassword; -import dev.peerat.backend.routes.users.Login; -import dev.peerat.backend.routes.users.MailConfirmation; -import dev.peerat.backend.routes.users.ProfileSettings; -import dev.peerat.backend.routes.users.Register; -import dev.peerat.backend.utils.Mail; import dev.peerat.framework.Context; import dev.peerat.framework.DependencyInjector; import dev.peerat.framework.HttpReader; @@ -61,6 +23,8 @@ import dev.peerat.framework.Response; import dev.peerat.framework.Route; import dev.peerat.framework.RouteInterceptor; import dev.peerat.framework.Router; +import dev.peerat.framework.auth.Authenticator; +import dev.peerat.framework.auth.JwtAuthenticator; import dev.peerat.framework.utils.json.JsonMap; import dev.peerat.framework.utils.json.JsonParser; @@ -86,12 +50,13 @@ public class Main{ "Access-Control-Allow-Headers: *"); ACCESS_ROUTER = router; + Authenticator auth; if(config.getJwtKey() != null){ JsonParser parser = new JsonParser(); JsonMap json = parser.parse(config.getJwtKey()); Map params = new HashMap<>(); for(Entry entry : json.entries()) params.put(entry.getKey(), entry.getValue()); - router.configureJwt( + auth = new JwtAuthenticator().configure( (builder) -> builder.setExpectedIssuer(config.getTokenIssuer()), (claims) -> { claims.setIssuer(config.getTokenIssuer()); @@ -100,7 +65,7 @@ public class Main{ (claims) -> new PeerAtUser(claims), params); }else{ - router.configureJwt( + auth = new JwtAuthenticator().configure( (builder) -> builder.setExpectedIssuer(config.getTokenIssuer()), (claims) -> { claims.setIssuer(config.getTokenIssuer()); @@ -108,12 +73,13 @@ public class Main{ }, (claims) -> new PeerAtUser(claims)); JsonMap json = new JsonMap(); - for(Entry entry : router.exportJwtKey().entrySet()){ + for(Entry entry : ((JwtAuthenticator)auth).exportKey().entrySet()){ json.set(entry.getKey(), entry.getValue()); } config.setJwtKey(json.toString()); config.save(); } + router.setAuthenticator(auth); router.setDefault((matcher, context, reader, writer) -> { context.response(404); @@ -179,17 +145,10 @@ public class Main{ private static void initRoutes(Router router, DatabaseRepository repo, Configuration config) throws Exception{ router.registerPackages(new DependencyInjector() - .of(repo, router, config.getMail(), new RouteExtracter(router)) + .of(repo, router, config, new RouteExtracter(router)) .of("waitting", new HashMap<>()) .of("leaderboard", new Locker<>()) - .of("log", router.getLogger()) - .of("exception", router.getExceptionLogger()) - .of("groups", new Locker<>()) - .of("groupDelay", config.getGroupJoinMinutes()) - .of("waitTime", config.getGroupQuitMinutes()) - .of("usersFiles", config.getUsersFiles()) - .of("gitToken", config.getGitToken()) - .of("issuer", config.getTokenIssuer())); + .of("groups", new Locker<>())); // Bot bot = new Bot(config, repo, groupLock); // bot.start(); diff --git a/src/dev/peerat/backend/routes/PuzzleResponse.java b/src/dev/peerat/backend/routes/PuzzleResponse.java index bef440e..4ab744f 100644 --- a/src/dev/peerat/backend/routes/PuzzleResponse.java +++ b/src/dev/peerat/backend/routes/PuzzleResponse.java @@ -11,6 +11,7 @@ import java.util.Arrays; import java.util.List; import java.util.regex.Matcher; +import dev.peerat.backend.Configuration; import dev.peerat.backend.bonus.extract.RouteDoc; import dev.peerat.backend.model.Chapter; import dev.peerat.backend.model.Completion; @@ -34,9 +35,9 @@ public class PuzzleResponse implements Response { private final Locker leaderboard; - public PuzzleResponse(DatabaseRepository databaseRepo, @Injection("usersFiles") String initUsersFilesPath, @Injection("leaderboard") Locker locker){ + public PuzzleResponse(DatabaseRepository databaseRepo, Configuration config, @Injection("leaderboard") Locker locker){ this.databaseRepo = databaseRepo; - usersFilesPath = initUsersFilesPath; + usersFilesPath = config.getUsersFiles(); this.leaderboard = locker; } diff --git a/src/dev/peerat/backend/routes/Swagger.java b/src/dev/peerat/backend/routes/Swagger.java index ba271c2..afe35d4 100644 --- a/src/dev/peerat/backend/routes/Swagger.java +++ b/src/dev/peerat/backend/routes/Swagger.java @@ -2,6 +2,7 @@ package dev.peerat.backend.routes; import java.util.regex.Matcher; +import dev.peerat.backend.Configuration; import dev.peerat.backend.bonus.extract.RouteExtracter; import dev.peerat.framework.Context; import dev.peerat.framework.HttpReader; @@ -14,9 +15,9 @@ public class Swagger implements Response{ private String json; - public Swagger(RouteExtracter extracter, @Injection("issuer") String host){ + public Swagger(RouteExtracter extracter, Configuration config){ try{ - this.json = extracter.swagger(host).toString(); + this.json = extracter.swagger(config.getTokenIssuer()).toString(); }catch(Exception e){ e.printStackTrace(); json = "{}"; diff --git a/src/dev/peerat/backend/routes/admins/ChapterController.java b/src/dev/peerat/backend/routes/admins/ChapterController.java new file mode 100644 index 0000000..439a8ca --- /dev/null +++ b/src/dev/peerat/backend/routes/admins/ChapterController.java @@ -0,0 +1,69 @@ +package dev.peerat.backend.routes.admins; + +import static dev.peerat.framework.RequestType.DELETE; +import static dev.peerat.framework.RequestType.POST; +import static dev.peerat.framework.RequestType.PUT; + +import java.sql.Timestamp; +import java.util.regex.Matcher; + +import dev.peerat.backend.model.Chapter; +import dev.peerat.backend.repository.DatabaseRepository; +import dev.peerat.framework.Context; +import dev.peerat.framework.HttpReader; +import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Route; +import dev.peerat.framework.utils.json.JsonMap; + +public class ChapterController{ + + private DatabaseRepository repo; + + public ChapterController(DatabaseRepository repo){ + this.repo = repo; + } + + @Route(path = "^/admin/chapter/$", type = POST, needLogin = true) + public void add(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + JsonMap json = reader.readJson(); + Chapter chapter = new Chapter(-1, json.get("name"), Timestamp.valueOf(json.get("start")), Timestamp.valueOf(json.get("end"))); + if(repo.adminAddChapter(chapter)){ + context.response(200); + }else{ + context.response(501); + } + } + + @Route(path = "^/admin/chapter/(\\d+)$", type = DELETE, needLogin = true) + public void delte(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + if(this.repo.adminDeleteChapter(Integer.parseInt(matcher.group(1)))){ + context.response(200); + }else{ + context.response(501); + } + } + + @Route(path = "^/admin/chapter/(\\d+)$", type = PUT, needLogin = true) + public void edit(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + JsonMap json = reader.readJson(); + Chapter chapter = new Chapter(-1, json.get("name"), Timestamp.valueOf(json.get("start")), Timestamp.valueOf(json.get("end"))); + if(repo.adminUpdateChapter(Integer.parseInt(matcher.group(1)), chapter)){ + context.response(200); + }else{ + context.response(501); + } + } + + @Route(path = "^/admin/chapter/(\\d+)$", needLogin = true) + public void get(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + Chapter chapter = this.repo.getAdminChapter(Integer.parseInt(matcher.group(1))); + JsonMap json = new JsonMap(); + json.set("name", chapter.getName()); + json.set("start", chapter.getStartDate()); + json.set("end", chapter.getEndDate()); + + context.response(200); + writer.write(json.toString()+"\n"); + } + +} diff --git a/src/dev/peerat/backend/routes/admins/DynamicLogs.java b/src/dev/peerat/backend/routes/admins/DynamicLogs.java deleted file mode 100644 index a76ff72..0000000 --- a/src/dev/peerat/backend/routes/admins/DynamicLogs.java +++ /dev/null @@ -1,57 +0,0 @@ -package dev.peerat.backend.routes.admins; - -import java.util.regex.Matcher; - -import dev.peerat.backend.bonus.extract.RouteDoc; -import dev.peerat.backend.model.Group; -import dev.peerat.backend.model.PeerAtUser; -import dev.peerat.backend.repository.DatabaseRepository; -import dev.peerat.framework.Context; -import dev.peerat.framework.HttpReader; -import dev.peerat.framework.HttpWriter; -import dev.peerat.framework.Injection; -import dev.peerat.framework.Locker; -import dev.peerat.framework.Locker.Key; -import dev.peerat.framework.Response; -import dev.peerat.framework.Route; -import dev.peerat.framework.utils.json.JsonMap; - -public class DynamicLogs implements Response{ - - private Locker locker; //Context - private DatabaseRepository repo; - - public DynamicLogs(@Injection("log") Locker locker, DatabaseRepository repo){ - this.locker = locker; - this.repo = repo; - } - - @RouteDoc(path = "/admin/logs", responseCode = 200, responseDescription = "L'utilisateur peux voir les logs en directe") - @RouteDoc(responseCode = 401, responseDescription = "L'utilisateur n'a pas accès à cette ressource") - - @Route(path = "^/admin/logs$", needLogin = true, websocket = true) - public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ - Key key = new Key(); - - locker.init(key); - try { - while(!reader.isClosed()){ - locker.lock(key); - Context instance = locker.getValue(key); - JsonMap json = new JsonMap(); - json.set("logged", instance.isLogged()); - if(instance.isLogged()) json.set("pseudo", repo.getPlayer(instance.getUser().getId()).getPseudo()); - json.set("path", instance.getPath()); - json.set("type", instance.getType().toString()); - json.set("code", instance.getResponseCode()); - - writer.write(json.toString()); - writer.flush(); - } - }catch(Exception e){} - locker.remove(key); - } - - - -} diff --git a/src/dev/peerat/backend/routes/admins/ExceptionLogs.java b/src/dev/peerat/backend/routes/admins/ExceptionLogs.java deleted file mode 100644 index a8fdeff..0000000 --- a/src/dev/peerat/backend/routes/admins/ExceptionLogs.java +++ /dev/null @@ -1,49 +0,0 @@ -package dev.peerat.backend.routes.admins; - -import java.util.regex.Matcher; - -import dev.peerat.framework.Context; -import dev.peerat.framework.HttpReader; -import dev.peerat.framework.HttpWriter; -import dev.peerat.framework.Injection; -import dev.peerat.framework.Locker; -import dev.peerat.framework.Locker.Key; -import dev.peerat.framework.Response; -import dev.peerat.framework.Route; -import dev.peerat.framework.utils.json.JsonArray; -import dev.peerat.framework.utils.json.JsonMap; - -public class ExceptionLogs implements Response{ - - private Locker locker; - - public ExceptionLogs(@Injection("exception") Locker locker){ - this.locker = locker; - } - - @Route(path = "^/admin/exceptions$", needLogin = true, websocket = true) - public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ - Key key = new Key(); - - locker.init(key); - try { - while(!reader.isClosed()){ - locker.lock(key); - Exception exception = locker.getValue(key); - JsonMap json = new JsonMap(); - json.set("type", exception.getClass().getSimpleName()); - json.set("message", exception.getMessage()); - JsonArray trace = new JsonArray(); - for(StackTraceElement element : exception.getStackTrace()) trace.add(element.toString()); - json.set("trace", trace); - - writer.write(json.toString()); - writer.flush(); - } - }catch(Exception e){} - locker.remove(key); - } - - - -} diff --git a/src/dev/peerat/backend/routes/admins/LogController.java b/src/dev/peerat/backend/routes/admins/LogController.java new file mode 100644 index 0000000..38a5e1b --- /dev/null +++ b/src/dev/peerat/backend/routes/admins/LogController.java @@ -0,0 +1,74 @@ +package dev.peerat.backend.routes.admins; + +import java.util.function.BiConsumer; +import java.util.regex.Matcher; + +import dev.peerat.backend.bonus.extract.RouteDoc; +import dev.peerat.backend.model.PeerAtUser; +import dev.peerat.backend.repository.DatabaseRepository; +import dev.peerat.framework.Context; +import dev.peerat.framework.HttpReader; +import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Locker; +import dev.peerat.framework.Locker.Key; +import dev.peerat.framework.Route; +import dev.peerat.framework.Router; +import dev.peerat.framework.utils.json.JsonArray; +import dev.peerat.framework.utils.json.JsonMap; + +public class LogController { + + private Locker contextLocker; + private Locker exceptionLocker; + private DatabaseRepository repo; + + public LogController(Router router, DatabaseRepository repo){ + this.contextLocker = router.getLogger(); + this.exceptionLocker = router.getExceptionLogger(); + this.repo = repo; + } + + @RouteDoc(path = "/admin/logs", responseCode = 200, responseDescription = "L'utilisateur peux voir les logs en directe") + @RouteDoc(responseCode = 401, responseDescription = "L'utilisateur n'a pas accès à cette ressource") + + @Route(path = "^/admin/logs$", needLogin = true, websocket = true) + public void logs(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + log(reader, writer, this.contextLocker, (json, instance) -> { + json.set("logged", instance.isLogged()); + if(instance.isLogged()) json.set("pseudo", repo.getPlayer(instance.getUser().getId()).getPseudo()); + json.set("path", instance.getPath()); + json.set("type", instance.getType().toString()); + json.set("code", instance.getResponseCode()); + }); + } + + @Route(path = "^/admin/exceptions$", needLogin = true, websocket = true) + public void exceptions(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + log(reader, writer, this.exceptionLocker, (json, exception) -> { + json.set("type", exception.getClass().getSimpleName()); + json.set("message", exception.getMessage()); + JsonArray trace = new JsonArray(); + for(StackTraceElement element : exception.getStackTrace()) trace.add(element.toString()); + json.set("trace", trace); + }); + } + + public void log(HttpReader reader, HttpWriter writer, Locker locker, BiConsumer consumer){ + Key key = new Key(); + + locker.init(key); + try { + while(!reader.isClosed()){ + locker.lock(key); + T instance = locker.getValue(key); + JsonMap json = new JsonMap(); + consumer.accept(json, instance); + + writer.write(json.toString()); + writer.flush(); + } + }catch(Exception e){} + locker.remove(key); + } + +} diff --git a/src/dev/peerat/backend/routes/admins/PuzzleController.java b/src/dev/peerat/backend/routes/admins/PuzzleController.java new file mode 100644 index 0000000..97a6ab1 --- /dev/null +++ b/src/dev/peerat/backend/routes/admins/PuzzleController.java @@ -0,0 +1,88 @@ +package dev.peerat.backend.routes.admins; + +import static dev.peerat.framework.RequestType.DELETE; +import static dev.peerat.framework.RequestType.POST; +import static dev.peerat.framework.RequestType.PUT; + +import java.util.List; +import java.util.regex.Matcher; + +import dev.peerat.backend.model.Puzzle; +import dev.peerat.backend.repository.DatabaseRepository; +import dev.peerat.framework.Context; +import dev.peerat.framework.HttpReader; +import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Route; +import dev.peerat.framework.utils.json.JsonArray; +import dev.peerat.framework.utils.json.JsonMap; + +public class PuzzleController { + + private DatabaseRepository repo; + + public PuzzleController(DatabaseRepository repo){ + this.repo = repo; + } + + @Route(path = "^/admin/puzzle/$", type = POST, needLogin = true) + public void add(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + JsonMap json = reader.readJson(); + Puzzle puzzle = new Puzzle(-1, json.get("name"), json.get("content"), json.get("soluce").getBytes(), null, json.get("scoreMax").intValue(), null, -1, null); + if(repo.adminAddPuzzle(puzzle, json.get("chapter").intValue())){ + context.response(200); + }else{ + context.response(501); + } + } + + @Route(path = "^/admin/puzzle/(\\d+)$", type = DELETE, needLogin = true) + public void delete(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + if(this.repo.adminDeletePuzzle(Integer.parseInt(matcher.group(1)))){ + context.response(200); + }else{ + context.response(501); + } + } + + + @Route(path = "^/admin/puzzle/(\\d+)$", type = PUT, needLogin = true) + public void edit(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + JsonMap json = reader.readJson(); + Puzzle puzzle = new Puzzle(-1, json.get("name"), json.get("content"), json.get("soluce").getBytes(), null, json.get("scoreMax").intValue(), null, -1, null); + if(repo.adminUpdatePuzzle(Integer.parseInt(matcher.group(1)), puzzle, json.get("chapter").intValue())){ + context.response(200); + }else{ + context.response(501); + } + } + + @Route(path = "^/admin/puzzle/(\\d+)$", needLogin = true) + public void get(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + Puzzle puzzle = this.repo.getAdminPuzzle(Integer.parseInt(matcher.group(1))); + JsonMap json = new JsonMap(); + json.set("name", puzzle.getName()); + json.set("content", puzzle.getContent()); + json.set("soluce", new String(puzzle.getSoluce())); + json.set("score_max", puzzle.getScoreMax()); + + context.response(200); + writer.write(json.toString()+"\n"); + } + + @Route(path = "^/admin/puzzles/$", needLogin = true) + public void getAll(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + List puzzles = repo.getAdminPuzzles(); + JsonArray array = new JsonArray(); + for (Puzzle puzzle : puzzles){ + JsonMap puzzleJSON = new JsonMap(); + puzzleJSON.set("id", puzzle.getId()); + puzzleJSON.set("name", puzzle.getName()); + puzzleJSON.set("scoreMax", puzzle.getScoreMax()); + if(puzzle.getTags() != null) puzzleJSON.set("tags", puzzle.getJsonTags()); + puzzleJSON.set("show", puzzle.hasStarted()); + array.add(puzzleJSON); + } + context.response(200); + writer.write(array.toString()); + } +} diff --git a/src/dev/peerat/backend/routes/admins/TagController.java b/src/dev/peerat/backend/routes/admins/TagController.java new file mode 100644 index 0000000..3462ec4 --- /dev/null +++ b/src/dev/peerat/backend/routes/admins/TagController.java @@ -0,0 +1,67 @@ +package dev.peerat.backend.routes.admins; + +import static dev.peerat.framework.RequestType.DELETE; +import static dev.peerat.framework.RequestType.POST; +import static dev.peerat.framework.RequestType.PUT; + +import java.util.List; +import java.util.regex.Matcher; + +import dev.peerat.backend.model.Tag; +import dev.peerat.backend.repository.DatabaseRepository; +import dev.peerat.framework.Context; +import dev.peerat.framework.HttpReader; +import dev.peerat.framework.HttpWriter; +import dev.peerat.framework.Route; +import dev.peerat.framework.utils.json.JsonArray; +import dev.peerat.framework.utils.json.JsonMap; + +public class TagController { + + private DatabaseRepository repo; + + public TagController(DatabaseRepository repo){ + this.repo = repo; + } + + @Route(path = "^/admin/tag/$", type = POST, needLogin = true) + public void add(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + JsonMap json = reader.readJson(); + if(repo.adminAddTag(json.get("name"))){ + context.response(200); + }else{ + context.response(501); + } + } + + @Route(path = "^/admin/tag/(\\d+)$", type = DELETE, needLogin = true) + public void delete(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + if(this.repo.adminDeleteTag(Integer.parseInt(matcher.group(1)))){ + context.response(200); + }else{ + context.response(501); + } + } + + @Route(path = "^/admin/tag/(\\d+)$", type = PUT, needLogin = true) + public void edit(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + JsonMap json = reader.readJson(); + if(repo.adminUpdateTag(new Tag(Integer.parseInt(matcher.group(1)), json.get("name")))){ + context.response(200); + }else{ + context.response(501); + } + } + + @Route(path = "^/admin/tag/$", needLogin = true) + public void get(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ + List list = repo.getAdminTags(); + JsonArray json = new JsonArray(); + for(Tag tag : list) json.add(tag.toJson()); + context.response(200); + writer.write(json.toString()); + writer.flush(); + } + + +} diff --git a/src/dev/peerat/backend/routes/admins/chapter/AddChapter.java b/src/dev/peerat/backend/routes/admins/chapter/AddChapter.java deleted file mode 100644 index 84f9dd5..0000000 --- a/src/dev/peerat/backend/routes/admins/chapter/AddChapter.java +++ /dev/null @@ -1,36 +0,0 @@ -package dev.peerat.backend.routes.admins.chapter; - -import static dev.peerat.framework.RequestType.POST; - -import java.sql.Timestamp; -import java.util.regex.Matcher; - -import dev.peerat.backend.model.Chapter; -import dev.peerat.backend.repository.DatabaseRepository; -import dev.peerat.framework.Context; -import dev.peerat.framework.HttpReader; -import dev.peerat.framework.HttpWriter; -import dev.peerat.framework.Response; -import dev.peerat.framework.Route; -import dev.peerat.framework.utils.json.JsonMap; - -public class AddChapter implements Response{ - - private DatabaseRepository repo; - - public AddChapter(DatabaseRepository repo){ - this.repo = repo; - } - - @Route(path = "^/admin/chapter/$", type = POST, needLogin = true) - public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ - JsonMap json = reader.readJson(); - Chapter chapter = new Chapter(-1, json.get("name"), Timestamp.valueOf(json.get("start")), Timestamp.valueOf(json.get("end"))); - if(repo.adminAddChapter(chapter)){ - context.response(200); - }else{ - context.response(501); - } - } - -} diff --git a/src/dev/peerat/backend/routes/admins/chapter/DeleteChapter.java b/src/dev/peerat/backend/routes/admins/chapter/DeleteChapter.java deleted file mode 100644 index 1097d0a..0000000 --- a/src/dev/peerat/backend/routes/admins/chapter/DeleteChapter.java +++ /dev/null @@ -1,31 +0,0 @@ -package dev.peerat.backend.routes.admins.chapter; - -import static dev.peerat.framework.RequestType.DELETE; - -import java.util.regex.Matcher; - -import dev.peerat.backend.repository.DatabaseRepository; -import dev.peerat.framework.Context; -import dev.peerat.framework.HttpReader; -import dev.peerat.framework.HttpWriter; -import dev.peerat.framework.Response; -import dev.peerat.framework.Route; - -public class DeleteChapter implements Response{ - - private DatabaseRepository repo; - - public DeleteChapter(DatabaseRepository repo){ - this.repo = repo; - } - - @Route(path = "^/admin/chapter/(\\d+)$", type = DELETE, needLogin = true) - public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ - if(this.repo.adminDeleteChapter(Integer.parseInt(matcher.group(1)))){ - context.response(200); - }else{ - context.response(501); - } - } - -} diff --git a/src/dev/peerat/backend/routes/admins/chapter/EditChapter.java b/src/dev/peerat/backend/routes/admins/chapter/EditChapter.java deleted file mode 100644 index 12c8f6d..0000000 --- a/src/dev/peerat/backend/routes/admins/chapter/EditChapter.java +++ /dev/null @@ -1,37 +0,0 @@ -package dev.peerat.backend.routes.admins.chapter; - -import static dev.peerat.framework.RequestType.PUT; - -import java.sql.Timestamp; -import java.util.regex.Matcher; - -import dev.peerat.backend.model.Chapter; -import dev.peerat.backend.repository.DatabaseRepository; -import dev.peerat.framework.Context; -import dev.peerat.framework.HttpReader; -import dev.peerat.framework.HttpWriter; -import dev.peerat.framework.Response; -import dev.peerat.framework.Route; -import dev.peerat.framework.utils.json.JsonMap; - -public class EditChapter implements Response{ - - private DatabaseRepository repo; - - public EditChapter(DatabaseRepository repo){ - this.repo = repo; - } - - @Route(path = "^/admin/chapter/(\\d+)$", type = PUT, needLogin = true) - public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ - JsonMap json = reader.readJson(); - Chapter chapter = new Chapter(-1, json.get("name"), Timestamp.valueOf(json.get("start")), Timestamp.valueOf(json.get("end"))); - if(repo.adminUpdateChapter(Integer.parseInt(matcher.group(1)), chapter)){ - context.response(200); - }else{ - context.response(501); - } - - } - -} diff --git a/src/dev/peerat/backend/routes/admins/chapter/GetChapter.java b/src/dev/peerat/backend/routes/admins/chapter/GetChapter.java deleted file mode 100644 index 5f71b3f..0000000 --- a/src/dev/peerat/backend/routes/admins/chapter/GetChapter.java +++ /dev/null @@ -1,34 +0,0 @@ -package dev.peerat.backend.routes.admins.chapter; - -import java.util.regex.Matcher; - -import dev.peerat.backend.model.Chapter; -import dev.peerat.backend.repository.DatabaseRepository; -import dev.peerat.framework.Context; -import dev.peerat.framework.HttpReader; -import dev.peerat.framework.HttpWriter; -import dev.peerat.framework.Response; -import dev.peerat.framework.Route; -import dev.peerat.framework.utils.json.JsonMap; - -public class GetChapter implements Response{ - - private DatabaseRepository repo; - - public GetChapter(DatabaseRepository repo){ - this.repo = repo; - } - - @Route(path = "^/admin/chapter/(\\d+)$", needLogin = true) - public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ - Chapter chapter = this.repo.getAdminChapter(Integer.parseInt(matcher.group(1))); - JsonMap json = new JsonMap(); - json.set("name", chapter.getName()); - json.set("start", chapter.getStartDate()); - json.set("end", chapter.getEndDate()); - - context.response(200); - writer.write(json.toString()+"\n"); - } - -} diff --git a/src/dev/peerat/backend/routes/admins/puzzle/AddPuzzle.java b/src/dev/peerat/backend/routes/admins/puzzle/AddPuzzle.java deleted file mode 100644 index 02117dc..0000000 --- a/src/dev/peerat/backend/routes/admins/puzzle/AddPuzzle.java +++ /dev/null @@ -1,35 +0,0 @@ -package dev.peerat.backend.routes.admins.puzzle; - -import static dev.peerat.framework.RequestType.POST; - -import java.util.regex.Matcher; - -import dev.peerat.backend.model.Puzzle; -import dev.peerat.backend.repository.DatabaseRepository; -import dev.peerat.framework.Context; -import dev.peerat.framework.HttpReader; -import dev.peerat.framework.HttpWriter; -import dev.peerat.framework.Response; -import dev.peerat.framework.Route; -import dev.peerat.framework.utils.json.JsonMap; - -public class AddPuzzle implements Response{ - - private DatabaseRepository repo; - - public AddPuzzle(DatabaseRepository repo){ - this.repo = repo; - } - - @Route(path = "^/admin/puzzle/$", type = POST, needLogin = true) - public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ - JsonMap json = reader.readJson(); - Puzzle puzzle = new Puzzle(-1, json.get("name"), json.get("content"), json.get("soluce").getBytes(), null, json.get("scoreMax").intValue(), null, -1, null); - if(repo.adminAddPuzzle(puzzle, json.get("chapter").intValue())){ - context.response(200); - }else{ - context.response(501); - } - } - -} diff --git a/src/dev/peerat/backend/routes/admins/puzzle/DeletePuzzle.java b/src/dev/peerat/backend/routes/admins/puzzle/DeletePuzzle.java deleted file mode 100644 index ba068e3..0000000 --- a/src/dev/peerat/backend/routes/admins/puzzle/DeletePuzzle.java +++ /dev/null @@ -1,32 +0,0 @@ -package dev.peerat.backend.routes.admins.puzzle; - -import static dev.peerat.framework.RequestType.DELETE; - -import java.util.regex.Matcher; - -import dev.peerat.backend.repository.DatabaseRepository; -import dev.peerat.framework.Context; -import dev.peerat.framework.HttpReader; -import dev.peerat.framework.HttpWriter; -import dev.peerat.framework.Response; -import dev.peerat.framework.Route; -import dev.peerat.framework.utils.json.JsonMap; - -public class DeletePuzzle implements Response{ - - private DatabaseRepository repo; - - public DeletePuzzle(DatabaseRepository repo){ - this.repo = repo; - } - - @Route(path = "^/admin/puzzle/(\\d+)$", type = DELETE, needLogin = true) - public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ - if(this.repo.adminDeletePuzzle(Integer.parseInt(matcher.group(1)))){ - context.response(200); - }else{ - context.response(501); - } - } - -} diff --git a/src/dev/peerat/backend/routes/admins/puzzle/EditPuzzle.java b/src/dev/peerat/backend/routes/admins/puzzle/EditPuzzle.java deleted file mode 100644 index 969ba40..0000000 --- a/src/dev/peerat/backend/routes/admins/puzzle/EditPuzzle.java +++ /dev/null @@ -1,35 +0,0 @@ -package dev.peerat.backend.routes.admins.puzzle; - -import static dev.peerat.framework.RequestType.PUT; - -import java.util.regex.Matcher; - -import dev.peerat.backend.model.Puzzle; -import dev.peerat.backend.repository.DatabaseRepository; -import dev.peerat.framework.Context; -import dev.peerat.framework.HttpReader; -import dev.peerat.framework.HttpWriter; -import dev.peerat.framework.Response; -import dev.peerat.framework.Route; -import dev.peerat.framework.utils.json.JsonMap; - -public class EditPuzzle implements Response{ - - private DatabaseRepository repo; - - public EditPuzzle(DatabaseRepository repo){ - this.repo = repo; - } - - @Route(path = "^/admin/puzzle/(\\d+)$", type = PUT, needLogin = true) - public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ - JsonMap json = reader.readJson(); - Puzzle puzzle = new Puzzle(-1, json.get("name"), json.get("content"), json.get("soluce").getBytes(), null, json.get("scoreMax").intValue(), null, -1, null); - if(repo.adminUpdatePuzzle(Integer.parseInt(matcher.group(1)), puzzle, json.get("chapter").intValue())){ - context.response(200); - }else{ - context.response(501); - } - } - -} diff --git a/src/dev/peerat/backend/routes/admins/puzzle/GetPuzzle.java b/src/dev/peerat/backend/routes/admins/puzzle/GetPuzzle.java deleted file mode 100644 index 060e9ba..0000000 --- a/src/dev/peerat/backend/routes/admins/puzzle/GetPuzzle.java +++ /dev/null @@ -1,35 +0,0 @@ -package dev.peerat.backend.routes.admins.puzzle; - -import java.util.regex.Matcher; - -import dev.peerat.backend.model.Puzzle; -import dev.peerat.backend.repository.DatabaseRepository; -import dev.peerat.framework.Context; -import dev.peerat.framework.HttpReader; -import dev.peerat.framework.HttpWriter; -import dev.peerat.framework.Response; -import dev.peerat.framework.Route; -import dev.peerat.framework.utils.json.JsonMap; - -public class GetPuzzle implements Response{ - - private DatabaseRepository repo; - - public GetPuzzle(DatabaseRepository repo){ - this.repo = repo; - } - - @Route(path = "^/admin/puzzle/(\\d+)$", needLogin = true) - public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ - Puzzle puzzle = this.repo.getAdminPuzzle(Integer.parseInt(matcher.group(1))); - JsonMap json = new JsonMap(); - json.set("name", puzzle.getName()); - json.set("content", puzzle.getContent()); - json.set("soluce", new String(puzzle.getSoluce())); - json.set("score_max", puzzle.getScoreMax()); - - context.response(200); - writer.write(json.toString()+"\n"); - } - -} diff --git a/src/dev/peerat/backend/routes/admins/puzzle/GetPuzzles.java b/src/dev/peerat/backend/routes/admins/puzzle/GetPuzzles.java deleted file mode 100644 index 0014688..0000000 --- a/src/dev/peerat/backend/routes/admins/puzzle/GetPuzzles.java +++ /dev/null @@ -1,41 +0,0 @@ -package dev.peerat.backend.routes.admins.puzzle; - -import java.util.List; -import java.util.regex.Matcher; - -import dev.peerat.backend.model.Puzzle; -import dev.peerat.backend.repository.DatabaseRepository; -import dev.peerat.framework.Context; -import dev.peerat.framework.HttpReader; -import dev.peerat.framework.HttpWriter; -import dev.peerat.framework.Response; -import dev.peerat.framework.Route; -import dev.peerat.framework.utils.json.JsonArray; -import dev.peerat.framework.utils.json.JsonMap; - -public class GetPuzzles implements Response{ - - private DatabaseRepository repo; - - public GetPuzzles(DatabaseRepository repo){ - this.repo = repo; - } - - @Route(path = "^/admin/puzzles/$", needLogin = true) - public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ - List puzzles = repo.getAdminPuzzles(); - JsonArray array = new JsonArray(); - for (Puzzle puzzle : puzzles){ - JsonMap puzzleJSON = new JsonMap(); - puzzleJSON.set("id", puzzle.getId()); - puzzleJSON.set("name", puzzle.getName()); - puzzleJSON.set("scoreMax", puzzle.getScoreMax()); - if(puzzle.getTags() != null) puzzleJSON.set("tags", puzzle.getJsonTags()); - puzzleJSON.set("show", puzzle.hasStarted()); - array.add(puzzleJSON); - } - context.response(200); - writer.write(array.toString()); - } - -} diff --git a/src/dev/peerat/backend/routes/admins/tag/AddTag.java b/src/dev/peerat/backend/routes/admins/tag/AddTag.java deleted file mode 100644 index 8df16dd..0000000 --- a/src/dev/peerat/backend/routes/admins/tag/AddTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package dev.peerat.backend.routes.admins.tag; - -import static dev.peerat.framework.RequestType.POST; - -import java.util.regex.Matcher; - -import dev.peerat.backend.repository.DatabaseRepository; -import dev.peerat.framework.Context; -import dev.peerat.framework.HttpReader; -import dev.peerat.framework.HttpWriter; -import dev.peerat.framework.Response; -import dev.peerat.framework.Route; -import dev.peerat.framework.utils.json.JsonMap; - -public class AddTag implements Response{ - - private DatabaseRepository repo; - - public AddTag(DatabaseRepository repo){ - this.repo = repo; - } - - @Route(path = "^/admin/tag/$", type = POST, needLogin = true) - public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ - JsonMap json = reader.readJson(); - if(repo.adminAddTag(json.get("name"))){ - context.response(200); - }else{ - context.response(501); - } - } - -} diff --git a/src/dev/peerat/backend/routes/admins/tag/DeleteTag.java b/src/dev/peerat/backend/routes/admins/tag/DeleteTag.java deleted file mode 100644 index 84d92a0..0000000 --- a/src/dev/peerat/backend/routes/admins/tag/DeleteTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package dev.peerat.backend.routes.admins.tag; - -import static dev.peerat.framework.RequestType.DELETE; - -import java.util.regex.Matcher; - -import dev.peerat.backend.repository.DatabaseRepository; -import dev.peerat.framework.Context; -import dev.peerat.framework.HttpReader; -import dev.peerat.framework.HttpWriter; -import dev.peerat.framework.Response; -import dev.peerat.framework.Route; - -public class DeleteTag implements Response{ - - private DatabaseRepository repo; - - public DeleteTag(DatabaseRepository repo){ - this.repo = repo; - } - - @Route(path = "^/admin/tag/(\\d+)$", type = DELETE, needLogin = true) - public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ - if(this.repo.adminDeleteTag(Integer.parseInt(matcher.group(1)))){ - context.response(200); - }else{ - context.response(501); - } - } - -} diff --git a/src/dev/peerat/backend/routes/admins/tag/EditTag.java b/src/dev/peerat/backend/routes/admins/tag/EditTag.java deleted file mode 100644 index 08c265e..0000000 --- a/src/dev/peerat/backend/routes/admins/tag/EditTag.java +++ /dev/null @@ -1,34 +0,0 @@ -package dev.peerat.backend.routes.admins.tag; - -import static dev.peerat.framework.RequestType.PUT; - -import java.util.regex.Matcher; - -import dev.peerat.backend.model.Tag; -import dev.peerat.backend.repository.DatabaseRepository; -import dev.peerat.framework.Context; -import dev.peerat.framework.HttpReader; -import dev.peerat.framework.HttpWriter; -import dev.peerat.framework.Response; -import dev.peerat.framework.Route; -import dev.peerat.framework.utils.json.JsonMap; - -public class EditTag implements Response{ - - private DatabaseRepository repo; - - public EditTag(DatabaseRepository repo){ - this.repo = repo; - } - - @Route(path = "^/admin/tag/(\\d+)$", type = PUT, needLogin = true) - public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ - JsonMap json = reader.readJson(); - if(repo.adminUpdateTag(new Tag(Integer.parseInt(matcher.group(1)), json.get("name")))){ - context.response(200); - }else{ - context.response(501); - } - } - -} diff --git a/src/dev/peerat/backend/routes/admins/tag/GetTags.java b/src/dev/peerat/backend/routes/admins/tag/GetTags.java deleted file mode 100644 index aa14b43..0000000 --- a/src/dev/peerat/backend/routes/admins/tag/GetTags.java +++ /dev/null @@ -1,33 +0,0 @@ -package dev.peerat.backend.routes.admins.tag; - -import java.util.List; -import java.util.regex.Matcher; - -import dev.peerat.backend.model.Tag; -import dev.peerat.backend.repository.DatabaseRepository; -import dev.peerat.framework.Context; -import dev.peerat.framework.HttpReader; -import dev.peerat.framework.HttpWriter; -import dev.peerat.framework.Response; -import dev.peerat.framework.Route; -import dev.peerat.framework.utils.json.JsonArray; - -public class GetTags implements Response{ - - private DatabaseRepository repo; - - public GetTags(DatabaseRepository repo){ - this.repo = repo; - } - - @Route(path = "^/admin/tag/$", needLogin = true) - public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{ - List list = repo.getAdminTags(); - JsonArray json = new JsonArray(); - for(Tag tag : list) json.add(tag.toJson()); - context.response(200); - writer.write(json.toString()); - writer.flush(); - } - -} diff --git a/src/dev/peerat/backend/routes/groups/GroupCreate.java b/src/dev/peerat/backend/routes/groups/GroupCreate.java index 711dfc6..4739eb5 100644 --- a/src/dev/peerat/backend/routes/groups/GroupCreate.java +++ b/src/dev/peerat/backend/routes/groups/GroupCreate.java @@ -5,6 +5,7 @@ import static dev.peerat.framework.RequestType.POST; import java.time.LocalDateTime; import java.util.regex.Matcher; +import dev.peerat.backend.Configuration; import dev.peerat.backend.bonus.extract.RouteDoc; import dev.peerat.backend.model.Chapter; import dev.peerat.backend.model.Group; @@ -16,7 +17,6 @@ import dev.peerat.framework.HttpReader; import dev.peerat.framework.HttpWriter; import dev.peerat.framework.Injection; import dev.peerat.framework.Locker; -import dev.peerat.framework.Response; import dev.peerat.framework.Route; import dev.peerat.framework.utils.json.JsonMap; @@ -26,10 +26,10 @@ public class GroupCreate extends FormResponse { private DatabaseRepository repo; private int groupDelay; - public GroupCreate(DatabaseRepository repo, @Injection("groups") Locker locker, @Injection("groupDelay") int groupDelay){ + public GroupCreate(DatabaseRepository repo, @Injection("groups") Locker locker, Configuration config){ this.repo = repo; this.locker = locker; - this.groupDelay = groupDelay; + this.groupDelay = config.getGroupJoinMinutes(); validator("name", "[a-zA-Z0-9&|!?{}\\[\\]%/*\\-+=:;,_#@ ]{3,100}"); } diff --git a/src/dev/peerat/backend/routes/groups/GroupJoin.java b/src/dev/peerat/backend/routes/groups/GroupJoin.java index f90fda4..a99f7c9 100644 --- a/src/dev/peerat/backend/routes/groups/GroupJoin.java +++ b/src/dev/peerat/backend/routes/groups/GroupJoin.java @@ -5,6 +5,7 @@ import static dev.peerat.framework.RequestType.POST; import java.time.LocalDateTime; import java.util.regex.Matcher; +import dev.peerat.backend.Configuration; import dev.peerat.backend.bonus.extract.RouteDoc; import dev.peerat.backend.model.Chapter; import dev.peerat.backend.model.Completion; @@ -27,10 +28,10 @@ public class GroupJoin implements Response{ private final Locker leaderboard; - public GroupJoin(DatabaseRepository repo, @Injection("groupDelay") int groupDelay, @Injection("waitTime") String waitTime, @Injection("leaderboard") Locker locker){ + public GroupJoin(DatabaseRepository repo, Configuration config, @Injection("leaderboard") Locker locker){ this.repo = repo; - this.groupDelay = groupDelay; - this.waitTime = waitTime; + this.groupDelay = config.getGroupJoinMinutes(); + this.waitTime = config.getGroupQuitMinutes(); this.leaderboard = locker; } diff --git a/src/dev/peerat/backend/routes/groups/GroupQuit.java b/src/dev/peerat/backend/routes/groups/GroupQuit.java index c319a13..cb691a4 100644 --- a/src/dev/peerat/backend/routes/groups/GroupQuit.java +++ b/src/dev/peerat/backend/routes/groups/GroupQuit.java @@ -5,6 +5,7 @@ import static dev.peerat.framework.RequestType.POST; import java.time.LocalDateTime; import java.util.regex.Matcher; +import dev.peerat.backend.Configuration; import dev.peerat.backend.bonus.extract.RouteDoc; import dev.peerat.backend.model.Chapter; import dev.peerat.backend.model.Completion; @@ -26,9 +27,9 @@ public class GroupQuit implements Response{ private final Locker leaderboard; - public GroupQuit(DatabaseRepository repo, @Injection("groupDelay") int groupDelay, @Injection("leaderboard") Locker locker){ + public GroupQuit(DatabaseRepository repo, Configuration config, @Injection("leaderboard") Locker locker){ this.repo = repo; - this.groupDelay = groupDelay; + this.groupDelay = config.getGroupJoinMinutes(); this.leaderboard = locker; }