Compare commits

...

7 commits

13 changed files with 42 additions and 54 deletions

Binary file not shown.

View file

@ -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<>())

View file

@ -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();

View file

@ -41,7 +41,6 @@ public class DynamicLeaderboard extends Leaderboard{
}else{
playersLeaderboard(writer);
}
locker.lock(key);
}
}catch(Exception e){
e.printStackTrace();

View file

@ -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();

View file

@ -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;

View file

@ -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){

View file

@ -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);
}

View file

@ -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);

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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);
}