[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