diff --git a/src/dev/peerat/backend/Main.java b/src/dev/peerat/backend/Main.java index b546df1..dd06d7f 100644 --- a/src/dev/peerat/backend/Main.java +++ b/src/dev/peerat/backend/Main.java @@ -9,7 +9,6 @@ import java.util.regex.Matcher; import dev.peerat.backend.model.Completion; import dev.peerat.backend.model.Group; import dev.peerat.backend.model.PeerAtUser; -import dev.peerat.backend.model.Player; import dev.peerat.backend.repository.DatabaseRepository; import dev.peerat.backend.routes.BadgeDetails; import dev.peerat.backend.routes.ChapterElement; @@ -88,7 +87,7 @@ public class Main{ } private static void initRoutes(Router router, DatabaseRepository repo, Configuration config){ - Map playersWaiting = new HashMap<>(); + Map playersWaiting = new HashMap<>(); router.register(new Register(repo, playersWaiting)); router.register(new MailConfirmation(repo, router, config.getUsersFiles(), config.getGitToken(), playersWaiting)); router.register(new Login(repo, router)); diff --git a/src/dev/peerat/backend/routes/admins/DynamicLogs.java b/src/dev/peerat/backend/routes/admins/DynamicLogs.java index ac74691..00f0bd8 100644 --- a/src/dev/peerat/backend/routes/admins/DynamicLogs.java +++ b/src/dev/peerat/backend/routes/admins/DynamicLogs.java @@ -4,6 +4,7 @@ import java.util.regex.Matcher; import org.json.simple.JSONObject; +import dev.peerat.backend.bonus.extract.RouteDoc; import dev.peerat.backend.model.PeerAtUser; import dev.peerat.backend.repository.DatabaseRepository; import dev.peerat.framework.Context; @@ -23,8 +24,11 @@ public class DynamicLogs implements Response{ this.repo = repo; this.locker = locker; } + + @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) + @Route(path = "^/admin/logs$", websocket = true) public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception { //check if admin @@ -33,6 +37,7 @@ public class DynamicLogs implements Response{ locker.init(key); try { while(!reader.isClosed()){ + locker.lock(key); Context instance = locker.getValue(key); JSONObject json = new JSONObject(); json.put("logged", instance.isLogged()); @@ -43,7 +48,6 @@ public class DynamicLogs implements Response{ writer.write(json.toJSONString()); writer.flush(); - locker.lock(key); } }catch(Exception e){ e.printStackTrace(); diff --git a/src/dev/peerat/backend/routes/users/MailConfirmation.java b/src/dev/peerat/backend/routes/users/MailConfirmation.java index d650495..bd182a9 100644 --- a/src/dev/peerat/backend/routes/users/MailConfirmation.java +++ b/src/dev/peerat/backend/routes/users/MailConfirmation.java @@ -23,7 +23,6 @@ import org.json.simple.JSONObject; import dev.peerat.backend.bonus.extract.RouteDoc; import dev.peerat.backend.model.PeerAtUser; -import dev.peerat.backend.model.Player; import dev.peerat.backend.repository.DatabaseRepository; import dev.peerat.backend.utils.FormResponse; import dev.peerat.framework.Context; @@ -40,14 +39,14 @@ public class MailConfirmation extends FormResponse { private KeyPairGenerator generator; private Encoder encoder; private String gitToken; - private Map playersWaiting; + private Map playersWaiting; public MailConfirmation( DatabaseRepository databaseRepo, Router router, String initUsersFilesPath, String gitToken, - Map playersWaiting){ + Map playersWaiting){ this.databaseRepo = databaseRepo; this.router = router; usersFilesPath = initUsersFilesPath; @@ -72,36 +71,41 @@ public class MailConfirmation extends FormResponse { return; } JSONObject json = json(reader); - if(!areValids("email","code","passwd")){ + if(!areValids("email","code","pseudo","firstname","lastname","passwd")){ context.response(400); return; } String email = (String) json.get("email"); - String password = (String) json.get("passwd"); int code = (int) json.get("code"); + String pseudo = (String) json.get("pseudo"); + String firstname = (String) json.get("firstname"); + String lastname = (String) json.get("lastnae"); + String password = (String) json.get("passwd"); - Player newPlayer = getPlayerFromEmail(email); - if (newPlayer != null && code == playersWaiting.get(newPlayer)){ - playersWaiting.remove(newPlayer); - String pseudo = newPlayer.getPseudo(); - int id; - if ((id = databaseRepo.register(pseudo, email, password, newPlayer.getFirstname(), newPlayer.getLastname(), "", "", "")) >= 0) { + Integer checkCode = playersWaiting.get(email); + if(checkCode == null){ + context.response(400); + return; + } + if(code == checkCode.intValue()){ + playersWaiting.remove(email); + int id = databaseRepo.register(pseudo, email, password, firstname, lastname, "", "", ""); + if(id >= 0){ + createFolderToSaveSourceCode(pseudo); + generateGitKey(email, pseudo, password); context.response(200, "Access-Control-Expose-Headers: Authorization", "Authorization: Bearer " + this.router.createAuthUser(new PeerAtUser(id))); - createFolderToSaveSourceCode(pseudo); - generateGitKey(email, pseudo, password); - return; - } else { + }else{ context.response(400); JSONObject error = new JSONObject(); error.put("username_valid", pseudo); error.put("email_valid", email); writer.write(error.toJSONString()); - return; } + }else{ + context.response(400); } - context.response(400); } private void createFolderToSaveSourceCode(String pseudo) throws IOException { @@ -109,16 +113,6 @@ public class MailConfirmation extends FormResponse { Files.createDirectories(Paths.get(String.format("%s/%s", usersFilesPath, pseudo))); } - private Player getPlayerFromEmail(String email) { - Player toMatch = new Player(email); - for (Player p: playersWaiting.keySet()) { - if (p.equals(toMatch)) { - return p; - } - } - return null; - } - private String generateGitKey(String email, String pseudo, String password) throws Exception{ KeyPair pair = generator.generateKeyPair(); //doit être unique ??? diff --git a/src/dev/peerat/backend/routes/users/Register.java b/src/dev/peerat/backend/routes/users/Register.java index 9aeef35..958ed9b 100644 --- a/src/dev/peerat/backend/routes/users/Register.java +++ b/src/dev/peerat/backend/routes/users/Register.java @@ -9,8 +9,6 @@ import java.util.regex.Matcher; import org.json.simple.JSONObject; import dev.peerat.backend.bonus.extract.RouteDoc; -import dev.peerat.backend.model.PeerAtUser; -import dev.peerat.backend.model.Player; import dev.peerat.backend.repository.DatabaseRepository; import dev.peerat.backend.utils.FormResponse; import dev.peerat.framework.Context; @@ -21,9 +19,9 @@ import dev.peerat.framework.Route; public class Register extends FormResponse { private DatabaseRepository databaseRepo; - private Map playersWaiting; + private Map playersWaiting; - public Register(DatabaseRepository databaseRepo, Map playersWaiting){ + public Register(DatabaseRepository databaseRepo, Map playersWaiting){ this.databaseRepo = databaseRepo; this.playersWaiting = playersWaiting; } @@ -39,32 +37,26 @@ public class Register extends FormResponse { return; } JSONObject json = json(reader); - if(!areValids("pseudo","email","firstname","lastname")){ + if(!areValids("email")){ context.response(400); return; } - String pseudo = (String) json.get("pseudo"); String email = (String) json.get("email"); - String firstname = (String) json.get("firstname"); - String lastname = (String) json.get("lastname"); - boolean pseudoAvailable = databaseRepo.checkPseudoAvailability(pseudo); boolean emailAvailable = databaseRepo.checkEmailAvailability(email); - if(pseudoAvailable && emailAvailable){ - Player player = new Player(pseudo, email, firstname, lastname); - playersWaiting.put(player, codeGenerator()); + if(emailAvailable){ + playersWaiting.put(email, codeGenerator()); context.response(200); }else{ context.response(400); JSONObject error = new JSONObject(); - error.put("username_valid", pseudoAvailable); error.put("email_valid", emailAvailable); writer.write(error.toJSONString()); } } - private int codeGenerator() { + private int codeGenerator(){ int min = 1000; int max = 9999; return new Random().nextInt((max-min)) + min; diff --git a/src/dev/peerat/backend/utils/Mail.java b/src/dev/peerat/backend/utils/Mail.java index b82f03a..0a8a6b9 100644 --- a/src/dev/peerat/backend/utils/Mail.java +++ b/src/dev/peerat/backend/utils/Mail.java @@ -24,7 +24,6 @@ public class Mail { props.put("mail.smtp.starttls.enable", "true"); Authenticator auth = new Authenticator() { - //override the getPasswordAuthentication method protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(initUsername, initPassword); }