[java-idp-plugin-metadatagen] branch dev/JMETAGEN-5 updated: JMETAGEN-5 - Metadata generation

Scott Cantor cantor.2 at osu.edu
Thu Jul 13 14:19:57 UTC 2023


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

scantor pushed a commit to branch dev/JMETAGEN-5
in repository java-idp-plugin-metadatagen.

View the commit online:
http://git.shibboleth.net/view/?p=java-idp-plugin-metadatagen.git;a=commit;h=5ba3868512717fb36a2c3402e162931679983cd5

The following commit(s) were added to refs/heads/dev/JMETAGEN-5 by this push:
     new 5ba3868  JMETAGEN-5 - Metadata generation
5ba3868 is described below

commit 5ba3868512717fb36a2c3402e162931679983cd5
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Thu Jul 13 10:19:54 2023 -0400

    JMETAGEN-5 - Metadata generation
    
    https://shibboleth.atlassian.net/browse/JMETAGEN-5
    
    Add tag support.
---
 .../impl/MetadataGenCommandLineArguments.java      | 54 ++++++++++++++++++++++
 .../plugin/metadatagen/impl/MetadataGenTest.java   |  7 +--
 2 files changed, 58 insertions(+), 3 deletions(-)

diff --git a/metadatagen-impl/src/main/java/net/shibboleth/idp/plugin/metadatagen/impl/MetadataGenCommandLineArguments.java b/metadatagen-impl/src/main/java/net/shibboleth/idp/plugin/metadatagen/impl/MetadataGenCommandLineArguments.java
index 9f5e150..2d608c0 100644
--- a/metadatagen-impl/src/main/java/net/shibboleth/idp/plugin/metadatagen/impl/MetadataGenCommandLineArguments.java
+++ b/metadatagen-impl/src/main/java/net/shibboleth/idp/plugin/metadatagen/impl/MetadataGenCommandLineArguments.java
@@ -24,6 +24,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.function.BiFunction;
 import java.util.stream.Collectors;
@@ -58,6 +59,8 @@ import org.slf4j.LoggerFactory;
 
 import com.beust.jcommander.Parameter;
 import com.google.common.base.Predicates;
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.Multimap;
 
 import net.shibboleth.idp.cli.AbstractIdPHomeAwareCommandLineArguments;
 import net.shibboleth.shared.annotation.constraint.Live;
@@ -92,6 +95,9 @@ public class MetadataGenCommandLineArguments extends AbstractIdPHomeAwareCommand
     /** Cached logo. */
     @Nullable private Logo logoObject;
 
+    /** Cached multimap of EntityAttribute tags. */
+    @Nullable private Multimap<String,String> tagMap;
+    
     /** The unique ID. */
     @Parameter(names = {"--entityID", "--client_id", "--id"}, required=true, description="Unique ID for entity")
     @Nullable private String entityID;
@@ -187,6 +193,10 @@ public class MetadataGenCommandLineArguments extends AbstractIdPHomeAwareCommand
     /** Technical contact(s). */
     @Parameter(names = {"--contact-tech", "-t"}, description="Technical contact(s) (first/last/email)")
     @Nonnull private List<String> techContacts = new ArrayList<>();
+    
+    /** Tag assignment expressions. */
+    @Parameter(names = {"--entity-attr", "--tag"}, description="EntityAttribute tag=value expression")
+    @Nonnull private List<String> tagAssignments = new ArrayList();
 
     /** Omit namespaces from root element? */
     @Parameter(names = {"--omit-namespaces"}, description="Omit namespace declarations (assumes surrounding document context)")
@@ -423,6 +433,43 @@ public class MetadataGenCommandLineArguments extends AbstractIdPHomeAwareCommand
         return CollectionSupport.copyToList(contacts);
     }
     
