[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