[java-identity-provider] 02/02: OSJ-237: Support refreshing API on dynamic metadata plugins

Brent Putman putmanb at georgetown.edu
Fri Sep 14 22:54:59 EDT 2018


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

putmanb 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=f10d791b2374ea610c8fe59a97fb34dbf53f7fb7

commit f10d791b2374ea610c8fe59a97fb34dbf53f7fb7
Author: Brent Putman <putmanb at georgetown.edu>
AuthorDate: Fri Sep 14 22:52:03 2018 -0400

    OSJ-237: Support refreshing API on dynamic metadata plugins
---
 .../metadata/RelyingPartyMetadataProvider.java     | 19 +++++++++++++--
 .../idp/saml/profile/impl/ReloadMetadata.java      | 28 ++++++++++++++--------
 2 files changed, 35 insertions(+), 12 deletions(-)

diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/metadata/RelyingPartyMetadataProvider.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/metadata/RelyingPartyMetadataProvider.java
index 7b94a86..154a43c 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/metadata/RelyingPartyMetadataProvider.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/metadata/RelyingPartyMetadataProvider.java
@@ -32,6 +32,7 @@ import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
 import net.shibboleth.utilities.java.support.resolver.ResolverException;
 
 import org.joda.time.DateTime;
+import org.opensaml.saml.metadata.resolver.ClearableMetadataResolver;
 import org.opensaml.saml.metadata.resolver.MetadataResolver;
 import org.opensaml.saml.metadata.resolver.RefreshableMetadataResolver;
 import org.opensaml.saml.metadata.resolver.filter.MetadataFilter;
@@ -46,7 +47,7 @@ import com.google.common.base.Objects;
  * {@link MetadataResolver}.
  */
 public class RelyingPartyMetadataProvider extends AbstractServiceableComponent<MetadataResolver> implements
-        RefreshableMetadataResolver, Comparable<RelyingPartyMetadataProvider> {
+        RefreshableMetadataResolver, ClearableMetadataResolver, Comparable<RelyingPartyMetadataProvider> {
 
     /** If we autogenerate a sort key it comes from this count. */
     private static int sortKeyValue;
@@ -168,6 +169,20 @@ public class RelyingPartyMetadataProvider extends AbstractServiceableComponent<M
     }
 
     /** {@inheritDoc} */
+    public void clear() throws ResolverException {
+        if (resolver instanceof ClearableMetadataResolver) {
+            ((ClearableMetadataResolver) resolver).clear();
+        }
+    }
+
+    /** {@inheritDoc} */
+    public void clear(String entityID) throws ResolverException {
+        if (resolver instanceof ClearableMetadataResolver) {
+            ((ClearableMetadataResolver) resolver).clear(entityID);
+        }
+    }
+
+    /** {@inheritDoc} */
     @Override public void refresh() throws ResolverException {
         if (resolver instanceof RefreshableMetadataResolver) {
             ((RefreshableMetadataResolver) resolver).refresh();
@@ -228,4 +243,4 @@ public class RelyingPartyMetadataProvider extends AbstractServiceableComponent<M
         return Objects.hashCode(sortKey, getId());
     }
 
-}
\ No newline at end of file
+}
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 ab893e5..dade542 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
@@ -40,6 +40,7 @@ import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.saml.metadata.resolver.ChainingMetadataResolver;
+import org.opensaml.saml.metadata.resolver.ClearableMetadataResolver;
 import org.opensaml.saml.metadata.resolver.MetadataResolver;
 import org.opensaml.saml.metadata.resolver.RefreshableMetadataResolver;
 import org.slf4j.Logger;
@@ -47,7 +48,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.webflow.execution.RequestContext;
 
 /**
- * Action that refreshes a {@link MetadataResolver} manually.
+ * Action that refreshes or clears a {@link MetadataResolver} manually.
  * 
  * <p>The {@link MetadataResolver} to reload is indicated by supplying {@link #RESOLVER_ID} as a flow variable.</p>
  * 
@@ -138,7 +139,7 @@ public class ReloadMetadata extends AbstractProfileAction {
 
         final ServiceableComponent<MetadataResolver> component = metadataResolverService.getServiceableComponent();
         try {
-            RefreshableMetadataResolver toRefresh = null;
+            MetadataResolver toProcess = null;
             
             MetadataResolver rootResolver = component.getComponent();
             
@@ -147,25 +148,32 @@ public class ReloadMetadata extends AbstractProfileAction {
                 rootResolver = ((RelyingPartyMetadataProvider) rootResolver).getEmbeddedResolver(); 
             }
             
-            if (Objects.equals(id, rootResolver.getId()) && rootResolver instanceof RefreshableMetadataResolver) {
-                toRefresh = (RefreshableMetadataResolver) rootResolver;
+            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) {
-                        toRefresh = (RefreshableMetadataResolver) childResolver;
+                            && (childResolver instanceof RefreshableMetadataResolver
+                                    || childResolver instanceof ClearableMetadataResolver)) {
+                        toProcess = childResolver;
                         break;
                     }
                 }
             }
             
-            if (toRefresh != null) {
-                toRefresh.refresh();
-                log.debug("{} Reloaded metadata from '{}'", getLogPrefix(), id);
+            if (toProcess != null) {
+                if (toProcess instanceof RefreshableMetadataResolver) {
+                    ((RefreshableMetadataResolver)toProcess).refresh();
+                } else if (toProcess instanceof ClearableMetadataResolver) {
+                    ((ClearableMetadataResolver)toProcess).clear();
+                }
+                log.debug("{} Refreshed metadata from '{}'", getLogPrefix(), id);
                 getHttpServletResponse().setStatus(HttpServletResponse.SC_OK);
                 getHttpServletResponse().getWriter().println("Metadata reloaded for '" + id + "'");
             } else {
-                log.warn("{} Unable to locate refreshable metadata source '{}'", getLogPrefix(), id);
+                log.warn("{} Unable to locate refreshable or clearable metadata source '{}'", getLogPrefix(), id);
                 getHttpServletResponse().sendError(HttpServletResponse.SC_NOT_FOUND, "Metadata source not found.");
             }
             

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


More information about the commits mailing list