/// <summary> /// Returns IHashedUser object, with hashed passowrd and salt. /// Takes Salt lenght as int - Default 32. /// </summary> /// <param name="username">Username string</param> /// <param name="password">Password string</param> /// <param name="saltSize">Salt lenght as int - default 32</param> /// <returns></returns> public IHashedUser CreateHashedUser(string username, string password) { // Check if user input is valid. if (username == string.Empty || username == "") { throw new ArgumentNullException("Username"); } if (password == string.Empty || password == "") { throw new ArgumentNullException("Password"); } // Generate secure salt. ISaltGenerator saltGenerator = SaltGeneratorFactory.GetSaltGenerator(); byte[] salt = saltGenerator.GenerateSalt(this._settings.SaltSize); // Create return object. IHashedUser hashedUser = new HashedUser(); hashedUser.Username = username; // Set username from user input. hashedUser.Password = password; hashedUser.Salt = Convert.ToBase64String(salt); // Set SaltByteArray with value generated above. // Instanziate hashing class - Select hashing method. hashedUser = this._hashingMethod.HashUserObject(hashedUser); // Returns hashed user - inlcuding password. return(hashedUser); }
public async Task <SignUpResultDto> SignUpAsync(string name, string credentialTypeCode, string identifier, string secret) { if (string.IsNullOrEmpty(secret)) { return(new SignUpResultDto(success: false, error: SignUpResultError.SecretIsNullOrEmpty)); } if (await _applicationUserRepository.ExistsAsync(anyUser => anyUser.UserName.Equals(name, StringComparison.OrdinalIgnoreCase))) { return(new SignUpResultDto(success: false, error: SignUpResultError.UserNameAlreadyExists)); } if (!await _credentialTypeRepository.ExistsAsync(ct => string.Equals(ct.Code, credentialTypeCode, StringComparison.OrdinalIgnoreCase))) { return(new SignUpResultDto(success: false, error: SignUpResultError.CredentialTypeNotFound)); } ApplicationUser user = new ApplicationUser { UserName = name, UserDetail = new UserDetail { ProfilePictureData = "test" } }; await _applicationUserRepository.CreateAsync(user); CredentialType credentialType = await _credentialTypeRepository.FindSingleByExpressionAsync(ct => string.Equals(ct.Code, credentialTypeCode, StringComparison.OrdinalIgnoreCase)); byte[] salt = _saltGenerator.GenerateSalt(); Credential credential = new Credential { UserId = user.Id, CredentialTypeId = credentialType.Id, Identifier = identifier, Secret = _hasher.Hash(secret, salt), Extra = Convert.ToBase64String(salt) }; await _credentialRepository.CreateAsync(credential); user = await _applicationUserRepository.FindSingleByExpressionAsync(actualUser => actualUser.UserName.Equals(name)); // ApplicationUserDto applicationUserDto = EntityToDtoConverter.Convert <ApplicationUserDto, ApplicationUser>(user); return(new SignUpResultDto(user: applicationUserDto, success: true)); }
/// <inheritdoc cref="IUserService.RegisterAsync(RegisterRequest)"/> public async Task <RegisterResponse> RegisterAsync(RegisterRequest registerRequest) { if (string.IsNullOrEmpty(registerRequest.Password)) { return(new RegisterResponse(registerRequest.Id, message: "Credentials are null or empty.")); } if (await EntityRepository.ExistsAsync(anyUser => anyUser.Username == registerRequest.Username)) { return(new RegisterResponse(registerRequest.Id, message: "Username already exists.")); } if (!await _credentialTypeRepository.ExistsAsync(ct => ct.Code == registerRequest.CredentialTypeCode)) { return(new RegisterResponse(registerRequest.Id, message: "CredentialType not found.")); } User user = new User { Username = registerRequest.Username, TimestampCreated = DateTime.UtcNow }; (bool createdSuccess, _) = await EntityRepository.CreateAsync(user); if (!createdSuccess) { return(new RegisterResponse(registerRequest.Id, "Failed to persist data.")); } CredentialType credentialType = await _credentialTypeRepository.FindSingleOrDefaultAsync(ct => ct.Code == registerRequest.CredentialTypeCode); byte[] salt = _saltGenerator.GenerateSalt(); Credential credential = new Credential { UserId = user.Id, CredentialTypeId = credentialType.Id, Identifier = registerRequest.Username, Secret = _hasher.Hash(registerRequest.Password, salt), Extra = Convert.ToBase64String(salt) }; (bool success, _) = await _credentialRepository.CreateAsync(credential); return(!success ? new RegisterResponse(registerRequest.Id, "Failed to persist data.") : new RegisterResponse(registerRequest.Id, "Registration successful!", true)); }
/// <inheritdoc cref="IUserService.RegisterAsync(RegisterRequest)"/> public async Task <RegisterResponse> RegisterAsync(RegisterRequest registerRequest) { if (string.IsNullOrEmpty(registerRequest.Password)) { return(new RegisterResponse(registerRequest.Id, message: "Credentials are null or empty.")); } if (await _userRepository.ExistsAsync(anyUser => anyUser.Username.Equals(registerRequest.Username, StringComparison.OrdinalIgnoreCase))) { return(new RegisterResponse(registerRequest.Id, message: "Username already exists.")); } if (!await _credentialTypeRepository.ExistsAsync(ct => CredentialTypeCodePredicate(ct, registerRequest.CredentialTypeCode))) { return(new RegisterResponse(registerRequest.Id, message: "CredentialType not found.")); } User user = new User { Username = registerRequest.Username, TimestampCreated = DateTime.UtcNow }; if (!await _userRepository.CreateAsync(user)) { return(new RegisterResponse(registerRequest.Id, "Failed to persist data.")); } CredentialType credentialType = await _credentialTypeRepository.FindSingleOrDefaultAsync(ct => CredentialTypeCodePredicate(ct, registerRequest.CredentialTypeCode)); byte[] salt = _saltGenerator.GenerateSalt(); Credential credential = new Credential { UserId = user.Id, CredentialTypeId = credentialType.Id, Identifier = registerRequest.Username, Secret = _hasher.Hash(registerRequest.Password, salt), Extra = Convert.ToBase64String(salt) }; bool success = await _credentialRepository.CreateAsync(credential); return(new RegisterResponse(registerRequest.Id, success: success)); }