public async Task <Unit> Handle(ChangePasswordUserCommand request, CancellationToken cancellationToken)
        {
            _logger.LogInformation($"Usuario {request.Id} va a cambiar la contraseña");
            var applicationUser = await _userManager.FindByIdAsync(request.Id);

            if (applicationUser is null)
            {
                _logger.LogWarning($"Usuario {request.Id} intenta cambiar contraseña y no existe");
                throw new NotFoundException(nameof(ApplicationUser), nameof(request.Id));
            }

            var validPassword =
                await _passwordValidator.ValidateAsync(_userManager, applicationUser, request.NewPassword);

            if (!validPassword.Succeeded)
            {
                var errorMessage = _localizer["La contraseña no es valida"];
                _logger.LogWarning(errorMessage);
                _validationFailureService.Add("Password", errorMessage);
            }

            applicationUser.PasswordHash =
                _userManager.PasswordHasher.HashPassword(applicationUser, request.NewPassword);

            await _userManager.UpdateAsync(applicationUser);

            _logger.LogInformation($"Usuario {request.Id} contraseña cambiada con éxito");

            return(Unit.Value);
        }
        public async Task <Unit> Handle(ChangeEmailValidateCommand request, CancellationToken cancellationToken)
        {
            _logger.LogInformation($"Se va a validar el cambio de email para el usuario {request.UserId}");
            var user = await _userManager.FindByIdAsync(request.UserId);

            if (user is null)
            {
                _logger.LogWarning($"El usuario {request.UserId} no existe en la base de datos");
                throw new NotFoundException(nameof(UserManager <ApplicationUser>), nameof(request.UserId));
            }

            var identityResult = await _userManager.ChangeEmailAsync(user, request.NewEmail, request.Code);

            if (!identityResult.Succeeded)
            {
                foreach (var error in identityResult.Errors)
                {
                    _logger.LogWarning($"Usuario {request.UserId}, error al validar token: {error.Description}");
                    _validationFailureService.Add(Errors.NonFieldErrors, error.Description);
                }

                _validationFailureService.RaiseException();
            }

            _logger.LogInformation($"El usuario {user.Id} ha validado con éxito el cambio de email");

            return(Unit.Value);
        }
        public async Task <Unit> Handle(ChangePasswordCommand request, CancellationToken cancellationToken)
        {
            _logger.LogInformation($"Usuario {request.Id} va a cambiar el password");
            var user = await _userManager.FindByIdAsync(request.Id);

            if (user is null)
            {
                _logger.LogWarning($"Usuario {request.Id} intenta cambiar contraseña y no existe");
                throw new NotFoundException(nameof(ApplicationUser), nameof(request.Id));
            }

            // Cambiar contraseña.
            var changePasswordResult =
                await _userManager.ChangePasswordAsync(user, request.OldPassword, request.NewPassword);

            if (!changePasswordResult.Succeeded)
            {
                foreach (var error in changePasswordResult.Errors)
                {
                    _logger.LogWarning($"Usuario {request.Id}, error al cambiar contraseña: {error.Description}");
                    _validationFailureService.Add(Errors.NonFieldErrors, error.Description);
                }

                _validationFailureService.RaiseException();
            }

            var changePasswordViewModel = _mapper.Map <ChangePasswordDto>(user);

            changePasswordViewModel.SiteName = _webApiConfig.SiteName;
            await EmailNotifyChangePasswordAsync(changePasswordViewModel);

            _logger.LogInformation($"El usuario {user.Id} ha cambiado contraseña con éxito");

            return(Unit.Value);
        }
        public async Task <Unit> Handle(RecoveryPasswordValidateCommand request, CancellationToken cancellationToken)
        {
            _logger.LogInformation($"Se va a cambiar la contraseña para el usuario {request.UserId}");
            var user = await _userManager.FindByIdAsync(request.UserId);

            if (user is null)
            {
                _logger.LogWarning($"El usuario {request.UserId} no existe en la base de datos");
                throw new NotFoundException(nameof(ApplicationUser), nameof(ApplicationUser.Id));
            }

            var code        = request.Code.Replace(" ", "+");
            var resetResult = await _userManager.ResetPasswordAsync(user, code, request.Password);

            if (!resetResult.Succeeded)
            {
                foreach (var error in resetResult.Errors)
                {
                    _logger.LogWarning(
                        $"Error al validar contraseña. Code: {error.Code}, Description: {error.Description}");
                    _validationFailureService.Add(nameof(error.Code), error.Description);
                }

                _validationFailureService.RaiseExceptionIfExistsErrors();
            }

            _logger.LogInformation($"El usuario {user.Id} ha restablecido la contraseña con éxito");

            return(Unit.Value);
        }
Beispiel #5
0
        private async Task UserValidationAsync(ApplicationUser applicationUser)
        {
            var validUser = await _userValidator.ValidateAsync(_userManager, applicationUser);

            if (!validUser.Succeeded)
            {
                var errorMessage = _localizer["El usuario no es valido"];
                _logger.LogWarning(errorMessage);
                _validationFailureService.Add(nameof(applicationUser.UserName), errorMessage);
            }

            // Comprueba si existe un FirstName y LastName iguales en la base de datos.
            var userExists = _userManager.Users.FirstOrDefault(
                u => u.FirstName == applicationUser.FirstName && u.LastName == applicationUser.LastName);

            if (userExists != null)
            {
                // Si existe, lanza al excepción para no llegar hacer la consulta ya que daria un 500.
                var errorMessage = _localizer["Ya existe un usuario con ese nombre y apellidos"];
                _validationFailureService.AddAndRaiseException(nameof(applicationUser.FirstName), errorMessage);
            }
        }
Beispiel #6
0
        private async Task ValidateDataIfExists(UpdateUserCommand request)
        {
            _logger.LogInformation($"Comprobar si el {nameof(request.UserName)} existe en la base de datos.");
            var user = await _userManager.Users.AnyAsync(u =>
                                                         u.UserName.ToLower() == request.UserName.ToLower() && u.Id != request.Id);

            if (user)
            {
                _validationFailureService.Add(nameof(request.UserName), _localizer["Nombre de usuario ya existe"]);
            }

            _logger.LogInformation(
                $"Comprobar si el {nameof(request.FirstName)} y {nameof(request.LastName)} existe en la base de datos.");

            user = await _userManager.Users.AnyAsync(u => u.FirstName.ToLower() == request.FirstName.ToLower() &&
                                                     u.LastName.ToLower() == request.LastName.ToLower() &&
                                                     u.Id != request.Id);

            if (user)
            {
                var message = _localizer["Ya existe un usuario con ese nombre y apellidos"];
                _validationFailureService.Add(nameof(request.FirstName), message);
                _validationFailureService.Add(nameof(request.LastName), message);
            }

            _logger.LogInformation($"Comprobar si el {nameof(request.Email)} existe en la base de datos.");
            user = await _userManager.Users.AnyAsync(u =>
                                                     u.Email.ToLower() == request.Email.ToLower() && u.Id != request.Id);

            if (user)
            {
                var message = _localizer["El existe un usuario con ese correo electrónico"];
                _validationFailureService.Add(nameof(request.Email), message);
            }

            _validationFailureService.RaiseExceptionIfExistsErrors();
        }