public async Task <IActionResult> RestaurarPassword([FromBody] CambioPasswordDto cambioPasswordDto)
        {
            //1. Buscar el usuario.
            //2. Cambiiar el Password en la tabla usuario.

            var validarId = await cambioPasswordRepository.Find(x => x.Id == cambioPasswordDto.Id && x.Activo, x => x.Usuario);

            if (validarId == null)
            {
                return(BadRequest("No existe el usuario"));
            }

            byte[] passwordHash, passwordSalt;

            Utils.CreatePasswordHash(cambioPasswordDto.NuevoPassword, out passwordHash, out passwordSalt);

            validarId.Usuario.PasswordHash   = passwordHash;
            validarId.Usuario.PasswordSalt   = passwordSalt;
            validarId.Usuario.CambioPassword = true;

            await userRepository.Edit(validarId.Usuario);

            validarId.Activo = false;
            await cambioPasswordRepository.Edit(validarId);

            //false activo en tabla cambiopassword

            return(Ok());
        }
Beispiel #2
0
        public async Task <IActionResult> CambiarPassword(CambioPasswordDto nuevoLogin)
        {
            ApiResponse <string> response = new ApiResponse <string>();
            Login login = new();

            login.Usuario  = nuevoLogin.Usuario;
            login.Password = nuevoLogin.Password;

            Seguridad user = await _seguridadService.GetLoginByCredentials(login).ConfigureAwait(false);

            bool isValid = _passwordService.Check(user.Password, login.Password);

            if (!isValid)
            {
                response.Succeeded = false;
                response.Message   = "Contraseña actual no coincide";
            }
            else
            {
                user.Password = _passwordService.Hash(nuevoLogin.NuevoPassword);
                _unitOfWork.SeguridadRepository.Update(user);
                await _unitOfWork.SaveChangesAsync().ConfigureAwait(false);

                response.Succeeded = true;
                response.Message   = "Contraseña actualizada";
            }
            return(Ok(response));
        }
        public async Task <bool> ExpiracionId([FromBody] CambioPasswordDto cambioPasswordDto)
        {
            //1. Buscar el usuario.
            //2. Validar Id expiración.

            var validarId = await cambioPasswordRepository.Find(x => x.Id == cambioPasswordDto.Id && x.Activo, x => x.Usuario);

            if (validarId == null)
            {
                return(false);
            }

            TimeSpan span = DateTime.Now - validarId.FechaCreacion;

            if (validarId.MinutosExpiracion < span.TotalMinutes)
            {
                // Activo = false.
                validarId.Activo = false;
                await cambioPasswordRepository.Edit(validarId);

                //Enviar nuevo correo.
                SendEmailUtils.SendEmail(validarId.Usuario.Correo, $"({validarId.Usuario.Nombres} {validarId.Usuario.Apellidos})", validarId.Id.ToString());
                return(false);
            }


            return(true);
        }