public async Task <IActionResult> GenerarNuevaContrasenna(GenerarNuevaContrasenaViewModel model) { if (!ModelState.IsValid) { throw new ExcepcionMuroAgil(ModelState.Values .SelectMany(v => v.Errors) .Select(e => e.ErrorMessage) .First()); } if (model.Contrasenna.Length < 8) { throw new ExcepcionMuroAgil("La contraseña seleccionada debe tener 8 o más caracteres."); } if (!model.Contrasenna.Equals(model.RepContrasenna)) { throw new ExcepcionMuroAgil("Las contraseñas ingresadas no coinciden."); } Usuario usuario = _dbContext.Usuario .SingleOrDefault(u => u.Correo.Equals(model.Correo) && u.TokenRecupContr.Equals(model.TokenRecupContr)); if (usuario == null) { throw new ExcepcionMuroAgil("El correo ingresado no ha solicitado una recuperación de contraseña, o no terminó el proceso en el plazo de 10 minutos."); } usuario.FechaRecupContr = null; usuario.TokenRecupContr = null; var hasher = new PasswordHasher <Usuario>(); usuario.HashContrasenna = hasher.HashPassword(usuario, model.Contrasenna); await _dbContext.SaveChangesAsync(); return(View("NuevaContrasennaGenerada")); }
public async Task <IActionResult> GenerarNuevaContrasenna(string Correo, string TokenRecupContr) { //Se eliminan los token de recuperación para los usuarios fuera del tiempo límite. List <Usuario> usuariosSinRecuperar = _dbContext.Usuario .Where(u => u.TokenRecupContr != null && u.TokenRecupContr.Length > 0 && u.FechaRecupContr != null && u.FechaRecupContr.GetValueOrDefault().AddMinutes(10).CompareTo(DateTime.Now) <= 0) .ToList(); foreach (Usuario usuarioSinRecuperar in usuariosSinRecuperar) { usuarioSinRecuperar.FechaRecupContr = null; usuarioSinRecuperar.TokenRecupContr = null; } await _dbContext.SaveChangesAsync(); Usuario usuario = _dbContext.Usuario .SingleOrDefault(u => u.Correo.Equals(Correo) && u.TokenRecupContr.Equals(TokenRecupContr)); if (usuario == null) { throw new ExcepcionMuroAgil("El correo ingresado no ha solicitado una recuperación de contraseña, o no terminó el proceso en el plazo de 10 minutos."); } GenerarNuevaContrasenaViewModel model = new GenerarNuevaContrasenaViewModel() { Correo = Correo, TokenRecupContr = TokenRecupContr }; return(View("GenerarNuevaContrasenna", model)); }