public ActionResult PasswordDimenticata(UtentePasswordDimenticataViewModel model)
        {
            ViewBag.Title = Language.TitleForgotPassword;
            if (base.ModelState.IsValid)
            {
                model.NuovaPassword = Utils.RandomString(10);
                using (DatabaseContext db = new DatabaseContext())
                {
                    using (DbContextTransaction transaction = db.Database.BeginTransaction())
                    {
                        try
                        {
                            PERSONA_EMAIL utenteEmail = db.PERSONA_EMAIL
                                                        .Where(item => item.EMAIL.Equals(model.Email) &&
                                                               item.TIPO == (int)TipoEmail.Registrazione &&
                                                               item.PERSONA.STATO == (int)Stato.ATTIVO)
                                                        .SingleOrDefault();
                            if (utenteEmail != null)
                            {
                                PBKDF2 crypto = new PBKDF2();
                                //utente.TOKEN_PASSWORD = crypto.GenerateSalt(1, 20);
                                utenteEmail.PERSONA.PASSWORD      = crypto.Compute(model.NuovaPassword, utenteEmail.PERSONA.TOKEN_PASSWORD);
                                utenteEmail.PERSONA.DATA_MODIFICA = DateTime.Now;

                                if (db.SaveChanges() > 0)
                                {
                                    // invio email nuova password
                                    EmailModel email = new EmailModel(ControllerContext);
                                    email.To.Add(new System.Net.Mail.MailAddress(model.Email));
                                    email.Subject   = Email.ForgotPasswordSubject + " - " + WebConfigurationManager.AppSettings["nomeSito"];
                                    email.Body      = "PasswordDimenticata";
                                    email.DatiEmail = model;
                                    email.SendAsync = false;
                                    if (new EmailController().SendEmail(email))
                                    {
                                        transaction.Commit();
                                        base.TempData["salvato"] = true;
                                    }
                                    else
                                    {
                                        transaction.Rollback();
                                        base.ModelState.AddModelError("", Language.ErrorSendForgotPassword);
                                    }
                                }
                                else
                                {
                                    base.ModelState.AddModelError("", Language.ErrorForgotPassword);
                                }
                            }
                            else
                            {
                                base.ModelState.AddModelError("", Language.ErrorForgotPassword);
                            }
                        }
                        catch (Exception exception)
                        {
                            transaction.Rollback();
                            base.ModelState.AddModelError("", exception.Message);
                            Elmah.ErrorSignal.FromCurrentContext().Raise(exception);
                        }
                    }
                }
            }
            return(base.View(model));
        }
        // recupera login di portaleweb
        public ActionResult LoginVeloce(UtenteLoginVeloceViewModel viewModel)
        {
            if (base.ModelState.IsValid)
            {
                using (DatabaseContext db = new DatabaseContext())
                {
                    using (DbContextTransaction transazione = db.Database.BeginTransaction())
                    {
                        try
                        {
                            PBKDF2        crypto = new PBKDF2();
                            PERSONA_EMAIL model  = db.PERSONA_EMAIL.SingleOrDefault(
                                item =>
                                item.EMAIL == viewModel.Email &&
                                item.TIPO == (int)TipoEmail.Registrazione);
                            if (model == null)
                            {
                                if (viewModel.SalvaRegistrazione(ControllerContext, db))
                                {
                                    base.TempData["salvato"] = true;
                                    transazione.Commit();
                                    // recupero nuovamente l'utente
                                    model = db.PERSONA_EMAIL.SingleOrDefault(
                                        item =>
                                        item.EMAIL == viewModel.Email &&
                                        item.TIPO == (int)TipoEmail.Registrazione);
                                    setSessioneUtente(base.Session, db, model.ID_PERSONA, viewModel.RicordaLogin);
                                    // sistemare il return, perchè va in conflitto con il allowonlyanonymous
                                    return(Redirect((string.IsNullOrWhiteSpace(viewModel.ReturnUrl)) ? FormsAuthentication.DefaultUrl : viewModel.ReturnUrl));
                                }
                                else
                                {
                                    transazione.Rollback();
                                    ModelState.AddModelError("Error", Language.EmailNotExist);
                                }
                            }
                            else if (!model.PERSONA.PASSWORD.Equals(crypto.Compute(viewModel.Password, model.PERSONA.TOKEN_PASSWORD)))
                            {
                                ModelState.AddModelError("Error", Language.ErrorPassword);
                            }
                            else
                            {
                                // login effettuata con successo, aggiungo i punti se ha il profilo attivo completamente e se è un nuovo accesso giornaliero
                                if (model.PERSONA.STATO == (int)Stato.ATTIVO && model.STATO == (int)Stato.ATTIVO && (model.PERSONA.DATA_ACCESSO == null || DateTime.Now.DayOfYear > model.PERSONA.DATA_ACCESSO.Value.DayOfYear))
                                {
                                    AddPuntiLogin(db, model.PERSONA);
                                }

                                setSessioneUtente(base.Session, db, model.ID_PERSONA, viewModel.RicordaLogin);
                                // sistemare il return, perchè va in conflitto con il allowonlyanonymous
                                return(Redirect((string.IsNullOrWhiteSpace(viewModel.ReturnUrl)) ? FormsAuthentication.DefaultUrl : viewModel.ReturnUrl));
                            }
                        }
                        catch (Exception exception)
                        {
                            transazione.Rollback();
                            Elmah.ErrorSignal.FromCurrentContext().Raise(exception);
                        }
                    }
                }
            }

            base.ModelState.AddModelError("Errore", Language.ErrorRegister);
            return(View(viewModel));
        }