95 lines
4.0 KiB
Java
95 lines
4.0 KiB
Java
package com.rjlresaka.servlet;
|
|
|
|
import java.io.IOException;
|
|
|
|
import javax.servlet.ServletException;
|
|
import javax.servlet.annotation.WebServlet;
|
|
import javax.servlet.http.HttpServlet;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
import javax.servlet.http.HttpSession;
|
|
|
|
import com.rjlresaka.dao.UserDAO;
|
|
import com.rjlresaka.model.User;
|
|
import com.rjlresaka.util.PasswordUtil;
|
|
|
|
@WebServlet("/register")
|
|
public class RegisterServlet extends HttpServlet {
|
|
private static final long serialVersionUID = 1L;
|
|
private final UserDAO userDAO = new UserDAO();
|
|
|
|
@Override
|
|
protected void doGet(HttpServletRequest request, HttpServletResponse response)
|
|
throws ServletException, IOException {
|
|
request.getRequestDispatcher("/WEB-INF/views/auth/register.jsp").forward(request, response);
|
|
}
|
|
|
|
@Override
|
|
protected void doPost(HttpServletRequest request, HttpServletResponse response)
|
|
throws ServletException, IOException {
|
|
String fullName = trim(request.getParameter("fullName"));
|
|
String username = trim(request.getParameter("username"));
|
|
String email = trim(request.getParameter("email"));
|
|
String password = request.getParameter("password");
|
|
String confirmPassword = request.getParameter("confirmPassword");
|
|
|
|
if (fullName.isEmpty() || username.isEmpty() || email.isEmpty() || password == null || password.isEmpty()) {
|
|
request.setAttribute("error", "Tous les champs sont obligatoires.");
|
|
request.getRequestDispatcher("/WEB-INF/views/auth/register.jsp").forward(request, response);
|
|
return;
|
|
}
|
|
|
|
if (password.length() < 6) {
|
|
request.setAttribute("error", "Le mot de passe doit contenir au moins 6 caractères.");
|
|
request.getRequestDispatcher("/WEB-INF/views/auth/register.jsp").forward(request, response);
|
|
return;
|
|
}
|
|
|
|
if (!password.equals(confirmPassword)) {
|
|
request.setAttribute("error", "La confirmation du mot de passe ne correspond pas.");
|
|
request.getRequestDispatcher("/WEB-INF/views/auth/register.jsp").forward(request, response);
|
|
return;
|
|
}
|
|
|
|
try {
|
|
if (userDAO.emailExists(email, getServletContext())) {
|
|
request.setAttribute("error", "Cet email existe déjà.");
|
|
request.getRequestDispatcher("/WEB-INF/views/auth/register.jsp").forward(request, response);
|
|
return;
|
|
}
|
|
if (userDAO.usernameExists(username, getServletContext())) {
|
|
request.setAttribute("error", "Ce nom d'utilisateur existe déjà.");
|
|
request.getRequestDispatcher("/WEB-INF/views/auth/register.jsp").forward(request, response);
|
|
return;
|
|
}
|
|
|
|
User user = new User();
|
|
user.setFullName(fullName);
|
|
user.setUsername(username);
|
|
user.setEmail(email.toLowerCase());
|
|
user.setPasswordHash(PasswordUtil.hash(password));
|
|
user.setAvatarColor(pickColor(fullName));
|
|
user.setBio("Nouveau membre RJLResaka");
|
|
userDAO.create(user, getServletContext());
|
|
|
|
HttpSession session = request.getSession();
|
|
session.setAttribute("authUser", user);
|
|
response.sendRedirect(request.getContextPath() + "/app/dashboard");
|
|
} catch (Exception exception) {
|
|
request.setAttribute("error", "Inscription impossible pour le moment.");
|
|
request.setAttribute("debugMessage", exception.getMessage());
|
|
request.getRequestDispatcher("/WEB-INF/views/auth/register.jsp").forward(request, response);
|
|
}
|
|
}
|
|
|
|
private String trim(String value) {
|
|
return value == null ? "" : value.trim();
|
|
}
|
|
|
|
private String pickColor(String seed) {
|
|
String[] colors = { "#0ea5e9", "#2563eb", "#06b6d4", "#14b8a6", "#f97316", "#ec4899" };
|
|
int index = Math.abs(seed.hashCode()) % colors.length;
|
|
return colors[index];
|
|
}
|
|
}
|