[java-identity-provider] branch master updated: Add MappedTag syntax variant to Predicate metadata filter.

Scott Cantor cantor.2 at osu.edu
Fri May 17 15:00:07 EDT 2019


This is an automated email from the git hooks/post-receive script.

scantor pushed a commit to branch master
in repository java-identity-provider.

View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=d2a2cf0d2a33960e62f52209f278c2df40d28b77

The following commit(s) were added to refs/heads/master by this push:
       new  d2a2cf0   Add MappedTag syntax variant to Predicate metadata filter.
d2a2cf0 is described below

commit d2a2cf0d2a33960e62f52209f278c2df40d28b77
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Fri May 17 15:00:02 2019 -0400

    Add MappedTag syntax variant to Predicate metadata filter.
---
 .../filter/impl/PredicateFilterParser.java         | 47 +++++++++++++++++++++-
 .../metadata/filter/PredicateFilterParserTest.java | 17 ++++++++
 .../{predicateOr.xml => predicateMappedTag.xml}    | 12 ++----
 .../relyingparty/metadata/filter/predicateOr.xml   |  4 +-
 .../main/resources/schema/shibboleth-metadata.xsd  | 13 ++++++
 5 files changed, 82 insertions(+), 11 deletions(-)

diff --git a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/PredicateFilterParser.java b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/PredicateFilterParser.java
index 7b12965..a682723 100644
--- a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/PredicateFilterParser.java
+++ b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/PredicateFilterParser.java
@@ -26,6 +26,7 @@ import javax.xml.namespace.QName;
 import net.shibboleth.ext.spring.util.SpringSupport;
 import net.shibboleth.idp.profile.spring.relyingparty.metadata.AbstractMetadataProviderParser;
 import net.shibboleth.idp.profile.spring.relyingparty.metadata.ScriptTypeBeanParser;
+import net.shibboleth.idp.saml.profile.logic.MappedEntityAttributesPredicate;
 import net.shibboleth.utilities.java.support.logic.PredicateSupport;
 import net.shibboleth.utilities.java.support.logic.ScriptedPredicate;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
