[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