[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