/// <summary>
        /// Change password
        /// </summary>
        /// <param name="request">Request</param>
        /// <returns>Result</returns>
        public virtual ChangePasswordResult ChangePassword(ChangePasswordRequest request) {
            if (request == null)
                throw new ArgumentNullException("request");

            var result = new ChangePasswordResult();
            if (String.IsNullOrWhiteSpace(request.Username)) {
                result.AddError(_localizationService.GetResource("Account.ChangePassword.Errors.EmailIsNotProvided"));
                return result;
            }
            if (String.IsNullOrWhiteSpace(request.NewPassword)) {
                result.AddError(_localizationService.GetResource("Account.ChangePassword.Errors.PasswordIsNotProvided"));
                return result;
            }

            var user = _userService.GetUserByUsername(request.Username);
            if (user == null) {
                result.AddError(_localizationService.GetResource("Account.ChangePassword.Errors.UsernameNotFound"));
                return result;
            }


            var requestIsValid = false;
            if (request.ValidateRequest) {
                //password
                string oldPwd = "";
                switch (user.PasswordFormat) {
                    case PasswordFormat.Encrypted:
                        oldPwd = _encryptionService.EncryptText(request.OldPassword);
                        break;
                    case PasswordFormat.Hashed:
                        oldPwd = _encryptionService.CreatePasswordHash(request.OldPassword, user.PasswordSalt);
                        break;
                    default:
                        oldPwd = request.OldPassword;
                        break;
                }

                bool oldPasswordIsValid = oldPwd == user.Password;
                if (!oldPasswordIsValid)
                    result.AddError(_localizationService.GetResource("Account.ChangePassword.Errors.OldPasswordDoesntMatch"));

                if (oldPasswordIsValid)
                    requestIsValid = true;
            } else
                requestIsValid = true;


            //at this point request is valid
            if (requestIsValid) {
                switch (request.NewPasswordFormat) {
                    case PasswordFormat.Clear:
                        {
                            user.Password = request.NewPassword;
                        }
                        break;
                    case PasswordFormat.Encrypted:
                        {
                            user.Password = _encryptionService.EncryptText(request.NewPassword);
                        }
                        break;
                    case PasswordFormat.Hashed:
                        {
                            string saltKey = _encryptionService.CreateSaltKey(5);
                            user.PasswordSalt = saltKey;
                            user.Password = _encryptionService.CreatePasswordHash(request.NewPassword, saltKey);
                        }
                        break;
                    default:
                        break;
                }
                user.PasswordFormat = request.NewPasswordFormat;
                _userService.UpdateUser(user);

                var userContext = new UserContext { User = user, Cancel = false };
                foreach (var userEventHandler in _userEventHandlers) {
                    userEventHandler.ChangePassword(userContext);
                }
            }

            return result;
        }
Beispiel #2
0
        /// <summary>
        /// Insert a User
        /// </summary>
        /// <param name="user">User</param>
        public virtual void InsertUser(User user) {
            if (user == null)
                throw new ArgumentNullException("User");

            var userContext = new UserContext { User = user, Cancel = false };
            foreach(var userEventHandler in _userEventHandlers) {
                userEventHandler.Creating(userContext);
            }

            _userRepository.Insert(user);


            foreach (var userEventHandler in _userEventHandlers) {
                userEventHandler.Created(userContext);
            }
        }