[java-identity-provider] branch master updated: https://issues.shibboleth.net/jira/browse/IDP-1478 Recurse into chains when managing MetadataProviders
Rod Widdowson
rdw at steadingsoftware.com
Sat Aug 3 11:39:43 EDT 2019
This is an automated email from the git hooks/post-receive script.
rdw 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=fb77a5ef13a4f49d59c61e98da34aba14c4b8bce
The following commit(s) were added to refs/heads/master by this push:
new fb77a5e https://issues.shibboleth.net/jira/browse/IDP-1478 Recurse into chains when managing MetadataProviders
fb77a5e is described below
commit fb77a5ef13a4f49d59c61e98da34aba14c4b8bce
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Sat Aug 3 16:38:17 2019 +0100
https://issues.shibboleth.net/jira/browse/IDP-1478 Recurse into chains when managing MetadataProviders
https://issues.shibboleth.net/jira/browse/IDP-1478
At the same time clean up some gueage code and the status jsp.
---
.../impl/AttributeResolverServiceGaugeSet.java | 2 +-
.../impl/MetadataResolverServiceGaugeSet.java | 22 ++++++++++-
.../idp/saml/profile/impl/ReloadMetadata.java | 43 ++++++++++++----------
idp-war/src/main/webapp/WEB-INF/jsp/status.jsp | 4 --
4 files changed, 45 insertions(+), 26 deletions(-)
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverServiceGaugeSet.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverServiceGaugeSet.java
index 3f0790c..54b560e 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverServiceGaugeSet.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverServiceGaugeSet.java
@@ -95,7 +95,7 @@ public class AttributeResolverServiceGaugeSet extends ReloadableServiceGaugeSet<
// Checkstyle: AnonInnerLength ON
}
-
+
/** {@inheritDoc} */
@Override
protected void doInitialize() throws ComponentInitializationException {
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/metadata/impl/MetadataResolverServiceGaugeSet.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/metadata/impl/MetadataResolverServiceGaugeSet.java
index 848f0ed..d7c7aa3 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/metadata/impl/MetadataResolverServiceGaugeSet.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/metadata/impl/MetadataResolverServiceGaugeSet.java
@@ -17,7 +17,9 @@
package net.shibboleth.idp.saml.metadata.impl;
import java.time.Instant;
+import java.util.ArrayList;
import java.util.Collections;
+import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
@@ -183,6 +185,24 @@ public class MetadataResolverServiceGaugeSet extends ReloadableServiceGaugeSet i
}
}
+ /** Get all the resolvers rooted in the provider tree (including the root).
+ * @param parent - root of the chaining resolver tree.
+ * @return - the list.
+ */
+ private List<MetadataResolver> getAllChildren(final ChainingMetadataResolver parent) {
+ final ArrayList<MetadataResolver> result = new ArrayList<>(1+ parent.getResolvers().size());
+ // Add ourselves
+ result.add(parent);
+ for (final MetadataResolver child: parent.getResolvers()) {
+ if (child instanceof ChainingMetadataResolver) {
+ result.addAll(getAllChildren((ChainingMetadataResolver) child));
+ } else {
+ result.add(child);
+ }
+ }
+ return result;
+ }
+
/**
* Return the resolvers to report on.
*
@@ -201,7 +221,7 @@ public class MetadataResolverServiceGaugeSet extends ReloadableServiceGaugeSet i
}
if (root instanceof ChainingMetadataResolver) {
- return ((ChainingMetadataResolver) root).getResolvers();
+ return getAllChildren((ChainingMetadataResolver) root);
} else {
return Collections.singletonList(root);
}
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/profile/impl/ReloadMetadata.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/profile/impl/ReloadMetadata.java
index 1c3054a..807bdc1 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/profile/impl/ReloadMetadata.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/profile/impl/ReloadMetadata.java
@@ -131,38 +131,42 @@ public class ReloadMetadata extends AbstractProfileAction {
return true;
}
+
+ /** Iterate over all providers to find the one with the name, recursing into
+ * chaining providers.
+ * @param rootResolver where to start
+ * @return the resolver, or null if none found.
+ */
+ @Nullable private MetadataResolver findProvider(final MetadataResolver rootResolver) {
+ if (Objects.equals(id, rootResolver.getId())
+ && (rootResolver instanceof RefreshableMetadataResolver
+ || rootResolver instanceof ClearableMetadataResolver)) {
+ return rootResolver;
+ } else if (rootResolver instanceof ChainingMetadataResolver) {
+ for (final MetadataResolver childResolver : ((ChainingMetadataResolver) rootResolver).getResolvers()) {
+ final MetadataResolver result = findProvider(childResolver);
+ if (result != null) {
+ return result;
+ }
+ }
+ }
+ return null;
+ }
-// Checkstyle: CyclomaticComplexity OFF
/** {@inheritDoc} */
@Override protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
log.debug("{} Reloading metadata from '{}'", getLogPrefix(), id);
final ServiceableComponent<MetadataResolver> component = metadataResolverService.getServiceableComponent();
try {
- MetadataResolver toProcess = null;
-
MetadataResolver rootResolver = component.getComponent();
// Step down into wrapping component.
if (rootResolver instanceof RelyingPartyMetadataProvider) {
rootResolver = ((RelyingPartyMetadataProvider) rootResolver).getEmbeddedResolver();
}
-
- if (Objects.equals(id, rootResolver.getId())
- && (rootResolver instanceof RefreshableMetadataResolver
- || rootResolver instanceof ClearableMetadataResolver)) {
- toProcess = rootResolver;
- } else if (rootResolver instanceof ChainingMetadataResolver) {
- for (final MetadataResolver childResolver : ((ChainingMetadataResolver) rootResolver).getResolvers()) {
- if (Objects.equals(id, childResolver.getId())
- && (childResolver instanceof RefreshableMetadataResolver
- || childResolver instanceof ClearableMetadataResolver)) {
- toProcess = childResolver;
- break;
- }
- }
- }
-
+ final MetadataResolver toProcess = findProvider(rootResolver);
+
if (toProcess != null) {
if (toProcess instanceof RefreshableMetadataResolver) {
((RefreshableMetadataResolver)toProcess).refresh();
@@ -195,6 +199,5 @@ public class ReloadMetadata extends AbstractProfileAction {
}
}
}
-// Checkstyle: CyclomaticComplexity ON
}
\ No newline at end of file
diff --git a/idp-war/src/main/webapp/WEB-INF/jsp/status.jsp b/idp-war/src/main/webapp/WEB-INF/jsp/status.jsp
index f9d6e55..158c888 100644
--- a/idp-war/src/main/webapp/WEB-INF/jsp/status.jsp
+++ b/idp-war/src/main/webapp/WEB-INF/jsp/status.jsp
@@ -9,10 +9,6 @@
<%@ page import="java.time.Instant" %>
<%@ page import="java.time.format.DateTimeFormatter" %>
<%@ page import="org.springframework.webflow.execution.RequestContext" %>
-<%@ page import="org.opensaml.saml.metadata.resolver.ChainingMetadataResolver" %>
-<%@ page import="org.opensaml.saml.metadata.resolver.MetadataResolver" %>
-<%@ page import="org.opensaml.saml.metadata.resolver.BatchMetadataResolver" %>
-<%@ page import="org.opensaml.saml.metadata.resolver.RefreshableMetadataResolver" %>
<%@ page import="net.shibboleth.idp.Version" %>
<%@ page import="com.codahale.metrics.MetricSet" %>
<%@ page import="com.codahale.metrics.Gauge" %>
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list