public bool AreValidUserCrendentials(string userName, string password)
        {
            var user           = _userService.GetUserByUserName(userName);
            var hashedPassword = _passwordService.CalculateHashedPassword(password, user.Salt);

            return(user.Password == hashedPassword);
        }
        public User ChangeUserPassword(User user, string newPassword)
        {
            if (_userPasswordHistoryService.IsPasswordUsedBefore(user.Id, newPassword))
            {
                throw new PasswordUsedBeforeException("The password cannot same as previous 5 passwords");
            }

            user.Salt                 = Guid.NewGuid().ToString();
            user.Password             = _passwordService.CalculateHashedPassword(newPassword, user.Salt);
            user.PasswordCreationTime = DateTime.Now;

            return(_userRepository.UpdateUser(user));
        }
        public bool IsPasswordUsedBefore(Guid userId, string password)
        {
            var passwordHistoryList = _userPasswordHistoryRepository.GetUserPreviousPasswordList(userId);

            foreach (var passwordHistory in passwordHistoryList)
            {
                if (_passwordService.CalculateHashedPassword(password, passwordHistory.Salt) ==
                    passwordHistory.Password)
                {
                    return(true);
                }
            }

            return(false);
        }