public async Task When_ResourceSetId_Doesnt_Exist_Then_Exception_Is_Thrown()
        {
            // ARRANGE
            InitializeFakeObjects();
            const string resourceSetId      = "resource_set_id";
            var          addPolicyParameter = new AddPolicyParameter
            {
                ResourceSetIds = new List <string>
                {
                    resourceSetId
                },
                Scopes = new List <string>
                {
                    "invalid_scope"
                },
                ClientIdsAllowed = new List <string>
                {
                    "client_id"
                }
            };

            _repositoryExceptionHelper.Setup(r => r.HandleException(string.Format(ErrorDescriptions.TheResourceSetCannotBeRetrieved, resourceSetId), It.IsAny <Func <Task <ResourceSet> > >()))
            .Returns(Task.FromResult((ResourceSet)null));

            // ACT & ASSERTS
            var exception = await Assert.ThrowsAsync <BaseUmaException>(() => _addAuthorizationPolicyAction.Execute(addPolicyParameter));

            Assert.NotNull(exception);
            Assert.True(exception.Code == ErrorCodes.InvalidResourceSetId);
            Assert.True(exception.Message == string.Format(ErrorDescriptions.TheResourceSetDoesntExist, resourceSetId));
        }
コード例 #2
0
        public async Task <string> Execute(AddPolicyParameter addPolicyParameter)
        {
            var json = addPolicyParameter == null ? string.Empty : JsonConvert.SerializeObject(addPolicyParameter);

            _umaServerEventSource.StartAddingAuthorizationPolicy(json);
            if (addPolicyParameter == null)
            {
                throw new ArgumentNullException(nameof(addPolicyParameter));
            }

            if (addPolicyParameter.ResourceSetIds == null || !addPolicyParameter.ResourceSetIds.Any())
            {
                throw new BaseUmaException(ErrorCodes.InvalidRequestCode,
                                           string.Format(ErrorDescriptions.TheParameterNeedsToBeSpecified, Constants.AddPolicyParameterNames.ResourceSetIds));
            }

            foreach (var resourceSetId in addPolicyParameter.ResourceSetIds)
            {
                var resourceSet = await _repositoryExceptionHelper.HandleException(
                    string.Format(ErrorDescriptions.TheResourceSetCannotBeRetrieved, resourceSetId),
                    () => _resourceSetRepository.Get(resourceSetId));

                if (resourceSet == null)
                {
                    throw new BaseUmaException(ErrorCodes.InvalidResourceSetId, string.Format(ErrorDescriptions.TheResourceSetDoesntExist, resourceSetId));
                }

                if (addPolicyParameter.Scopes.Any(r => !resourceSet.Scopes.Contains(r)))
                {
                    throw new BaseUmaException(ErrorCodes.InvalidScope, ErrorDescriptions.OneOrMoreScopesDontBelongToAResourceSet);
                }
            }

            // Insert policy
            var policy = new Policy
            {
                Id             = Guid.NewGuid().ToString(),
                ClientIds      = addPolicyParameter.ClientIdsAllowed,
                ResourceSetIds = addPolicyParameter.ResourceSetIds,
                IsResourceOwnerConsentNeeded = addPolicyParameter.IsResourceOwnerConsentNeeded,
                Script = addPolicyParameter.Script,
                Scopes = addPolicyParameter.Scopes,
                Claims = addPolicyParameter.Claims == null ? new List <Claim>() : addPolicyParameter.Claims.Select(c => new Claim
                {
                    Type  = c.Type,
                    Value = c.Value
                }).ToList()
            };

            await _repositoryExceptionHelper.HandleException(ErrorDescriptions.ThePolicyCannotBeInserted, () => _policyRepository.Add(policy));

            _umaServerEventSource.FinishToAddAuthorizationPolicy(JsonConvert.SerializeObject(policy));
            return(policy.Id);
        }
コード例 #3
0
        public async Task When_Passing_Empty_ResourceSetId_Then_Exception_Is_Thrown()
        {
            // ARRANGE
            InitializeFakeObjects();
            var addPolicyParameter = new AddPolicyParameter();

            // ACT & ASSERTS
            var exception = await Assert.ThrowsAsync <BaseUmaException>(() => _addAuthorizationPolicyAction.Execute(addPolicyParameter));

            Assert.NotNull(exception);
            Assert.True(exception.Code == ErrorCodes.InvalidRequestCode);
            Assert.True(exception.Message == string.Format(ErrorDescriptions.TheParameterNeedsToBeSpecified, Constants.AddPolicyParameterNames.ResourceSetIds));
        }
コード例 #4
0
        public async Task When_Adding_AuthorizationPolicy_Then_Id_Is_Returned()
        {
            // ARRANGE
            InitializeFakeObjects();
            const string resourceSetId      = "resource_set_id";
            var          addPolicyParameter = new AddPolicyParameter
            {
                ResourceSetIds = new List <string>
                {
                    resourceSetId
                },
                Rules = new List <AddPolicyRuleParameter>
                {
                    new AddPolicyRuleParameter
                    {
                        Scopes = new List <string>
                        {
                            "scope"
                        },
                        ClientIdsAllowed = new List <string>
                        {
                            "client_id"
                        },
                        Claims = new List <AddClaimParameter>
                        {
                            new AddClaimParameter
                            {
                                Type  = "type",
                                Value = "value"
                            }
                        }
                    }
                }
            };
            var resourceSet = new ResourceSet
            {
                Scopes = new List <string>
                {
                    "scope"
                }
            };

            _repositoryExceptionHelper.Setup(r => r.HandleException(string.Format(ErrorDescriptions.TheResourceSetCannotBeRetrieved, resourceSetId), It.IsAny <Func <Task <ResourceSet> > >()))
            .Returns(Task.FromResult(resourceSet));

            // ACT
            var result = await _addAuthorizationPolicyAction.Execute(addPolicyParameter);

            // ASSERTS
            Assert.NotNull(result);
        }
コード例 #5
0
        public async Task When_Passing_No_Rules_Then_Exception_Is_Thrown()
        {
            // ARRANGE
            InitializeFakeObjects();
            const string resourceSetId      = "resource_set_id";
            var          addPolicyParameter = new AddPolicyParameter
            {
                ResourceSetIds = new List <string>
                {
                    resourceSetId
                }
            };

            _repositoryExceptionHelper.Setup(r => r.HandleException(string.Format(ErrorDescriptions.TheResourceSetCannotBeRetrieved, resourceSetId), It.IsAny <Func <Task <ResourceSet> > >()))
            .Returns(Task.FromResult((ResourceSet)null));

            // ACT & ASSERTS
            var exception = await Assert.ThrowsAsync <BaseUmaException>(() => _addAuthorizationPolicyAction.Execute(addPolicyParameter));

            Assert.NotNull(exception);
            Assert.True(exception.Code == ErrorCodes.InvalidRequestCode);
            Assert.True(exception.Message == string.Format(ErrorDescriptions.TheParameterNeedsToBeSpecified, Constants.AddPolicyParameterNames.Rules));
        }
コード例 #6
0
 public Task <string> AddPolicy(AddPolicyParameter addPolicyParameter)
 {
     return(_addAuthorizationPolicyAction.Execute(addPolicyParameter));
 }