public async Task When_Pass_Null_Parameter_Then_Exception_Is_Thrown() { // ARRANGE InitializeFakeObjects(); // ACT & ASSERT await Assert.ThrowsAsync <ArgumentNullException>(() => _accountFilter.Check(null)); }
public async Task When_Pass_Null_Parameter_Then_Exception_Is_Thrown() { await Assert.ThrowsAsync <ArgumentNullException>(() => _accountFilter.Check(null, CancellationToken.None)) .ConfigureAwait(false); }
public async Task <string> Execute(AddUserParameter addUserParameter, string issuer = null) { if (addUserParameter == null) { throw new ArgumentNullException(nameof(addUserParameter)); } var subject = await _subjectBuilder.BuildSubject().ConfigureAwait(false); // 1. Check the resource owner already exists. if (await _resourceOwnerRepository.GetAsync(subject) != null) { throw new IdentityServerException(Errors.ErrorCodes.UnhandledExceptionCode, Errors.ErrorDescriptions.TheRoWithCredentialsAlreadyExists); } var newClaims = new List <Claim> { new Claim(Jwt.Constants.StandardResourceOwnerClaimNames.UpdatedAt, DateTime.UtcNow.ToString()), new Claim(Jwt.Constants.StandardResourceOwnerClaimNames.Subject, subject) }; // 2. Populate the claims. var existedClaims = await _claimRepository.GetAllAsync().ConfigureAwait(false); if (addUserParameter.Claims != null) { foreach (var claim in addUserParameter.Claims) { if (!newClaims.Any(nc => nc.Type == claim.Type) && existedClaims.Any(c => c.Code == claim.Type)) { newClaims.Add(claim); } } } var isFilterValid = true; var userFilterResult = await _accountFilter.Check(newClaims).ConfigureAwait(false); if (!userFilterResult.IsValid) { isFilterValid = false; foreach (var ruleResult in userFilterResult.AccountFilterRules) { if (!ruleResult.IsValid) { _openidEventSource.Failure($"the filter rule '{ruleResult.RuleName}' failed"); foreach (var errorMessage in ruleResult.ErrorMessages) { _openidEventSource.Failure(errorMessage); } } } } if (!isFilterValid) { throw new IdentityServerException(Errors.ErrorCodes.InternalError, Errors.ErrorDescriptions.TheUserIsNotAuthorized); } // 3. Add the scim resource. if (_userClaimsEnricherLst != null) { foreach (var userClaimsEnricher in _userClaimsEnricherLst) { await userClaimsEnricher.Enrich(newClaims).ConfigureAwait(false); } } // 4. Add the resource owner. var newResourceOwner = new ResourceOwner { Id = subject, Claims = newClaims, CreateDateTime = DateTime.UtcNow, UpdateDateTime = DateTime.UtcNow, IsBlocked = false }; if (!await _resourceOwnerRepository.InsertAsync(newResourceOwner).ConfigureAwait(false)) { throw new IdentityServerException(Errors.ErrorCodes.UnhandledExceptionCode, Errors.ErrorDescriptions.TheResourceOwnerCannotBeAdded); } // 5. Add credentials. if (addUserParameter.Credentials != null) { foreach (var c in addUserParameter.Credentials) { c.UserId = subject; } await _addUserCredentialsOperation.Execute(addUserParameter.Credentials).ConfigureAwait(false); } // 6. Link to a profile. if (!string.IsNullOrWhiteSpace(issuer)) { await _linkProfileAction.Execute(subject, addUserParameter.ExternalLogin, issuer).ConfigureAwait(false); } _openidEventSource.AddResourceOwner(newResourceOwner.Id); return(subject); }