コード例 #1
0
        /// <summary>
        /// Replaces Resource attributes with data from instance. Add all relevant values so PDP have it all
        /// </summary>
        /// <param name="jsonRequest">The JSON Request</param>
        /// <param name="instance">The instance</param>
        public static void EnrichXacmlJsonRequest(XacmlJsonRequestRoot jsonRequest, Instance instance)
        {
            XacmlJsonCategory resourceCategory = new XacmlJsonCategory {
                Attribute = new List <XacmlJsonAttribute>()
            };

            string instanceId           = instance.Id;
            string task                 = instance.Process?.CurrentTask?.ElementId;
            string instanceOwnerPartyId = instance.InstanceOwner.PartyId;
            string org = instance.Org;
            string app = instance.AppId.Split("/")[1];

            if (task != null)
            {
                resourceCategory.Attribute.Add(DecisionHelper.CreateXacmlJsonAttribute(XacmlResourceTaskId, task, DefaultType, DefaultIssuer));
            }
            else if (instance.Process?.EndEvent != null)
            {
                resourceCategory.Attribute.Add(DecisionHelper.CreateXacmlJsonAttribute(XacmlResourceEndId, instance.Process.EndEvent, DefaultType, DefaultIssuer));
            }

            if (!string.IsNullOrWhiteSpace(instanceId))
            {
                resourceCategory.Attribute.Add(DecisionHelper.CreateXacmlJsonAttribute(AltinnXacmlUrns.InstanceId, instanceId, DefaultType, DefaultIssuer, true));
            }

            resourceCategory.Attribute.Add(DecisionHelper.CreateXacmlJsonAttribute(AltinnXacmlUrns.PartyId, instanceOwnerPartyId, DefaultType, DefaultIssuer));
            resourceCategory.Attribute.Add(DecisionHelper.CreateXacmlJsonAttribute(AltinnXacmlUrns.OrgId, org, DefaultType, DefaultIssuer));
            resourceCategory.Attribute.Add(DecisionHelper.CreateXacmlJsonAttribute(AltinnXacmlUrns.AppId, app, DefaultType, DefaultIssuer));

            // Replaces the current Resource attributes
            jsonRequest.Request.Resource = new List <XacmlJsonCategory> {
                resourceCategory
            };
        }
コード例 #2
0
        private static XacmlJsonCategory CreateResourceCategory(string org, string app, string instanceOwnerPartyId, string instanceGuid, bool includeResult = false)
        {
            XacmlJsonCategory resourceCategory = new XacmlJsonCategory();

            resourceCategory.Attribute = new List <XacmlJsonAttribute>();

            if (!string.IsNullOrWhiteSpace(instanceOwnerPartyId))
            {
                resourceCategory.Attribute.Add(CreateXacmlJsonAttribute(AltinnXacmlUrns.PartyId, instanceOwnerPartyId, DefaultType, DefaultIssuer, includeResult));
            }

            if (!string.IsNullOrWhiteSpace(instanceGuid) && !string.IsNullOrWhiteSpace(instanceOwnerPartyId))
            {
                resourceCategory.Attribute.Add(CreateXacmlJsonAttribute(AltinnXacmlUrns.InstanceId, instanceOwnerPartyId + "/" + instanceGuid, DefaultType, DefaultIssuer, includeResult));
            }

            if (!string.IsNullOrWhiteSpace(org))
            {
                resourceCategory.Attribute.Add(CreateXacmlJsonAttribute(AltinnXacmlUrns.OrgId, org, DefaultType, DefaultIssuer));
            }

            if (!string.IsNullOrWhiteSpace(app))
            {
                resourceCategory.Attribute.Add(CreateXacmlJsonAttribute(AltinnXacmlUrns.AppId, app, DefaultType, DefaultIssuer));
            }

            return(resourceCategory);
        }
コード例 #3
0
 private static void AssertEqual(XacmlJsonCategory expected, XacmlJsonCategory actual)
 {
     Assert.Equal(expected.CategoryId, actual.CategoryId);
     Assert.Equal(expected.Content, actual.Content);
     Assert.Equal(expected.Id, actual.Id);
     AssertEqual(expected.Attribute, actual.Attribute);
 }
コード例 #4
0
        public static XacmlJsonCategory CreateSubjectCategory(IEnumerable <Claim> claims)
        {
            XacmlJsonCategory subjectAttributes = new XacmlJsonCategory();

            subjectAttributes.Attribute = CreateSubjectAttributes(claims);

            return(subjectAttributes);
        }
