Ejemplo n.º 1
0
        public void ConstructedWithCustomerIdSetupCorrectly()
        {
            var result = new CustomerRegistrationResult(100);

            result.IsSuccessful.Should().BeTrue();
            result.CustomerId.HasValue.Should().BeTrue();
            result.CustomerId.Should().Be(100);
            result.ValidationMessages.Should().NotBeNull();
            result.ValidationMessages.Should().BeEmpty();
        }
Ejemplo n.º 2
0
        public void ConstructedWithValidationMessagesSetupCorrectly()
        {
            var result = new CustomerRegistrationResult(
                new ValidationMessage("FirstName", "Must have a value"),
                new ValidationMessage("Surname", "Must have a value"));

            result.IsSuccessful.Should().BeFalse();
            result.CustomerId.HasValue.Should().BeFalse();
            result.ValidationMessages.Should().NotBeNullOrEmpty();
            result.ValidationMessages.Length.Should().Be(2);

            var messageOne = result.ValidationMessages[0];
            var messageTwo = result.ValidationMessages[1];

            messageOne.Property.Should().Be("FirstName");
            messageOne.Message.Should().Be("Must have a value");

            messageTwo.Property.Should().Be("Surname");
            messageTwo.Message.Should().Be("Must have a value");
        }
        /// <summary>
        /// Register customer
        /// </summary>
        /// <param name="request">Request</param>
        /// <returns>Result</returns>
        public virtual CustomerRegistrationResult RegisterCustomer(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 (request.Customer.IsRegistered())
            //{
            //   // result.AddError("Current customer 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 (_customerSettings.UsernamesEnabled)
            //{
            //    if (string.IsNullOrEmpty(request.Username))
            //    {
            //        result.AddError(_localizationService.GetResource("Account.Register.Errors.UsernameIsNotProvided"));
            //        return result;
            //    }
            //}

            //validate unique user
            if (_customerService.GetCustomerByEmail(request.Email) != null)
            {
                //   result.AddError(_localizationService.GetResource("Account.Register.Errors.EmailAlreadyExists"));
                return(result);
            }
            //if (_customerSettings.UsernamesEnabled)
            //{
            //    if (_customerService.GetCustomerByUsername(request.Username) != null)
            //    {
            //        result.AddError(_localizationService.GetResource("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
            {
                Customer       = request.Customer,
                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(SALT_KEY_SIZE);
                customerPassword.PasswordSalt = saltKey;
                customerPassword.Password     = _encryptionService.CreatePasswordHash(request.Password, saltKey, "");
            }
            break;
            }
            _customerService.InsertCustomerPassword(customerPassword);

            request.Customer.Active = request.IsApproved;

            //add to 'Registered' role
            var registeredRole = _customerService.GetCustomerRoleBySystemName(SystemCustomerRoleNames.Registered);

            if (registeredRole == null)
            {
                throw new Exception("'Registered' role could not be loaded");
            }
            request.Customer.CustomerRoles.Add(registeredRole);
            //remove from 'Guests' role
            var guestRole = request.Customer.CustomerRoles.FirstOrDefault(cr => cr.SystemName == SystemCustomerRoleNames.Guests);

            if (guestRole != null)
            {
                request.Customer.CustomerRoles.Remove(guestRole);
            }



            _customerService.UpdateCustomer(request.Customer);


            return(result);
        }
        public CustomerRegistrationResult RegisterCustomer(CustomerRegistrationRequest request)
        {
            if (request is null)
            {
                throw new System.ArgumentNullException(nameof(request));
            }

            if (request.Customer is null)
            {
                throw new ArgumentException("Can't load current customer");
            }

            var result = new CustomerRegistrationResult();

            if (_customerService.GetCustomerByEmail(request.Email) != null)
            {
                result.AddError("Email already exists");
                return(result);
            }
            if (_customerService.GetCustomerByUsername(request.UserName) != null)
            {
                result.AddError("This user name is already taken");
                return(result);
            }

            request.Customer.UserName = request.UserName;
            request.Customer.Email    = request.Email;

            var customerPassword = new CustomerPassword()
            {
                Customer       = request.Customer,
                PasswordFormat = request.PasswordFormat,
                CreatedOnUtc   = DateTime.Now
            };

            switch (request.PasswordFormat)
            {
            case PasswordFormat.Clear:
                customerPassword.Password = request.Password;
                break;

            case PasswordFormat.Hashed:
                //TODO
                break;

            case PasswordFormat.Encrypted:
                //TODO
                break;

            default:
                customerPassword.Password = request.Password;     //TODO EDIT
                break;
            }

            _customerService.InsertCustomerPassword(customerPassword);

            request.Customer.Active = request.IsAproved;

            //TODO add registered roles
            //...

            _customerService.UpdateCustomer(request.Customer);
            return(result);
        }
        /// <summary>
        /// 验证用户注册信息
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public CustomerRegistrationResult RegisterCustomer(CustomerRegistrationRequest request)
        {
            //_customerService.InsertCustomer(new Customer { IsActive=true,CreatedOn=DateTime.Now,Email="9000@",Deleted=false,LastActivityDate=DateTime.Now,LastLoginDate=DateTime.Now});
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }
            if (request.Customer == null)
            {
                throw new ArgumentException("Can't load current customer");
            }
            var result = new CustomerRegistrationResult();

            if (request.Customer.IsRegistered())
            {
                result.AddErrors("用户已经注册");
                return(result);
            }
            if (String.IsNullOrEmpty(request.Email))
            {
                result.AddErrors("邮箱不能为空");
                return(result);
            }
            if (!CommonHelper.IsValidEmail(request.Email))
            {
                result.AddErrors("邮箱格式不正确");
                return(result);
            }
            if (String.IsNullOrEmpty(request.UserName))
            {
                result.AddErrors("用户名不能为空");
                return(result);
            }
            if (String.IsNullOrWhiteSpace(request.Password))
            {
                result.AddErrors("密码不能为空");
                return(result);
            }
            if (_customerService.GetCustomerByEmail(request.Email) != null)//唯一性验证
            {
                result.AddErrors("该用户已经存在");
                return(result);
            }
            request.Customer.Email          = request.Email;
            request.Customer.UserName       = request.UserName;
            request.Customer.PasswordFormat = request.PasswordFormat;
            switch (request.PasswordFormat)
            {
            case PasswordFormat.Clear:
                request.Customer.Password = request.Password;
                break;

            case PasswordFormat.Encrypted:
                request.Customer.Password = _encryptionService.EncryptText(request.Password);
                break;

            case PasswordFormat.Hashed:
            {
                string saltKey = _encryptionService.CreateSaltKey(5);
                request.Customer.PasswordSalt = saltKey;
                request.Customer.Password     = _encryptionService.CreatePasswordHash(request.Password,
                                                                                      saltKey, _customerSettings.HashedPasswordFormat);
            }
            break;

            default:
                break;
            }
            request.Customer.IsActive = true;
            ///添加“注册”角色
            var registeredRole = _customerService.GetCustomerRoleBySystemName(SystemCustomerRoleNames.Registered);

            if (registeredRole == null)
            {
                throw new SunFrameworkException("'Registered' role could not be loaded");
            }
            request.Customer.CustomerRoles.Add(registeredRole);
            ///移除客户角色
            var guestRole = request.Customer.CustomerRoles.FirstOrDefault(cr => cr.SystemName == SystemCustomerRoleNames.Guests);

            if (guestRole != null)
            {
                request.Customer.CustomerRoles.Remove(guestRole);
            }
            _customerService.UpdateCustomer(request.Customer);
            return(result);
        }
        public override CustomerRegistrationResult RegisterCustomer(CustomerRegistrationRequest request)
        {
            string errCode;
            CustomerRegistrationResult result = null;
            var results = new CustomerRegistrationResult();

            if (IsValidPassword(request.Password, out errCode))
            {
                result = base.RegisterCustomer(request);
            }
            else
            {
                switch (errCode.ToUpper())
                {
                case "ERROR_PASSWORD_NO_LETTER":
                case "ERROR_PASSWORD_NO_NUMBER":
                case "ERROR_PASSWORD_LENGTH":
                    results.AddError("Passwords must contain at least 1 letter, 1 number, and be at least 8 characters long.");
                    break;

                default:
                    break;
                }
                return(results);
            }

            try
            {
                var miscPlugins = _pluginFinder.GetPlugins <MyLoginServicePlugin>(storeId: _storeContext.CurrentStore.Id).ToList();
                if (miscPlugins.Count > 0)
                {
                    if (result.Errors.Count < 1)
                    {
                        WebClient client = new WebClient();
                        client.Headers.Add("Content-Type", "application/json");
                        client.Credentials = new NetworkCredential(_gbsLoginSettings.GBSCustomerWebServiceUserName, _gbsLoginSettings.GBSCustomerWebServicePassword);

                        UserModel model = new UserModel();
                        model.currentEmailAddress = request.Email;
                        model.emailAddress        = request.Email;
                        model.currentPassword     = request.Password;
                        model.password            = request.Password;
                        model.updateEmail         = false;
                        model.updatePassword      = false;

                        string loginJSON      = JsonConvert.SerializeObject(model, Formatting.Indented);
                        string responseString = client.UploadString(_gbsLoginSettings.GBSRegisterWebService, loginJSON);
                        if (responseString.ToUpper() != "SUCCESS")
                        {
                            _logger.Error("RegisterCustomer() Override", new Exception(responseString), null);
                        }
                        switch (responseString.ToUpper())
                        {
                        case "ERROR_PASSWORD_NO_LETTER":
                        case "ERROR_PASSWORD_NO_NUMBER":
                        case "ERROR_PASSWORD_LENGTH":
                            result.AddError("Passwords must contain at least 1 letter, 1 number, and be at least 8 characters long.");
                            break;

                        default:
                            break;
                        }
                        return(result);
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.Error("RegisterCustomer() Override", ex, null);
            }

            return(result);
        }
        public override Nop.Services.Customers.CustomerRegistrationResult RegisterCustomer(Nop.Services.Customers.CustomerRegistrationRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("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 (request.Customer.IsRegistered())
            {
                result.AddError("Current customer is already registered");
                return(result);
            }

            if (String.IsNullOrWhiteSpace(request.Password))
            {
                result.AddError(_localizationService.GetResource("Account.Register.Errors.PasswordIsNotProvided"));
                return(result);
            }

            if (String.IsNullOrEmpty(request.Username))
            {
                result.AddError(_localizationService.GetResource("Account.Register.Errors.UsernameIsNotProvided"));
                return(result);
            }

            //validate unique user
            if (_customerService.GetCustomerByEmail(request.Email) != null)
            {
                result.AddError(_localizationService.GetResource("Account.Register.Errors.EmailAlreadyExists"));
                return(result);
            }

            if (_customerService.GetCustomerByUsername(request.Username) != null)
            {
                result.AddError(_localizationService.GetResource("Account.Register.Errors.UsernameAlreadyExists"));
                return(result);
            }

            //at this point request is valid
            request.Customer.Username       = request.Username;
            request.Customer.Email          = request.Email;
            request.Customer.PasswordFormat = request.PasswordFormat;

            switch (request.PasswordFormat)
            {
            case PasswordFormat.Clear: {
                request.Customer.Password = request.Password;
            }
            break;

            case PasswordFormat.Encrypted: {
                request.Customer.Password = _encryptionService.EncryptText(request.Password);
            }
            break;

            case PasswordFormat.Hashed: {
                string saltKey = _encryptionService.CreateSaltKey(5);
                request.Customer.PasswordSalt = saltKey;
                request.Customer.Password     = _encryptionService.CreatePasswordHash(request.Password, saltKey, _customerSettings.HashedPasswordFormat);
            }
            break;

            default:
                break;
            }

            request.Customer.Active = request.IsApproved;

            //add to 'Registered' role
            var registeredRole = _customerService.GetCustomerRoleBySystemName(SystemCustomerRoleNames.Registered);

            if (registeredRole == null)
            {
                throw new NopException("'Registered' role could not be loaded");
            }
            request.Customer.CustomerRoles.Add(registeredRole);
            //remove from 'Guests' role
            var guestRole = request.Customer.CustomerRoles.FirstOrDefault(cr => cr.SystemName == SystemCustomerRoleNames.Guests);

            if (guestRole != null)
            {
                request.Customer.CustomerRoles.Remove(guestRole);
            }

            //Add reward points for customer registration (if enabled)
            if (_rewardPointsSettings.Enabled &&
                _rewardPointsSettings.PointsForRegistration > 0)
            {
                //TOOD FIXME

                /*
                 * request.Customer.AddRewardPointsHistoryEntry(_rewardPointsSettings.PointsForRegistration, _localizationService.GetResource("RewardPoints.Message.EarnedForRegistration"));
                 */
            }

            _customerService.UpdateCustomer(request.Customer);
            return(result);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Register customer
        /// </summary>
        /// <param name="request">Request</param>
        /// <returns>Result</returns>
        public virtual CustomerRegistrationResult RegisterCustomer(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 (request.Customer.IsRegistered())
            {
                result.AddError("Current customer is already registered");
                return(result);
            }
            if (string.IsNullOrEmpty(request.Email))
            {
                result.AddError("Email地址不能为空");
                return(result);
            }
            if (!CommonHelper.IsValidEmail(request.Email))
            {
                result.AddError("无效的Email地址");
                return(result);
            }
            if (string.IsNullOrWhiteSpace(request.Password))
            {
                result.AddError("密码不能为空");
                return(result);
            }

            if (string.IsNullOrEmpty(request.Username))
            {
                result.AddError("用户名不能为空");
                return(result);
            }


            //validate unique user
            if (_customerService.GetCustomerByEmail(request.Email) != null)
            {
                result.AddError("Email地址已经存在");
                return(result);
            }

            if (_customerService.GetCustomerByUsername(request.Username) != null)
            {
                result.AddError("用户名已经存在");
                return(result);
            }

            if (_customerService.GetCustomerByPhoneNumber(request.PhoneNumber) != null)
            {
                result.AddError("手机号码已经存在");
                return(result);
            }


            //at this point request is valid
            request.Customer.Username = request.Username;
            request.Customer.Email    = request.Email;

            var customerPassword = new CustomerPassword
            {
                Customer       = request.Customer,
                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(SALT_KEY_SIZE);
                customerPassword.PasswordSalt = saltKey;
                customerPassword.Password     = _encryptionService.CreatePasswordHash(request.Password, saltKey, _customerSettings.HashedPasswordFormat);
            }
            break;
            }
            _customerService.InsertCustomerPassword(customerPassword);

            request.Customer.Active = request.IsApproved;

            //add to 'Registered' role
            var registeredRole = _customerService.GetCustomerRoleBySystemName(SystemCustomerRoleNames.Registered);

            if (registeredRole == null)
            {
                throw new GameException("'Registered' role could not be loaded");
            }
            request.Customer.CustomerCustomerRoleMapping.Add(new CustomerCustomerRoleMapping(request.Customer.Id, registeredRole.Id));
            //remove from 'Guests' role
            var guestRole = request.Customer.CustomerCustomerRoleMapping.FirstOrDefault(cr => cr.CustomerRole.SystemName == SystemCustomerRoleNames.Guests);

            if (guestRole != null)
            {
                request.Customer.CustomerCustomerRoleMapping.Remove(guestRole);
            }

            _customerService.UpdateCustomer(request.Customer);

            //publish event
            _eventPublisher.Publish(new CustomerPasswordChangedEvent(customerPassword));

            return(result);
        }
Ejemplo n.º 9
0
        public virtual CustomerRegistrationResult RegisterCustomer(CustomerRegistrationRequest request)
        {
            if (request == null) throw new ArgumentNullException("request");
            if (request.Customer == null) throw new ArgumentException("request.Customer must not null");

            var result = new CustomerRegistrationResult();
            if (request.Customer.IsSearchEngineAccount())
            {
                result.AddError(_localizationService.GetResource("Account.Register.Errors.SearchEngineCantRegister", false));
                return result;
            }
            if (request.Customer.IsBackgroundTaskAccount())
            {
                result.AddError(_localizationService.GetResource("Account.Register.Errors.BackgroundTaskCantRegister", false));
                return result;
            }
            if (request.Customer.IsRegistered())
            {
                result.AddError(_localizationService.GetResource("Account.Register.Errors.AlreadyRegistered", false));
                return result;
            }

            if(string.IsNullOrWhiteSpace(request.Email))
                result.AddError(_localizationService.GetResource("Account.Register.Errors.EmailIsNotProvided", false));
            else if (!CommonHelper.IsValidEmail(request.Email))
                result.AddError(_localizationService.GetResource("Common.WrongEmail", false));

            if (string.IsNullOrWhiteSpace(request.Password))
                result.AddError(_localizationService.GetResource("Account.Register.Errors.PasswordIsNotProvided", false));

            if(_customerSettings.UsernamesEnabled && string.IsNullOrWhiteSpace(request.Username))
                result.AddError(_localizationService.GetResource("Account.Register.Errors.UsernameIsNotProvided", false));
            if (!result.Success) return result;

            request.Username = string.IsNullOrWhiteSpace(request.Username) ? null : request.Username.Trim();
            request.Email = request.Email.Trim();

            // kiểm tra trùng tài khoản, mặc định coi tài khoản request.Customer là guest, ko hề có email, username, nên phép kiểm tra này
            // ko hề kiểm tra việc tài khoản lấy đc trùng với request.Customer
            if(_customerService.GetCustomerByEmail(request.Email) != null)
                result.AddError(_localizationService.GetResource("Account.Register.Errors.EmailAlreadyExists", false));
            // khác: luôn đảm bảo là user name duy nhất, như thế sẽ có lợi hơn trong xử lý về sau, nhất là các hệ thống chạy email
            // 1 thời gian dài muốn chuyển qua user name
            if (request.Username != null && _customerService.GetCustomerByUsername(request.Username) != null)
                result.AddError(_localizationService.GetResource("Account.Register.Errors.UsernameAlreadyExists", false));
            if (!result.Success) return result;

            // ok, chuyển request.Customer thành register user. UnActive/Deleted đều ok hết ???
            var customer = request.Customer;
            customer.Username = request.Username;
            customer.Email = request.Email;
            customer.PasswordFormat = request.PasswordFormat;

            SetPasswordValue(customer, request.Password);
            customer.Active = request.IsApproved; // trạng thái kích hoạt ?

            // loại bỏ vai trò Guest
            var guestRole = customer.CustomerRoles.FirstOrDefault(p =>
                SystemCustomerRoleNames.Guests.Equals(p.SystemName, StringComparison.InvariantCulture));
            if (guestRole != null) customer.CustomerRoles.Remove(guestRole);

            // add customer vào vai trò registered
            var registeredRole = _customerService.GetCustomerRoleBySystemName(SystemCustomerRoleNames.Registered);
            if (registeredRole == null) throw new ResearchException("'Registered' role could not be loaded");
            customer.CustomerRoles.Add(registeredRole);

            // add điểm thưởng cho registed customer nếu chức năng này đc bật
            //if(_rewardPointsSettings.Enabled && _rewardPointsSettings.PointsForRegistration > 0)
                //customer.AddRewardPointsHistoryEntry()

            // TODO: thiếu 1 đoạn

            _customerService.UpdateCustomer(customer);
            return result;
        }