@@ -99,6 +100,7 @@ public class PredicateFilterParser extends AbstractSingleBeanDefinitionParser {
         final BeanDefinitionBuilder entityIdPredicateBuilder = parseEntityPredicate(element);
         final BeanDefinitionBuilder groupPredicateBuilder = parseGroupPredicate(element);
         final BeanDefinitionBuilder tagPredicateBuilder = parseTagPredicate(element);
+        final BeanDefinitionBuilder mappedTagPredicateBuilder = parseMappedTagPredicate(element);
         final BeanDefinitionBuilder scriptPredicateBuilder = parseScripts(element);
 
         int count = 0;
@@ -111,6 +113,9 @@ public class PredicateFilterParser extends AbstractSingleBeanDefinitionParser {
         if (tagPredicateBuilder != null) {
             count++;
         }
+        if (mappedTagPredicateBuilder != null) {
+            count++;
+        }
         if (scriptPredicateBuilder != null) {
             count++;
         }
@@ -124,6 +129,8 @@ public class PredicateFilterParser extends AbstractSingleBeanDefinitionParser {
                 return groupPredicateBuilder.getBeanDefinition();
             } else if (tagPredicateBuilder != null) {
                 return tagPredicateBuilder.getBeanDefinition();
+            } else if (mappedTagPredicateBuilder != null) {
+                return mappedTagPredicateBuilder.getBeanDefinition();
             } else {
                 return scriptPredicateBuilder.getBeanDefinition();
             }
@@ -140,6 +147,9 @@ public class PredicateFilterParser extends AbstractSingleBeanDefinitionParser {
             if (tagPredicateBuilder != null) {
                 managedList.add(tagPredicateBuilder.getBeanDefinition());
             }
+            if (mappedTagPredicateBuilder != null) {
+                managedList.add(mappedTagPredicateBuilder.getBeanDefinition());
+            }
             if (scriptPredicateBuilder != null) {
                 managedList.add(scriptPredicateBuilder.getBeanDefinition());
             }
@@ -230,7 +240,42 @@ public class PredicateFilterParser extends AbstractSingleBeanDefinitionParser {
 
         return null;
     }
-    
+
+    /**
+     * Parse MappedTag elements into a builder for an {@link MappedEntityAttributesPredicate}.
+     * 
+     * @param element root element to parse under
+     * 
+     * @return builder for the predicate, or null if none needed
+     */
+    @Nullable public BeanDefinitionBuilder parseMappedTagPredicate(@Nonnull final Element element) {
+        final List<Element> tagList =
+                ElementSupport.getChildElementsByTagNameNS(element, AbstractMetadataProviderParser.METADATA_NAMESPACE,
+                        "MappedTag");
+        if (!tagList.isEmpty()) {
+            final ManagedList<BeanDefinition> managedTagList = new ManagedList<>(tagList.size());
+            for (final Element tag : tagList) {
+                final BeanDefinitionBuilder tagBuilder = BeanDefinitionBuilder.genericBeanDefinition(Candidate.class);
+                tagBuilder.addConstructorArgValue(StringSupport.trimOrNull(tag.getAttributeNS(null, "name")));
+                final List<Element> valueList =
+                        ElementSupport.getChildElementsByTagNameNS(tag,
+                                AbstractMetadataProviderParser.METADATA_NAMESPACE, "Value");
+                if (!valueList.isEmpty()) {
+                    final ManagedList<String> managedValueList =
+                            SpringSupport.getElementTextContentAsManagedList(valueList);
+                    tagBuilder.addPropertyValue("values", managedValueList);
+                }
+                managedTagList.add(tagBuilder.getBeanDefinition());
+            }
+            final BeanDefinitionBuilder builder =
+                    BeanDefinitionBuilder.genericBeanDefinition(MappedEntityAttributesPredicate.class);
+            builder.addConstructorArgValue(managedTagList);
+            builder.addConstructorArgValue(StringSupport.trimOrNull(element.getAttributeNS(null, "trim")));
+            return builder;
+        }
+
+        return null;
+    }    
 
     /**
      * Parse ConditionScript elements into a builder, wrapped in an OR as necessary.
diff --git a/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/PredicateFilterParserTest.java b/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/PredicateFilterParserTest.java
index 0698987..652442c 100644
--- a/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/PredicateFilterParserTest.java
+++ b/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/PredicateFilterParserTest.java
@@ -34,6 +34,7 @@ import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import net.shibboleth.idp.profile.spring.relyingparty.metadata.AbstractMetadataParserTest;
+import net.shibboleth.idp.saml.profile.logic.MappedEntityAttributesPredicate;
 import net.shibboleth.utilities.java.support.logic.ScriptedPredicate;
 import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
 import net.shibboleth.utilities.java.support.resolver.ResolverException;
@@ -99,6 +100,22 @@ public class PredicateFilterParserTest extends AbstractMetadataParserTest {
     }
 
     @Test
+    public void mapped() throws IOException {
+        final PredicateFilter filter = getBean(PredicateFilter.class, "filter/predicateMappedTag.xml");
+        Assert.assertNotNull(filter);
+        Assert.assertEquals(filter.getDirection(), Direction.EXCLUDE);
+        
+        final MappedEntityAttributesPredicate condition = (MappedEntityAttributesPredicate) filter.getCondition();
+        Assert.assertTrue(condition.getTrimTags());
+        Assert.assertEquals(condition.getCandidates().size(), 2);
+        
+        final Candidate c1 = (Candidate) condition.getCandidates().toArray()[0];
+        final Candidate c2 = (Candidate) condition.getCandidates().toArray()[1];
+        Assert.assertEquals(c1.getValues().size(), 2);
+        Assert.assertEquals(c2.getValues().size(), 2);
+    }
+
+    @Test
     public void script() throws IOException {
         final PredicateFilter filter = getBean(PredicateFilter.class, "filter/predicateScript.xml");
         Assert.assertNotNull(filter);
diff --git a/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/predicateOr.xml b/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/predicateMappedTag.xml
similarity index 77%
copy from idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/predicateOr.xml
copy to idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/predicateMappedTag.xml
index 26f74c1..0907d37 100644
--- a/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/predicateOr.xml
+++ b/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/predicateMappedTag.xml
@@ -6,17 +6,13 @@
 
 	xsi:type="metadata:Predicate" direction="exclude" removeEmptyEntitiesDescriptors="false" trim="true">
     
-    <metadata:Entity>urn:foo</metadata:Entity>
-    
-    <metadata:Group>urn:bar</metadata:Group>
-    
-    <metadata:Tag name="urn:foo">
+    <metadata:MappedTag name="urn:foo">
         <metadata:Value>bar</metadata:Value>
         <metadata:Value>baz</metadata:Value>
-    </metadata:Tag>
+    </metadata:MappedTag>
     
-    <metadata:Tag name="urn:fob" nameFormat="foo">
+    <metadata:MappedTag name="urn:fob">
         <metadata:Value>bat</metadata:Value>
         <metadata:Value>baf</metadata:Value>
-    </metadata:Tag>
+    </metadata:MappedTag>
 </metadata:MetadataFilter>
diff --git a/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/predicateOr.xml b/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/predicateOr.xml
index 26f74c1..1b1398f 100644
--- a/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/predicateOr.xml
+++ b/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/predicateOr.xml
@@ -10,10 +10,10 @@
     
     <metadata:Group>urn:bar</metadata:Group>
     
-    <metadata:Tag name="urn:foo">
+    <metadata:MappedTag name="urn:foo">
         <metadata:Value>bar</metadata:Value>
         <metadata:Value>baz</metadata:Value>
-    </metadata:Tag>
+    </metadata:MappedTag>
     
     <metadata:Tag name="urn:fob" nameFormat="foo">
         <metadata:Value>bat</metadata:Value>
diff --git a/idp-schema/src/main/resources/schema/shibboleth-metadata.xsd b/idp-schema/src/main/resources/schema/shibboleth-metadata.xsd
index 1a07f89..7016291 100644
--- a/idp-schema/src/main/resources/schema/shibboleth-metadata.xsd
+++ b/idp-schema/src/main/resources/schema/shibboleth-metadata.xsd
@@ -1125,6 +1125,19 @@
                             <attribute name="nameFormat" type="string"/>
                         </complexType>
                     </element>
+                    <element name="MappedTag">
+                        <annotation>
+                            <documentation>
+                                A rule to use in a predicate that matches on mapped EntityAttributes extensions.
+                            </documentation>
+                        </annotation>
+                        <complexType>
+                            <sequence>
+                                <element name="Value" type="string" maxOccurs="unbounded"/>
+                            </sequence>
+                            <attribute name="name" type="string" use="required" />
+                        </complexType>
+                    </element>
                     <element name="ConditionScript" type="shibmd:ScriptType">
                         <annotation>
                             <documentation>

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list