Exemplo n.º 1
0
        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"));
        }
Exemplo n.º 2
0
        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));
        }