Compare commits
7 commits
e4cbca8f1c
...
def51bbf25
Author | SHA1 | Date | |
---|---|---|---|
def51bbf25 | |||
de8cba207c | |||
a78723825b | |||
2d03ccbe3e | |||
fbb8514afd | |||
e746d6fe2b | |||
51d6d311fb |
13 changed files with 42 additions and 54 deletions
Binary file not shown.
|
@ -6,13 +6,13 @@ import java.lang.reflect.Method;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.regex.Matcher;
|
||||
|
||||
import dev.peerat.backend.bonus.extract.RouteExtracter;
|
||||
import dev.peerat.backend.model.Group;
|
||||
import dev.peerat.backend.model.PeerAtUser;
|
||||
import dev.peerat.backend.repository.ConnectionManager;
|
||||
import dev.peerat.backend.repository.DatabaseBadgeRepository;
|
||||
import dev.peerat.backend.repository.DatabaseRepository;
|
||||
import dev.peerat.framework.Context;
|
||||
import dev.peerat.framework.DependencyInjector;
|
||||
|
@ -35,8 +35,7 @@ public class Main{
|
|||
private static Router<PeerAtUser> ACCESS_ROUTER;
|
||||
|
||||
public static void main(String[] args) throws Exception{
|
||||
Configuration config = new Configuration("config.txt")
|
||||
.addDefaultValue("users_files", "/tmp/users_files");
|
||||
Configuration config = new Configuration("config.txt").addDefaultValue("users_files", "/tmp/users_files");
|
||||
config.load();
|
||||
|
||||
Class.forName("com.mysql.cj.jdbc.Driver");
|
||||
|
@ -128,7 +127,6 @@ public class Main{
|
|||
locker.init(key);
|
||||
try {
|
||||
while(true){
|
||||
locker.lock(key);
|
||||
Context instance = locker.getValue(key);
|
||||
if(instance == null) continue;
|
||||
System.out.println("["+((instance.isLogged()) ? repo.getPlayerRepository().getPlayer(instance.<PeerAtUser>getUser().getId()).getPseudo() : "?")+"] "+instance.getType()+" "+instance.getPath()+" -> "+instance.getResponseCode());
|
||||
|
@ -142,20 +140,7 @@ public class Main{
|
|||
|
||||
new Thread(new Runnable(){
|
||||
public void run(){
|
||||
Key key = new Key();
|
||||
|
||||
Locker<Throwable> locker = router.getExceptionLogger();
|
||||
|
||||
locker.init(key);
|
||||
try {
|
||||
while(true){
|
||||
locker.lock(key);
|
||||
locker.getValue(key).printStackTrace();
|
||||
}
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
locker.remove(key);
|
||||
router.getExceptionLogger().listen((throwable) -> throwable.printStackTrace(), (exception) -> exception.printStackTrace());
|
||||
}
|
||||
}).start();
|
||||
|
||||
|
@ -164,8 +149,16 @@ public class Main{
|
|||
}
|
||||
|
||||
private static void initRoutes(Router<PeerAtUser> router, DatabaseRepository repo, Configuration config) throws Exception{
|
||||
Predicate<PeerAtUser> isAdmin = (user) -> {
|
||||
try {
|
||||
Group group = repo.getGroupRepository().getPlayerGroup(user.getId(), 1);
|
||||
return group.getName().equalsIgnoreCase("Quarter-Master - Battles PAC x CEI");
|
||||
}catch(Exception ex){}
|
||||
return false;
|
||||
};
|
||||
|
||||
router.registerPackages("dev.peerat.backend.routes",new DependencyInjector()
|
||||
.of(repo, router, config, new RouteExtracter(router), config.getMail())
|
||||
.of(repo, router, config, new RouteExtracter(router), config.getMail(), isAdmin)
|
||||
.of("waitting", new HashMap<>())
|
||||
.of("leaderboard", new Locker<>())
|
||||
.of("groups", new Locker<>())
|
||||
|
|
|
@ -55,7 +55,6 @@ public class Bot extends Thread{
|
|||
}
|
||||
|
||||
while(true){
|
||||
locker.lock(key);
|
||||
Group group = locker.getValue(key);
|
||||
Integer chapter = group.getLinkToChapter();
|
||||
// Integer puzzle = group.getLinkToPuzzle();
|
||||
|
|
|
@ -41,7 +41,6 @@ public class DynamicLeaderboard extends Leaderboard{
|
|||
}else{
|
||||
playersLeaderboard(writer);
|
||||
}
|
||||
locker.lock(key);
|
||||
}
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
|
|
|
@ -1,37 +1,27 @@
|
|||
package dev.peerat.backend.routes;
|
||||
|
||||
import dev.peerat.backend.Configuration;
|
||||
import dev.peerat.backend.model.Group;
|
||||
import dev.peerat.backend.model.PeerAtUser;
|
||||
import dev.peerat.backend.repository.DatabaseGroupRepository;
|
||||
import dev.peerat.backend.repository.DatabaseRepository;
|
||||
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.Route;
|
||||
import dev.peerat.framework.utils.json.JsonMap;
|
||||
|
||||
public class EventSSE{
|
||||
|
||||
private Locker<GroupMessage> locker;
|
||||
private DatabaseGroupRepository repo;
|
||||
private int eventChapter;
|
||||
|
||||
public EventSSE(@Injection("groupMessages") Locker<GroupMessage> locker, DatabaseRepository repo, Configuration config){
|
||||
public EventSSE(@Injection("groupMessages") Locker<GroupMessage> locker){
|
||||
this.locker = locker;
|
||||
this.repo = repo.getGroupRepository();
|
||||
this.eventChapter = config.getEventChapter();
|
||||
}
|
||||
|
||||
@Route(path = "^/group/event/$", needLogin = true)
|
||||
public void connect(Context context, HttpWriter writer) throws Exception {
|
||||
Group group = repo.getPlayerGroup(context.<PeerAtUser>getUser().getId(), this.eventChapter);
|
||||
if(group == null){
|
||||
context.response(401);
|
||||
return;
|
||||
}
|
||||
context.response(200, "Content-Type: text/event-stream");
|
||||
@Route(path = "^/group/event/$", websocket = true)
|
||||
public void connect(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception {
|
||||
String group = reader.<JsonMap>readJson().get("group");
|
||||
|
||||
Key key = new Key();
|
||||
|
||||
|
@ -39,11 +29,12 @@ public class EventSSE{
|
|||
try {
|
||||
while(true){
|
||||
GroupMessage message = locker.getValue(key);
|
||||
if(message.getGroup() == null || message.getGroup().equals(group.getName())){
|
||||
writer.write("data: "+message.getMessage()+"\n\n");
|
||||
if(message.getGroup() == null || message.getGroup().equals(group)){
|
||||
JsonMap send = new JsonMap();
|
||||
send.set("message", message.getMessage());
|
||||
writer.write(send.toString()+"\n");
|
||||
writer.flush();
|
||||
}
|
||||
locker.lock(key);
|
||||
}
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package dev.peerat.backend.routes;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.regex.Matcher;
|
||||
|
||||
import dev.peerat.backend.bonus.extract.RouteDoc;
|
||||
|
@ -19,9 +20,11 @@ import dev.peerat.framework.utils.json.JsonMap;
|
|||
public class PuzzleElement implements Response {
|
||||
|
||||
private final DatabaseRepository databaseRepo;
|
||||
private Predicate<PeerAtUser> isAdmin;
|
||||
|
||||
public PuzzleElement(DatabaseRepository databaseRepo) {
|
||||
public PuzzleElement(DatabaseRepository databaseRepo, Predicate<PeerAtUser> isAdmin){
|
||||
this.databaseRepo = databaseRepo;
|
||||
this.isAdmin = isAdmin;
|
||||
}
|
||||
|
||||
@RouteDoc(path = "/puzzle/<id>", responseCode = 200, responseDescription = "JSON contenant les informations du puzzle")
|
||||
|
@ -33,7 +36,7 @@ public class PuzzleElement implements Response {
|
|||
Puzzle puzzle = databaseRepo.getPuzzleRepository().getPuzzle(extractId(matcher));
|
||||
if (puzzle != null){
|
||||
Chapter chapter = this.databaseRepo.getChapterRepository().getChapter(puzzle);
|
||||
if(chapter.getStartDate() != null){
|
||||
if(chapter.getStartDate() != null && !isAdmin.test(context.getUser())){
|
||||
if(LocalDateTime.now().isBefore(chapter.getStartDate().toLocalDateTime())){
|
||||
context.response(423);
|
||||
return;
|
||||
|
|
|
@ -9,6 +9,7 @@ import java.nio.file.Paths;
|
|||
import java.time.LocalDateTime;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.regex.Matcher;
|
||||
|
||||
import dev.peerat.backend.Configuration;
|
||||
|
@ -34,11 +35,13 @@ public class PuzzleResponse implements Response {
|
|||
private final String usersFilesPath;
|
||||
|
||||
private final Locker<Completion> leaderboard;
|
||||
private Predicate<PeerAtUser> isAdmin;
|
||||
|
||||
public PuzzleResponse(DatabaseRepository databaseRepo, Configuration config, @Injection("leaderboard") Locker<Completion> locker){
|
||||
public PuzzleResponse(DatabaseRepository databaseRepo, Configuration config, @Injection("leaderboard") Locker<Completion> locker, Predicate<PeerAtUser> isAdmin){
|
||||
this.databaseRepo = databaseRepo;
|
||||
usersFilesPath = config.getUsersFiles();
|
||||
this.leaderboard = locker;
|
||||
this.isAdmin = isAdmin;
|
||||
}
|
||||
|
||||
@RouteDoc(path = "/puzzleResponse/<id>", responseCode = 200, responseDescription = "Bonne réponse, json contenant les points + tries")
|
||||
|
@ -74,7 +77,7 @@ public class PuzzleResponse implements Response {
|
|||
context.response(423);
|
||||
return;
|
||||
}
|
||||
if(chapter.getEndDate() != null){
|
||||
if(chapter.getEndDate() != null && !isAdmin.test(context.getUser())){
|
||||
if(LocalDateTime.now().isAfter(chapter.getEndDate().toLocalDateTime())){
|
||||
if(Arrays.equals(currentPuzzle.getSoluce(), received.getResponse())){
|
||||
context.response(200, "Content-Type: application/json");
|
||||
|
@ -112,7 +115,7 @@ public class PuzzleResponse implements Response {
|
|||
writer.write(responseJSON.toString());
|
||||
writer.flush();
|
||||
|
||||
leaderboard.setValue(completion);
|
||||
leaderboard.pushValue(completion);
|
||||
}
|
||||
|
||||
private void saveSourceCode(ReceivedResponse received, Player player){
|
||||
|
|
|
@ -5,6 +5,7 @@ import dev.peerat.framework.Context;
|
|||
import dev.peerat.framework.HttpReader;
|
||||
import dev.peerat.framework.Injection;
|
||||
import dev.peerat.framework.Locker;
|
||||
import dev.peerat.framework.RequestType;
|
||||
import dev.peerat.framework.Route;
|
||||
import dev.peerat.framework.utils.json.JsonMap;
|
||||
|
||||
|
@ -16,7 +17,7 @@ public class GroupController {
|
|||
this.locker = locker;
|
||||
}
|
||||
|
||||
@Route(path = "^/admin/event/$", needLogin = true)
|
||||
@Route(path = "^/admin/event/$", type = RequestType.POST ,needLogin = true)
|
||||
public void send(Context context, HttpReader reader) throws Exception{
|
||||
JsonMap json = reader.readJson();
|
||||
if(!json.has("message")){
|
||||
|
@ -24,7 +25,7 @@ public class GroupController {
|
|||
return;
|
||||
}
|
||||
|
||||
locker.setValue(new GroupMessage(json.get("group"), json.get("message")));
|
||||
locker.pushValue(new GroupMessage(json.get("group"), json.get("message")));
|
||||
context.response(200);
|
||||
}
|
||||
|
||||
|
|
|
@ -63,7 +63,6 @@ public class LogController {
|
|||
locker.init(key);
|
||||
try {
|
||||
while(!reader.isClosed()){
|
||||
locker.lock(key);
|
||||
T instance = locker.getValue(key);
|
||||
JsonMap json = new JsonMap();
|
||||
consumer.accept(json, instance);
|
||||
|
|
|
@ -21,7 +21,7 @@ public class WebHookLeaderboard implements Response{
|
|||
|
||||
@Route(path = "^/admin/webhook/leaderboard/$", needLogin = true)
|
||||
public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception{
|
||||
locker.setValue(new Completion(0, 0));
|
||||
locker.pushValue(new Completion(0, 0));
|
||||
context.response(200);
|
||||
}
|
||||
|
||||
|
|
|
@ -71,7 +71,7 @@ public class GroupCreate extends FormResponse {
|
|||
if (this.repo.insertGroup(newGroup, user)) {
|
||||
context.response(200);
|
||||
|
||||
locker.setValue(newGroup);
|
||||
locker.pushValue(newGroup);
|
||||
} else {
|
||||
context.response(403);
|
||||
}
|
||||
|
|
|
@ -75,7 +75,7 @@ public class GroupJoin implements Response{
|
|||
if (this.groupRepo.insertUserInGroup(group, user)) {
|
||||
context.response(200);
|
||||
|
||||
leaderboard.setValue(new Completion(0, 0, 0, null, 0));
|
||||
leaderboard.pushValue(new Completion(0, 0, 0, null, 0));
|
||||
} else {
|
||||
context.response(403);
|
||||
}
|
||||
|
|
|
@ -67,7 +67,7 @@ public class GroupQuit implements Response{
|
|||
if (this.groupRepo.leaveGroup(group, user)) {
|
||||
context.response(200);
|
||||
|
||||
leaderboard.setValue(new Completion(0, 0, 0, null, 0));
|
||||
leaderboard.pushValue(new Completion(0, 0, 0, null, 0));
|
||||
} else {
|
||||
context.response(403);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue