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)); }