CreateAccountServlet.java

package it.unisa.c03.myPersonalTrainer.account.control;

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 java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.concurrent.ExecutionException;

import it.unisa.c03.myPersonalTrainer.account.dao.AccountDAO;
import it.unisa.c03.myPersonalTrainer.account.dao.AccountDAOImpl;
import it.unisa.c03.myPersonalTrainer.account.service.AccountService;
import it.unisa.c03.myPersonalTrainer.account.service.AccountServiceImpl;
import it.unisa.c03.myPersonalTrainer.account.bean.Account;
import it.unisa.c03.myPersonalTrainer.subscription.dao.SubscriptionDAO;
import it.unisa.c03.myPersonalTrainer.subscription.dao.SubscriptionDAOImpl;
import it.unisa.c03.myPersonalTrainer.subscription.service.SubscriptionService;
import it.unisa.c03.myPersonalTrainer.subscription.service.SubscriptionServiceImpl;
import org.apache.commons.mail.EmailException;

/**
 * servlet for creating account.
 */
@WebServlet(name = "Registrazione", value = "/CreateAccountServlet")
public class CreateAccountServlet extends HttpServlet {

    /**
     * method do post.
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    protected void doPost(HttpServletRequest request,
                          HttpServletResponse response)
            throws ServletException, IOException {

        String name = request.getParameter("name");
        String surname = request.getParameter("surname");
        String phone = request.getParameter("phone");
        String email = request.getParameter("email");
        String password = request.getParameter("password");
        int role = 0;

        // Password encoding MD5
        String passwordToHash = password;
        String generatedPassword = null;
        try {
            // Create MessageDigest instance for MD5
            MessageDigest md = MessageDigest.getInstance("MD5");
            //Add password bytes to digest
            md.update(passwordToHash.getBytes());
            //Get the hash's bytes
            byte[] bytes = md.digest();
            //This bytes[] has bytes in decimal format;
            //Convert it to hexadecimal format
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < bytes.length; i++) {
                sb.append(Integer.toString((bytes[i] & 0xff)
                        + 0x100, 16).substring(1));
            }
            //Get complete hashed password in hex format
            generatedPassword = sb.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }

        Account utente = new Account(name, surname, phone,
                email, generatedPassword, role);

        AccountDAO accountDao = new AccountDAOImpl();
        AccountService accountService = new AccountServiceImpl(accountDao);

        /*
          controlcredential check if the email is just register.
        */
        boolean controlcredential = false;

        /*
         control check if the information follow the exp.
         */
        boolean control = false;

       /* need to print the message of error
            into the page */
        String errors = "";

        try {
            controlcredential = accountService
                    .checkCredentials(email, password);
            if (controlcredential) {

                control = accountService.registerAccount(utente);

                // subscription registration
                SubscriptionDAO subDao = new SubscriptionDAOImpl();
                SubscriptionService subService =
                        new SubscriptionServiceImpl(subDao);
                subService.createSubscription(utente.getEmail());

                //Notifica di creazione
                accountService.sendEmail(email, password);

            }
        } catch (IllegalArgumentException | ExecutionException
                | InterruptedException | EmailException exception) {
            errors = errors + exception.getMessage();
        }

        if (controlcredential && control) {
            request.getSession().removeAttribute("errorMessage");
            request.getSession().setAttribute("successMessage",
                    "Inserimento riuscito");
            response.sendRedirect("adminDashboard.jsp");
        } else if (controlcredential && !control) {
            request.getSession().removeAttribute("successMessage");
            request.getSession().setAttribute("errorMessage", errors);
            response.sendRedirect("createAccount.jsp");
        } else if (!controlcredential && !control) {
            request.getSession().removeAttribute("successMessage");
            request.getSession().setAttribute("errorMessage", errors);
            response.sendRedirect("createAccount.jsp");
        }
    }

    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }
}