[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