예제 #1
0
        public async Task <UserRegistrationResult> RegisterAsync(UserRegistrationObject registrationData)
        {
            if (await _userRepository.SelectUserAsync(registrationData.Email) != null)
            {
                return(UserRegistrationResult.UserExists);
            }

            if (!CredentialsValidator.IsValidEmail(registrationData.Email))
            {
                return(UserRegistrationResult.BadEmail);
            }

            if (!CredentialsValidator.IsValidPassword(registrationData.Password))
            {
                return(UserRegistrationResult.BadPassword);
            }

            if (!CredentialsValidator.IsValidName(registrationData.Name))
            {
                return(UserRegistrationResult.BadName);
            }

            var salt         = PasswordHashHelper.GenerateSalt();
            var passwordHash = PasswordHashHelper.GenerateHash(registrationData.Password, salt);
            var userObject   = new InsertUserObject
            {
                Email        = registrationData.Email,
                PasswordHash = passwordHash,
                Salt         = salt,
                Name         = registrationData.Name,
                Address      = registrationData.Address,
                PhoneNumber  = registrationData.PhoneNumber,
                IsAdmin      = false,
            };

            return(await _userRepository.InsertUserAsync(userObject)
                ? UserRegistrationResult.Success
                : UserRegistrationResult.DatabaseError);
        }