/// <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);
        }
Пример #2
0
        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));
        }
Пример #3
0
        /// <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));
        }
Пример #4
0
        /// <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));
        }