From ecdf99365b4ec69f0b5c235e2c8edfa60b5cf330 Mon Sep 17 00:00:00 2001 From: s_lanfeust Date: Mon, 4 Sep 2023 14:56:48 +0200 Subject: [PATCH] Push mailConfirmation route --- .../backend/routes/MailConfirmation.java | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 src/dev/peerat/backend/routes/MailConfirmation.java diff --git a/src/dev/peerat/backend/routes/MailConfirmation.java b/src/dev/peerat/backend/routes/MailConfirmation.java new file mode 100644 index 0000000..2b8067c --- /dev/null +++ b/src/dev/peerat/backend/routes/MailConfirmation.java @@ -0,0 +1,88 @@ +package dev.peerat.backend.routes; + +import static dev.peerat.framework.RequestType.POST; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Map; +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.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.Router; + +public class MailConfirmation implements Response { + + private DatabaseRepository databaseRepo; + private Router router; + private String usersFilesPath; + private Map playersWaiting; + + public MailConfirmation(DatabaseRepository databaseRepo, Router router, String initUsersFilesPath, + Map playersWaiting) { + this.databaseRepo = databaseRepo; + this.router = router; + usersFilesPath = initUsersFilesPath; + } + + @RouteDoc(path = "/confirmation", responseCode = 200, responseDescription = "L'utilisateur est inscrit") + @RouteDoc(responseCode = 403, responseDescription = "L'utilisateur est connecté") + @RouteDoc(responseCode = 400, responseDescription = "Aucune données fournie / données invalide") + + @Route(path = "^\\/confirmation$", type = POST) + public void exec(Matcher matcher, Context context, HttpReader reader, HttpWriter writer) throws Exception { + if (context.getUser() != null) { + context.response(403); + return; + } + JSONObject informations = reader.readJson(); + String email = (String) informations.get("email"); + String password = (String) informations.get("passwd"); + int code = (int) informations.get("code"); + + if (checkIfValided(code, email)) { + String pseudo = playersWaiting.get(code).getPseudo(); + String firstname = playersWaiting.get(code).getLastname(); + String lastname = playersWaiting.get(code).getLastname(); + String description = playersWaiting.get(code).getDescription(); + String group = null; + String avatar = null; + int id; + if ((id = databaseRepo.register(pseudo, email, password, firstname, lastname, description, group, + avatar)) >= 0) { + context.response(200, "Access-Control-Expose-Headers: Authorization", + "Authorization: Bearer " + this.router.createAuthUser(new PeerAtUser(id))); + createFolderToSaveSourceCode(pseudo); + return; + } else { + context.response(400); + JSONObject error = new JSONObject(); + error.put("username_valid", pseudo); + error.put("email_valid", email); + writer.write(error.toJSONString()); + return; + } + } + + } + + private void createFolderToSaveSourceCode(String pseudo) throws IOException { + + Files.createDirectories(Paths.get(String.format("%s/%s", usersFilesPath, pseudo))); + } + + private boolean checkIfValided(int code, String email) { + return playersWaiting.get(code).getEmail().equals(email); + + } +}