コード例 #5
0
        public static XacmlJsonCategory CreateActionCategory(string actionType, bool includeResult = false)
        {
            XacmlJsonCategory actionAttributes = new XacmlJsonCategory();

            actionAttributes.Attribute = new List <XacmlJsonAttribute>();
            actionAttributes.Attribute.Add(CreateXacmlJsonAttribute(MatchAttributeIdentifiers.ActionId, actionType, DefaultType, DefaultIssuer, includeResult));
            return(actionAttributes);
        }
コード例 #6
0
        private static XacmlJsonCategory CreateMultipleSubjectCategory(IEnumerable <Claim> claims)
        {
            XacmlJsonCategory subjectAttributes = DecisionHelper.CreateSubjectCategory(claims);

            subjectAttributes.Id = SubjectId + "1";

            return(subjectAttributes);
        }
コード例 #7
0
        private static XacmlJsonCategory CreateActionCategory(string actionType)
        {
            XacmlJsonCategory actionAttributes = new XacmlJsonCategory();

            actionAttributes.Attribute = new List <XacmlJsonAttribute>();
            actionAttributes.Attribute.Add(CreateXacmlJsonAttribute(MatchAttributeIdentifiers.ActionId, actionType, DefaultType, DefaultIssuer));
            return(actionAttributes);
        }
コード例 #8
0
        private static XacmlJsonCategory CreateSubjectCategory(string consumer)
        {
            XacmlJsonCategory subjectAttributes = new XacmlJsonCategory();

            subjectAttributes.Attribute = CreateSubjectAttributes(consumer);

            return(subjectAttributes);
        }
コード例 #9
0
        private static XacmlJsonCategory CreateActionCategory(string actionType, bool includeResult = false)
        {
            XacmlJsonCategory actionAttributes = new XacmlJsonCategory
            {
                Attribute = new List <XacmlJsonAttribute>
                {
                    DecisionHelper.CreateXacmlJsonAttribute(MatchAttributeIdentifiers.ActionId, actionType, DefaultType, DefaultIssuer, includeResult)
                }
            };

            return(actionAttributes);
        }
コード例 #10
0
        private static XacmlJsonCategory CreateSubjectCategory(IEnumerable <Claim> claims)
        {
            XacmlJsonCategory subjectAttributes = new XacmlJsonCategory();

            subjectAttributes.Attribute = new List <XacmlJsonAttribute>();

            // Mapping all claims on user to attributes
            foreach (Claim claim in claims)
            {
                if (IsValidUrn(claim.Type))
                {
                    subjectAttributes.Attribute.Add(CreateXacmlJsonAttribute(claim.Type, claim.Value, claim.ValueType, claim.Issuer));
                }
            }

            return(subjectAttributes);
        }
コード例 #11
0
        private static List <XacmlJsonCategory> CreateMultipleResourceCategory(List <CloudEvent> events)
        {
            List <XacmlJsonCategory> resourcesCategories = new List <XacmlJsonCategory>();
            int counter = 1;

            foreach (CloudEvent cloudEvent in events)
            {
                XacmlJsonCategory resourceCategory = new XacmlJsonCategory {
                    Attribute = new List <XacmlJsonAttribute>()
                };

                Uri source = cloudEvent.Source;

                string path = source.PathAndQuery;

                string[] paths = path.Split("/");

                if (paths.Length == 6)
                {
                    // This is the scenario for events related to a given instance
                    string instanceId           = paths[4] + "/" + paths[5];
                    string instanceOwnerPartyId = cloudEvent.Subject.Split("/")[2];
                    string org     = paths[1];
                    string app     = paths[2];
                    string eventId = cloudEvent.Id;

                    if (!string.IsNullOrWhiteSpace(instanceId))
                    {
                        resourceCategory.Attribute.Add(DecisionHelper.CreateXacmlJsonAttribute(AltinnXacmlUrns.InstanceId, instanceId, DefaultType, DefaultIssuer, true));
                    }

                    resourceCategory.Attribute.Add(DecisionHelper.CreateXacmlJsonAttribute(AltinnXacmlUrns.AppResource, "events", DefaultType, DefaultIssuer));
                    resourceCategory.Attribute.Add(DecisionHelper.CreateXacmlJsonAttribute(AltinnXacmlUrns.EventId, eventId, DefaultType, DefaultIssuer, true));
                    resourceCategory.Attribute.Add(DecisionHelper.CreateXacmlJsonAttribute(AltinnXacmlUrns.PartyId, instanceOwnerPartyId, DefaultType, DefaultIssuer));
                    resourceCategory.Attribute.Add(DecisionHelper.CreateXacmlJsonAttribute(AltinnXacmlUrns.OrgId, org, DefaultType, DefaultIssuer));
                    resourceCategory.Attribute.Add(DecisionHelper.CreateXacmlJsonAttribute(AltinnXacmlUrns.AppId, app, DefaultType, DefaultIssuer));
                    resourceCategory.Id = ResourceId + counter.ToString();
                    resourcesCategories.Add(resourceCategory);
                    counter++;
                }
            }

            return(resourcesCategories);
        }
