Admin route for loggin

This commit is contained in:
jeffcheasey88 2023-09-07 20:17:42 +02:00
parent 03e64abf9c
commit 27a15a7ff0
3 changed files with 58 additions and 14 deletions

View file

@ -30,6 +30,7 @@ import be.jeffcheasey88.peeratcode.routes.PlayerDetails;
import be.jeffcheasey88.peeratcode.routes.PuzzleElement;
import be.jeffcheasey88.peeratcode.routes.PuzzleResponse;
import be.jeffcheasey88.peeratcode.routes.Result;
import be.jeffcheasey88.peeratcode.routes.admins.DynamicLogs;
import be.jeffcheasey88.peeratcode.routes.groups.GroupCreate;
import be.jeffcheasey88.peeratcode.routes.groups.GroupJoin;
import be.jeffcheasey88.peeratcode.routes.groups.GroupList;
@ -53,8 +54,6 @@ public class Main{
router.setDefault((matcher, user, reader, writer) -> {
writer.response(404, "Access-Control-Allow-Origin: *");
writer.write("404 not Found.\n");
writer.flush();
writer.close();
});
router.register(new Response(){
@ -82,6 +81,8 @@ public class Main{
router.register(new ChangePassword(repo));
router.register(new ForgotPassword());
router.register(new DynamicLogs(repo, new Locker<>())); //to change
router.register(new ChapterElement(repo));
router.register(new ChapterList(repo));
router.register(new PuzzleElement(repo));
@ -91,14 +92,12 @@ public class Main{
router.register(new BadgeDetails(repo));
Locker<Group> groupLock = new Locker<>();
router.register(new GroupCreate(repo, groupLock, config.getGroupJoinMinutes()));
DynamicLeaderboard dlb = new DynamicLeaderboard(repo);
router.register(dlb);
Locker<Completion> leaderboard = dlb.getLocker();
Locker<Completion> leaderboard = new Locker<>();
router.register(new DynamicLeaderboard(repo, leaderboard));
router.register(new PuzzleResponse(repo, config.getUsersFiles(), leaderboard));
router.register(new GroupCreate(repo, groupLock, config.getGroupJoinMinutes()));
router.register(new GroupList(repo));
router.register(new GroupJoin(repo, config.getGroupJoinMinutes(), config.getGroupQuitMinutes(), leaderboard));
router.register(new GroupQuit(repo, config.getGroupJoinMinutes(), leaderboard));

View file

@ -16,13 +16,9 @@ public class DynamicLeaderboard extends Leaderboard{
private Locker<Completion> locker;
public DynamicLeaderboard(DatabaseRepository databaseRepo){
public DynamicLeaderboard(DatabaseRepository databaseRepo, Locker<Completion> locker){
super(databaseRepo);
this.locker = new Locker<>();
}
public Locker<Completion> getLocker(){
return this.locker;
this.locker = locker;
}
@RouteDoc(path = "/rleaderboard/{id}", responseCode = 101, responseDescription = "WebSocket")

View file

@ -0,0 +1,49 @@
package be.jeffcheasey88.peeratcode.routes.admins;
import java.util.regex.Matcher;
import org.json.simple.JSONObject;
import be.jeffcheasey88.peeratcode.framework.HttpReader;
import be.jeffcheasey88.peeratcode.framework.HttpWriter;
import be.jeffcheasey88.peeratcode.framework.Locker;
import be.jeffcheasey88.peeratcode.framework.Response;
import be.jeffcheasey88.peeratcode.framework.Route;
import be.jeffcheasey88.peeratcode.framework.User;
import be.jeffcheasey88.peeratcode.framework.Locker.Key;
import be.jeffcheasey88.peeratcode.repository.DatabaseRepository;
public class DynamicLogs implements Response{
private Locker<Object> locker; //Context
private DatabaseRepository repo;
public DynamicLogs(DatabaseRepository repo, Locker<Object> locker){
this.repo = repo;
this.locker = locker;
}
@Route(path = "^/admin/logs$", needLogin = true, websocket = true)
public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception {
//check if admin
Key key = new Key();
locker.init(key);
try {
while(!reader.isClosed()){
Object instance = locker.getValue(key);
JSONObject json = new JSONObject();
writer.write(json.toJSONString());
writer.flush();
locker.lock(key);
}
}catch(Exception e){
e.printStackTrace();
}
locker.remove(key);
}
}