// <editor-fold defaultstate="collapsed" desc="Login OpenID methods. Click on the + sign on the
  // left to edit the code.">
  String checkAuthentication(Authentication auth, String baseUrl, HttpServletRequest request) {

    String valueUrl = "";
    Utente _utente = gestoreUtente.loginOpenID(auth.getEmail());

    if (_utente == null) {
      valueUrl = baseUrl + "/registra?action=openID";
      request.getSession().setAttribute("authentication", auth);
    } else {
      valueUrl = baseUrl + "/home";
      request.getSession().setAttribute("utentefaccioshopping", _utente);
    }

    return valueUrl;
  }
  protected void processRequest(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    String pathUtente = request.getServletPath();
    /** Gestione login OpenID */
    if (pathUtente.equals("/openid")) {
      String baseUrl =
          request.getScheme()
              + "://"
              + request.getServerName()
              + ":"
              + request.getServerPort()
              + "/faccioshopping-war";
      String returnUrl =
          request.getScheme()
              + "://"
              + request.getServerName()
              + ":"
              + request.getServerPort()
              + "/faccioshopping-war/openid";
      String redirectUrl = "";
      manager.setRealm(baseUrl);
      manager.setReturnTo(returnUrl);

      String op = request.getParameter("op");
      String oresponse = request.getParameter("openid.mode");

      if (op == null && !oresponse.equals("cancel")) {
        // check sign on result from Google or Yahoo:
        checkNonce(request.getParameter("openid.response_nonce"));
        // get authentication:
        byte[] mac_key = (byte[]) request.getSession().getAttribute(ATTR_MAC);
        String alias = (String) request.getSession().getAttribute(ATTR_ALIAS);
        Authentication authentication = manager.getAuthentication(request, mac_key, alias);
        redirectUrl = checkAuthentication(authentication, baseUrl, request);
      } else if (op != null && (op.equals("Google") || op.equals("Yahoo"))) {
        // redirect to Google or Yahoo sign on page:
        Endpoint endpoint = manager.lookupEndpoint(op);
        Association association = manager.lookupAssociation(endpoint);
        request.getSession().setAttribute(ATTR_MAC, association.getRawMacKey());
        request.getSession().setAttribute(ATTR_ALIAS, endpoint.getAlias());
        redirectUrl = manager.getAuthenticationUrl(endpoint, association);
      } else if (oresponse.equals("cancel")) {
        request.setAttribute("err", "Processo di autenticazione annullato.");
        request.getRequestDispatcher("/home").forward(request, response);
        return;
      } else {
        throw new ServletException("Unsupported OP: " + op);
      }
      try {
        response.sendRedirect(redirectUrl);
      } catch (Exception ex) {
        Logger.getLogger(this.getClass().getName()).log(Level.WARNING, null, ex);
      }
    } else {
      /** Gestione login dal sito */
      if (pathUtente.equals("/login")) {
        Utente _utente =
            gestoreUtente.login(request.getParameter("email"), request.getParameter("password"));
        String action =
            (request.getParameter("action") != null) ? request.getParameter("action") : "";
        pathUtente = "/view/login";
        if (action.equals("entra")) {
          if (_utente == null) {
            request.setAttribute("err", "Errore nel processo di login.");
          } else {
            request.getSession().setAttribute("utentefaccioshopping", _utente);
            pathUtente = "index";
          }
        }
      } else if (pathUtente.equals("/logout")) {
        HttpSession session = request.getSession();
        if (session != null) {
          session.invalidate();
          pathUtente = "index";
        }
      } else if (pathUtente.equals("/registra")) {
        pathUtente = "/view/registra";
        String action =
            (request.getParameter("action") != null) ? request.getParameter("action") : "";
        if (action.equals("inserisci")) {
          boolean isInterno = (Integer.parseInt(request.getParameter("isInterno")) != 0);
          Utente _nuovoUtente =
              gestoreUtente.registrazione(
                  request.getParameter("lastname"),
                  request.getParameter("firstname"),
                  request.getParameter("email"),
                  request.getParameter("password"),
                  isInterno);
          if (_nuovoUtente != null) {
            request.setAttribute("ok", "Utente registrato con successo.");
            request.getSession().setAttribute("utentefaccioshopping", _nuovoUtente);
            request.getSession().setAttribute("authentication", null);
            pathUtente = "index";
          } else {
            request.setAttribute(
                "err", "Errore durante la registrazione. Email gi&agrave; utilizzato!");
            pathUtente = "/view/registra";
          }
        } else if (action.equals("openID")) {
          request.setAttribute("ok", "Utente riconosciuto! Controlla i dati e conferma.");
          pathUtente = "/view/registra";
        }
      } else if (pathUtente.equals("/modifica")) {
        pathUtente = "/view/modificautente";
        String action =
            (request.getParameter("action") != null) ? request.getParameter("action") : "";
        if (action.equals("aggiorna")) {
          Utente _utente = (Utente) request.getSession().getAttribute("utentefaccioshopping");
          Utente _nuovoUtente =
              gestoreUtente.modifica(
                  _utente.getId(),
                  request.getParameter("lastname"),
                  request.getParameter("firstname"),
                  request.getParameter("email"),
                  request.getParameter("opassword"),
                  request.getParameter("npassword"),
                  _utente.getIsInterno());
          if (_nuovoUtente != null) {
            request.getSession().setAttribute("utentefaccioshopping", _nuovoUtente);
            request.setAttribute("ok", "Utente modificato con successo.");
          } else {
            request.setAttribute("err", "Errore durante la modifica dell'utente.");
          }
          pathUtente = "index";
        }
      }
      // use RequestDispatcher to forward request internally
      String url = pathUtente + ".jsp";
      try {
        request.getRequestDispatcher(url).forward(request, response);
      } catch (Exception ex) {
        Logger.getLogger(this.getClass().getName()).log(Level.WARNING, null, ex);
      }
    }
  }