コード例 #12
0
        private static List <XacmlJsonCategory> ConvertAttributes(ICollection <XacmlContextAttributes> attributes)
        {
            if (attributes == null || attributes.Count == 0)
            {
                return(null);
            }

            List <XacmlJsonCategory> categories = new List <XacmlJsonCategory>();

            foreach (XacmlContextAttributes contextAttributes in attributes)
            {
                XacmlJsonCategory category = new XacmlJsonCategory();
                category.CategoryId = contextAttributes.Category.OriginalString;
                category.Id         = contextAttributes.Id;
                category.Attribute  = ConvertAttribute(contextAttributes.Attributes);
                categories.Add(category);
            }

            return(categories);
        }
コード例 #13
0
        private static List <XacmlJsonCategory> CreateMultipleResourceCategory(List <Instance> instances)
        {
            List <XacmlJsonCategory> resourcesCategories = new List <XacmlJsonCategory>();
            int counter = 1;

            foreach (Instance instance in instances)
            {
                XacmlJsonCategory resourceCategory = new XacmlJsonCategory {
                    Attribute = new List <XacmlJsonAttribute>()
                };

                string instanceId           = instance.Id.Split("/")[1];
                string task                 = instance.Process?.CurrentTask?.ElementId;
                string instanceOwnerPartyId = instance.InstanceOwner.PartyId;
                string org = instance.Org;
                string app = instance.AppId.Split("/")[1];

                if (task != null)
                {
                    resourceCategory.Attribute.Add(DecisionHelper.CreateXacmlJsonAttribute(XacmlResourceTaskId, task, DefaultType, DefaultIssuer));
                }
                else if (instance.Process?.EndEvent != null)
                {
                    resourceCategory.Attribute.Add(DecisionHelper.CreateXacmlJsonAttribute(XacmlResourceEndId, instance.Process.EndEvent, DefaultType, DefaultIssuer));
                }

                if (!string.IsNullOrWhiteSpace(instanceId))
                {
                    resourceCategory.Attribute.Add(DecisionHelper.CreateXacmlJsonAttribute(AltinnXacmlUrns.InstanceId, instanceOwnerPartyId + "/" + instanceId, DefaultType, DefaultIssuer, true));
                }

                resourceCategory.Attribute.Add(DecisionHelper.CreateXacmlJsonAttribute(AltinnXacmlUrns.PartyId, instanceOwnerPartyId, DefaultType, DefaultIssuer));
                resourceCategory.Attribute.Add(DecisionHelper.CreateXacmlJsonAttribute(AltinnXacmlUrns.OrgId, org, DefaultType, DefaultIssuer));
                resourceCategory.Attribute.Add(DecisionHelper.CreateXacmlJsonAttribute(AltinnXacmlUrns.AppId, app, DefaultType, DefaultIssuer));
                resourceCategory.Id = ResourceId + counter.ToString();
                resourcesCategories.Add(resourceCategory);
                counter++;
            }

            return(resourcesCategories);
        }
コード例 #14
0
        private static XacmlJsonCategory CreateResourceCategory(string org, string app, string instanceOwnerPartyId, string instanceGuid)
        {
            XacmlJsonCategory resourceAttributes = new XacmlJsonCategory();

            resourceAttributes.Attribute = new List <XacmlJsonAttribute>();

            if (string.IsNullOrWhiteSpace(instanceOwnerPartyId))
            {
                resourceAttributes.Attribute.Add(CreateXacmlJsonAttribute(XacmlInstanceId, instanceGuid, DefaultType, DefaultIssuer));
            }
            else if (string.IsNullOrWhiteSpace(instanceGuid))
            {
                resourceAttributes.Attribute.Add(CreateXacmlJsonAttribute(XacmlResourcePartyId, instanceOwnerPartyId, DefaultType, DefaultIssuer));
            }
            else
            {
                resourceAttributes.Attribute.Add(CreateXacmlJsonAttribute(XacmlInstanceId, instanceOwnerPartyId + "/" + instanceGuid, DefaultType, DefaultIssuer));
            }

            resourceAttributes.Attribute.Add(CreateXacmlJsonAttribute(XacmlResourceOrgId, org, DefaultType, DefaultIssuer));
            resourceAttributes.Attribute.Add(CreateXacmlJsonAttribute(XacmlResourceAppId, app, DefaultType, DefaultIssuer));

            return(resourceAttributes);
        }