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); }