[java-opensaml] branch master updated: OSJ-309 - EntityAttribute metadata filter generates duplicate attributes
Scott Cantor
cantor.2 at osu.edu
Tue Apr 14 17:46:56 EDT 2020
This is an automated email from the git hooks/post-receive script.
scantor pushed a commit to branch master
in repository java-opensaml.
View the commit online:
http://git.shibboleth.net/view/?p=java-opensaml.git;a=commit;h=6c9a6c1dc322370c42b5e38d7bf6f460502ff7d5
The following commit(s) were added to refs/heads/master by this push:
new 6c9a6c1 OSJ-309 - EntityAttribute metadata filter generates duplicate attributes
6c9a6c1 is described below
commit 6c9a6c1dc322370c42b5e38d7bf6f460502ff7d5
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Tue Apr 14 17:46:24 2020 -0400
OSJ-309 - EntityAttribute metadata filter generates duplicate attributes
https://issues.shibboleth.net/jira/browse/OSJ-309
Guard against duplicates in NameIDFormat filter.
---
.../resolver/filter/impl/NameIDFormatFilter.java | 20 +++++++++++++++-----
.../resolver/filter/impl/NameIDFormatFilterTest.java | 15 ++++++++++-----
2 files changed, 25 insertions(+), 10 deletions(-)
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilter.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilter.java
index 28ab01a..8180bf6 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilter.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilter.java
@@ -20,7 +20,9 @@ package org.opensaml.saml.metadata.resolver.filter.impl;
import java.util.Collection;
import java.util.Map;
+import java.util.Set;
import java.util.function.Predicate;
+import java.util.stream.Collectors;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -171,12 +173,20 @@ public class NameIDFormatFilter extends AbstractInitializableComponent implement
roleFormats.clear();
}
+ final Set<String> existingFormats =
+ roleFormats.stream().map(NameIDFormat::getURI).collect(Collectors.toUnmodifiableSet());
+
for (final String format : formats) {
- final NameIDFormat nif = formatBuilder.buildObject();
- nif.setURI(format);
- log.info("Adding NameIDFormat '{}' to EntityDescriptor '{}'", format,
- ((EntityDescriptor) role.getParent()).getEntityID());
- roleFormats.add(nif);
+ if (existingFormats.contains(format)) {
+ log.debug("Ignoring add of existing NameIDFormat '{}' on EntityDescriptor '{}'", format,
+ ((EntityDescriptor) role.getParent()).getEntityID());
+ } else {
+ final NameIDFormat nif = formatBuilder.buildObject();
+ nif.setURI(format);
+ log.info("Adding NameIDFormat '{}' to EntityDescriptor '{}'", format,
+ ((EntityDescriptor) role.getParent()).getEntityID());
+ roleFormats.add(nif);
+ }
}
}
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilterTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilterTest.java
index 897664a..6dc9c87 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilterTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/filter/impl/NameIDFormatFilterTest.java
@@ -19,10 +19,11 @@ package org.opensaml.saml.metadata.resolver.filter.impl;
import java.io.File;
import java.net.URL;
-import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
+import java.util.List;
import java.util.function.Predicate;
+import java.util.stream.Collectors;
import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
@@ -35,6 +36,7 @@ import org.opensaml.saml.metadata.resolver.impl.FilesystemMetadataResolver;
import org.opensaml.saml.metadata.resolver.impl.FilesystemMetadataResolverTest;
import org.opensaml.saml.saml2.core.NameIDType;
import org.opensaml.saml.saml2.metadata.EntityDescriptor;
+import org.opensaml.saml.saml2.metadata.NameIDFormat;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@@ -61,13 +63,13 @@ public class NameIDFormatFilterTest extends XMLObjectBaseTestCase implements Pre
metadataFilter = new NameIDFormatFilter();
- formats = Arrays.asList(NameIDType.EMAIL, NameIDType.KERBEROS);
+ formats = List.of(NameIDType.EMAIL, NameIDType.PERSISTENT);
}
@Test
public void test() throws ComponentInitializationException, ResolverException {
- metadataFilter.setRules(Collections.<Predicate<EntityDescriptor>,Collection<String>>singletonMap(this, formats));
+ metadataFilter.setRules(Collections.singletonMap(this, formats));
metadataFilter.initialize();
metadataProvider.setMetadataFilter(metadataFilter);
@@ -77,8 +79,11 @@ public class NameIDFormatFilterTest extends XMLObjectBaseTestCase implements Pre
EntityIdCriterion key = new EntityIdCriterion("https://carmenwiki.osu.edu/shibboleth");
EntityDescriptor entity = metadataProvider.resolveSingle(new CriteriaSet(key));
Assert.assertNotNull(entity);
- Assert.assertEquals(entity.getSPSSODescriptor(SAMLConstants.SAML20P_NS).getNameIDFormats().size(), 3);
+ final List<NameIDFormat> attachedFormats = entity.getSPSSODescriptor(SAMLConstants.SAML20P_NS).getNameIDFormats();
+ Assert.assertEquals(attachedFormats.stream().map(NameIDFormat::getURI).collect(Collectors.toUnmodifiableList()),
+ List.of(NameIDType.PERSISTENT, NameIDType.EMAIL));
+
key = new EntityIdCriterion("https://cms.psu.edu/Shibboleth");
entity = metadataProvider.resolveSingle(new CriteriaSet(key));
Assert.assertNotNull(entity);
@@ -88,7 +93,7 @@ public class NameIDFormatFilterTest extends XMLObjectBaseTestCase implements Pre
@Test
public void testWithRemoval() throws ComponentInitializationException, ResolverException {
- metadataFilter.setRules(Collections.<Predicate<EntityDescriptor>,Collection<String>>singletonMap(this, formats));
+ metadataFilter.setRules(Collections.singletonMap(this, formats));
metadataFilter.setRemoveExistingFormats(true);
metadataFilter.initialize();
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list