/// <summary> /// Register user /// </summary> /// <param name="request">Request</param> /// <returns>Result</returns> public virtual UserRegistrationResult RegisterUser(UserRegistrationRequest request) { if (request == null) { throw new ArgumentNullException("request"); } if (request.User == null) { throw new ArgumentException("Can't load current user"); } var result = new UserRegistrationResult(); //if (request.User.IsSearchEngineAccount()) //{ // result.AddError("Search engine can't be registered"); // return result; //} //if (request.User.IsBackgroundTaskAccount()) //{ // result.AddError("Background task account can't be registered"); // return result; //} if (request.User.IsRegistered()) { result.AddError("Current user is already registered"); return(result); } if (String.IsNullOrEmpty(request.Email)) { result.AddError(_localizationService.GetResource("Account.Register.Errors.EmailIsNotProvided")); return(result); } if (!CommonHelper.IsValidEmail(request.Email)) { result.AddError(_localizationService.GetResource("Common.WrongEmail")); return(result); } if (String.IsNullOrWhiteSpace(request.Password)) { result.AddError(_localizationService.GetResource("Account.Register.Errors.PasswordIsNotProvided")); return(result); } if (_userSettings.UsernamesEnabled) { if (String.IsNullOrEmpty(request.Username)) { result.AddError(_localizationService.GetResource("Account.Register.Errors.UsernameIsNotProvided")); return(result); } } //validate unique user if (_userService.GetUserByEmail(request.Email) != null) { result.AddError(_localizationService.GetResource("Account.Register.Errors.EmailAlreadyExists")); return(result); } if (_userSettings.UsernamesEnabled) { if (_userService.GetUserByUsername(request.Username) != null) { result.AddError(_localizationService.GetResource("Account.Register.Errors.UsernameAlreadyExists")); return(result); } } //at this point request is valid request.User.Username = request.Username; request.User.Email = request.Email; var userPassword = new UserPassword { User = request.User, PasswordFormat = request.PasswordFormat, CreatedOnUtc = DateTime.UtcNow }; switch (request.PasswordFormat) { case PasswordFormat.Clear: userPassword.Password = request.Password; break; case PasswordFormat.Encrypted: userPassword.Password = _encryptionService.EncryptText(request.Password); break; case PasswordFormat.Hashed: { var saltKey = _encryptionService.CreateSaltKey(5); userPassword.PasswordSalt = saltKey; userPassword.Password = _encryptionService.CreatePasswordHash(request.Password, saltKey, _userSettings.HashedPasswordFormat); } break; } _userService.InsertUserPassword(userPassword); request.User.Active = request.IsApproved; //add to 'Registered' role var registeredRole = _userService.GetUserRoleBySystemName(SystemUserRoleNames.Registered); if (registeredRole == null) { throw new NopException("'Registered' role could not be loaded"); } request.User.UserRoles.Add(registeredRole); //remove from 'Guests' role var guestRole = request.User.UserRoles.FirstOrDefault(cr => cr.SystemName == SystemUserRoleNames.Guests); if (guestRole != null) { request.User.UserRoles.Remove(guestRole); } _userService.UpdateUser(request.User); //publish event _eventPublisher.Publish(new UserPasswordChangedEvent(userPassword)); return(result); }
/// <summary> /// Register user /// </summary> /// <param name="request">Request</param> /// <returns>Result</returns> public virtual UserRegistrationResult RegisterUser(UserRegistrationRequest request) { if (request == null) { throw new ArgumentNullException(nameof(request)); } if (request.User == null) { throw new ArgumentException("Can't load current user"); } var result = new UserRegistrationResult(); if (request.User.IsSearchEngineAccount()) { result.AddError("Search engine can't be registered"); return(result); } if (request.User.IsBackgroundTaskAccount()) { result.AddError("Background task account can't be registered"); return(result); } if (request.User.IsRegistered()) { result.AddError("Current user is already registered"); return(result); } if (string.IsNullOrEmpty(request.Email)) { result.AddError("Email is required."); return(result); } if (!CommonHelper.IsValidEmail(request.Email)) { result.AddError("Wrong email"); return(result); } if (string.IsNullOrWhiteSpace(request.Password)) { result.AddError("Password is not provided"); return(result); } if (_userSettings.UsernamesEnabled) { if (string.IsNullOrEmpty(request.Username)) { result.AddError("Username is required."); return(result); } } //validate unique user if (_userService.GetUserByEmail(request.Email) != null) { result.AddError("The specified email already exists"); return(result); } if (_userSettings.UsernamesEnabled) { if (_userService.GetUserByUsername(request.Username) != null) { result.AddError("The specified username already exists"); return(result); } } //at this point request is valid request.User.Username = request.Username; request.User.Email = request.Email; request.User.Phone = request.Phone; var userPassword = new UserPassword { User = request.User, PasswordFormat = request.PasswordFormat, CreatedOn = DateTime.Now }; switch (request.PasswordFormat) { case PasswordFormat.Clear: userPassword.Password = request.Password; break; case PasswordFormat.Encrypted: userPassword.Password = _encryptionService.EncryptText(request.Password); break; case PasswordFormat.Hashed: { var saltKey = _encryptionService.CreateSaltKey(SALT_KEY_SIZE); userPassword.PasswordSalt = saltKey; userPassword.Password = _encryptionService.CreatePasswordHash(request.Password, saltKey, _userSettings.HashedPasswordFormat); } break; } _userService.InsertUserPassword(userPassword); request.User.Active = request.IsApproved; //add to 'Registered' role var registeredRole = _userService.GetUserRoleBySystemName(SystemUserRoleNames.Registered); if (registeredRole == null) { throw new NopException("'Registered' role could not be loaded"); } //request.User.UserRoles.Add(registeredRole); request.User.UserUserRoleMappings.Add(new UserUserRoleMapping { UserRole = registeredRole }); //remove from 'Guests' role var guestRole = request.User.UserRoles.FirstOrDefault(cr => cr.SystemName == SystemUserRoleNames.Guests); if (guestRole != null) { //request.User.UserRoles.Remove(guestRole); request.User.UserUserRoleMappings .Remove(request.User.UserUserRoleMappings.FirstOrDefault(mapping => mapping.UserRoleId == guestRole.Id)); } _userService.UpdateUser(request.User); return(result); }