+    /** {@inheritDoc} */
+    @Nonnull @Unmodifiable @NotLive public Map<String,Collection<String>> getTagAssignments() {
+        if (tagAssignments.isEmpty()) {
+            return CollectionSupport.emptyMap();
+        }
+        
+        synchronized(this) {
+            if (tagMap != null) {
+                return tagMap.asMap();
+            }
+        }
+        
+        final Multimap<String,String> map = ArrayListMultimap.create();
+        
+        for (final String assignment : tagAssignments) {
+            final int index = assignment.indexOf('=');
+            if (index == -1) {
+                throw new IllegalArgumentException("Tag assignment expression was invalid, no '='.");
+            }
+            
+            final String name = StringSupport.trimOrNull(assignment.substring(0, index));
+            final String value = StringSupport.trimOrNull(assignment.substring(index + 1));
+            if (name != null && value != null) {
+                map.put(name, value);
+            } else {
+                throw new IllegalArgumentException("Tag name or value was missing.");
+            }
+        }
+        
+        synchronized(this) {
+            tagMap = map;
+        }
+        
+        assert tagMap != null;
+        return tagMap.asMap();
+    }
+    
     /** {@inheritDoc} */
     @Nonnull @Unmodifiable @NotLive public List<String> getCertificates() {
         return certificatePaths.stream()
@@ -460,6 +507,11 @@ public class MetadataGenCommandLineArguments extends AbstractIdPHomeAwareCommand
         if (displayName != null || description != null || logoURL != null) {
             namespaces.add(new Namespace(SAMLConstants.SAML20MDUI_NS, SAMLConstants.SAML20MDUI_PREFIX));
         }
+        
+        if (!getTagAssignments().isEmpty()) {
+            namespaces.add(new Namespace(SAMLConstants.SAML20MDATTR_NS, SAMLConstants.SAML20MDATTR_PREFIX));
+            namespaces.add(new Namespace(SAMLConstants.SAML20_NS, "saml"));
+        }
 
         final SPSSODescriptor role = getSPSSODescriptor();
         if (role != null && role.isSupportedProtocol(AssertionConsumerServiceConverter.OPENID_PROTOCOL)) {
@@ -532,6 +584,8 @@ public class MetadataGenCommandLineArguments extends AbstractIdPHomeAwareCommand
         out.println(String.format("  %-20s %s", "--contact-support, -s", "Support contact(s) (first/last/email)"));
         out.println(String.format("  %-20s %s", "--contact-tech, -t", "Technical contact(s) (first/last/email)"));
         
+        out.println(String.format("  %-20s %s", "--entity-attr, --tag", "EntityAttribute tag=value assignment"));
+        
         out.println(String.format("  %-20s %s", "--omit-namespaces", "Omit namespaces on root element."));
         out.println(String.format("  %-20s %s", "--output, --out", "Output file path."));
         out.println();
diff --git a/metadatagen-impl/src/test/java/net/shibboleth/idp/plugin/metadatagen/impl/MetadataGenTest.java b/metadatagen-impl/src/test/java/net/shibboleth/idp/plugin/metadatagen/impl/MetadataGenTest.java
index 6d0b53b..94d2c0a 100644
--- a/metadatagen-impl/src/test/java/net/shibboleth/idp/plugin/metadatagen/impl/MetadataGenTest.java
+++ b/metadatagen-impl/src/test/java/net/shibboleth/idp/plugin/metadatagen/impl/MetadataGenTest.java
@@ -41,11 +41,11 @@ public class MetadataGenTest {
                         "--lang", "US-en",
                         "--logo", "https://idp.example.org/logo.png",
                         "--logo-width", "128",
-                        "-o", "Example Org",
-                        "-u", "https://example.org",
+                        "-o", "Example & Org",
+                        "-u", "https://example.org?foo=bar&foo=baz",
                         "-a", "/Bono/",
                         "-t", "John/Doe/mailto:doe at example.org",
-                        "--contact-support", "Help Desk//support at example.org",
+                        "--contact-support", "Help & Desk//support at example.org",
                         "--sp", "-w",
                         "--nameid-format", NameIDType.EMAIL,
                         "--idp",
@@ -64,6 +64,7 @@ public class MetadataGenTest {
                         "--acs", "POST/sp.example.org/Shibboleth.sso/SAML2/POST",
                         "--acs", "POST/sp2.example.org/Shibboleth.sso/SAML2/POST",
                         "--acs", "PAOS/sp.example.org/Shibboleth.sso/SAML2/ECP",
+                        "--tag", "urn:oasis:names:tc:SAML:profiles:subject-id:req=subject-id",
                         }),
             AbstractCommandLine.RC_OK);
     }

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


More information about the commits mailing list