package be.jeffcheasey88.peeratcode.routes.users; import static be.jeffcheasey88.peeratcode.framework.RequestType.POST; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.regex.Matcher; import org.json.simple.JSONObject; import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc; import be.jeffcheasey88.peeratcode.framework.HttpReader; import be.jeffcheasey88.peeratcode.framework.HttpWriter; import be.jeffcheasey88.peeratcode.framework.Response; import be.jeffcheasey88.peeratcode.framework.Route; import be.jeffcheasey88.peeratcode.framework.Router; import be.jeffcheasey88.peeratcode.framework.User; import be.jeffcheasey88.peeratcode.repository.DatabaseRepository; import be.jeffcheasey88.peeratcode.utils.FormResponse; public class Register extends FormResponse { private DatabaseRepository databaseRepo; private Router router; private String usersFilesPath; public Register(DatabaseRepository databaseRepo, Router router, String initUsersFilesPath) { this.databaseRepo = databaseRepo; this.router = router; usersFilesPath = initUsersFilesPath; } @RouteDoc(path = "/register", 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 = "^\\/register$", type = POST) public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception{ if (user != null){ writer.response(403, "Access-Control-Allow-Origin: *"); return; } JSONObject json = json(reader); if(!areValids("pseudo","email","passwd","firstname","lastname")){ writer.response(400, "Access-Control-Allow-Origin: *"); return; } String pseudo = (String) json.get("pseudo"); String email = (String) json.get("email"); String password = (String) json.get("passwd"); String firstname = (String) json.get("firstname"); String lastname = (String) json.get("lastname"); String description = (String) json.get("description"); String group = (String) json.get("sgroup"); String avatar = (String) json.get("avatar"); boolean pseudoAvailable = databaseRepo.checkPseudoAvailability(pseudo); boolean emailAvailable = databaseRepo.checkEmailAvailability(email); if(pseudoAvailable && emailAvailable){ int id; if((id = databaseRepo.register(pseudo, email, password, firstname, lastname, description, group, avatar)) >= 0) { writer.response(200, "Access-Control-Allow-Origin: *", "Access-Control-Expose-Headers: Authorization", "Authorization: Bearer " + this.router.createAuthUser(id)); createFolderToSaveSourceCode(pseudo); }else{ writer.response(400, "Access-Control-Allow-Origin: *"); } }else{ writer.response(400, "Access-Control-Allow-Origin: *"); JSONObject error = new JSONObject(); error.put("username_valid", pseudoAvailable); error.put("email_valid", emailAvailable); writer.write(error.toJSONString()); } } private void createFolderToSaveSourceCode(String pseudo) throws IOException { Files.createDirectories(Paths.get(String.format("%s/%s", usersFilesPath, pseudo))); } }