Untitled
unknown
plain_text
a month ago
5.7 kB
3
Indexable
Never
public virtual async Task<CustomerRegistrationResult> RegisterCustomerAsync(CustomerRegistrationRequest request) { if (request == null) throw new ArgumentNullException(nameof(request)); if (request.Customer == null) throw new ArgumentException("Can't load current customer"); var result = new CustomerRegistrationResult(); if (request.Customer.IsSearchEngineAccount()) { result.AddError("Search engine can't be registered"); return result; } if (request.Customer.IsBackgroundTaskAccount()) { result.AddError("Background task account can't be registered"); return result; } if (await _customerService.IsRegisteredAsync(request.Customer)) { result.AddError("Current customer is already registered"); return result; } if (string.IsNullOrEmpty(request.Email)) { result.AddError(await _localizationService.GetResourceAsync("Account.Register.Errors.EmailIsNotProvided")); return result; } if (!CommonHelper.IsValidEmail(request.Email)) { result.AddError(await _localizationService.GetResourceAsync("Common.WrongEmail")); return result; } if (string.IsNullOrWhiteSpace(request.Password)) { result.AddError(await _localizationService.GetResourceAsync("Account.Register.Errors.PasswordIsNotProvided")); return result; } if (_customerSettings.UsernamesEnabled && string.IsNullOrEmpty(request.Username)) { result.AddError(await _localizationService.GetResourceAsync("Account.Register.Errors.UsernameIsNotProvided")); return result; } //validate unique user if (await _customerService.GetCustomerByEmailAsync(request.Email) != null) { result.AddError(await _localizationService.GetResourceAsync("Account.Register.Errors.EmailAlreadyExists")); return result; } if (_customerSettings.UsernamesEnabled && await _customerService.GetCustomerByUsernameAsync(request.Username) != null) { result.AddError(await _localizationService.GetResourceAsync("Account.Register.Errors.UsernameAlreadyExists")); return result; } //at this point request is valid request.Customer.Username = request.Username; request.Customer.Email = request.Email; var customerPassword = new CustomerPassword { CustomerId = request.Customer.Id, PasswordFormat = request.PasswordFormat, CreatedOnUtc = DateTime.UtcNow }; switch (request.PasswordFormat) { case PasswordFormat.Clear: customerPassword.Password = request.Password; break; case PasswordFormat.Encrypted: customerPassword.Password = _encryptionService.EncryptText(request.Password); break; case PasswordFormat.Hashed: var saltKey = _encryptionService.CreateSaltKey(NopCustomerServicesDefaults.PasswordSaltKeySize); customerPassword.PasswordSalt = saltKey; customerPassword.Password = _encryptionService.CreatePasswordHash(request.Password, saltKey, _customerSettings.HashedPasswordFormat); break; } await _customerService.InsertCustomerPasswordAsync(customerPassword); request.Customer.Active = request.IsApproved; //add to 'Registered' role var registeredRole = await _customerService.GetCustomerRoleBySystemNameAsync(NopCustomerDefaults.RegisteredRoleName); if (registeredRole == null) throw new NopException("'Registered' role could not be loaded"); await _customerService.AddCustomerRoleMappingAsync(new CustomerCustomerRoleMapping { CustomerId = request.Customer.Id, CustomerRoleId = registeredRole.Id }); //remove from 'Guests' role if (await _customerService.IsGuestAsync(request.Customer)) { var guestRole = await _customerService.GetCustomerRoleBySystemNameAsync(NopCustomerDefaults.GuestsRoleName); await _customerService.RemoveCustomerRoleMappingAsync(request.Customer, guestRole); } //add reward points for customer registration (if enabled) if (_rewardPointsSettings.Enabled && _rewardPointsSettings.PointsForRegistration > 0) { var endDate = _rewardPointsSettings.RegistrationPointsValidity > 0 ? (DateTime?)DateTime.UtcNow.AddDays(_rewardPointsSettings.RegistrationPointsValidity.Value) : null; await _rewardPointService.AddRewardPointsHistoryEntryAsync(request.Customer, _rewardPointsSettings.PointsForRegistration, request.StoreId, await _localizationService.GetResourceAsync("RewardPoints.Message.EarnedForRegistration"), endDate: endDate); } await _customerService.UpdateCustomerAsync(request.Customer); return result; }
Leave a Comment