View Javadoc
1   package usecase.user;
2   
3   import common.http.error.ForwardOnError;
4   import common.http.interceptor.InterceptableServlet;
5   import usecase.auth.AuthenticationService;
6   import usecase.auth.CurrentUser;
7   
8   import javax.inject.Inject;
9   import javax.servlet.ServletException;
10  import javax.servlet.annotation.WebServlet;
11  import javax.servlet.http.HttpServletRequest;
12  import javax.servlet.http.HttpServletResponse;
13  import java.io.IOException;
14  import java.util.ArrayList;
15  import java.util.Objects;
16  
17  /**
18   * Servlet relativa alla registrazione di un nuovo utente.
19   */
20  @WebServlet("/register")
21  class RegisterServlet extends InterceptableServlet {
22      @Inject private UserService userService;
23      @Inject private CurrentUser currentUser;
24      @Inject private AuthenticationService authenticationService;
25  
26      private static final String REGISTER_PAGE = "/WEB-INF/views/register.jsp";
27  
28      @Override
29      protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
30          if(currentUser.isLoggedIn()){
31              resp.sendRedirect(req.getContextPath());
32              return;
33          }
34          req.getRequestDispatcher(REGISTER_PAGE).forward(req, resp);
35      }
36  
37  
38      @Override
39      @ForwardOnError(REGISTER_PAGE)
40      protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
41          if(currentUser.isLoggedIn()){
42              resp.sendRedirect(req.getContextPath());
43              return;
44          }
45          String email = req.getParameter("mail");
46          String username = req.getParameter("username");
47          String password = req.getParameter("pass");
48          String confirmPassword = req.getParameter("pass2");
49  
50          if(!Objects.equals(password, confirmPassword)){
51              ArrayList<String> errors = new ArrayList<>();
52              errors.add("Le password devono coincidere");
53              req.setAttribute("errors",errors);
54              req.getRequestDispatcher("/WEB-INF/views/register.jsp").forward(req, resp);
55          }else {
56              userService.newUser(email, username, password);
57              authenticationService.authenticate(username,password);
58              resp.sendRedirect(req.getContextPath());
59          }
60      }
61  }