From 1350872b12f3a677fb5bda9fb8a85cfeb3d21992 Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Tue, 11 Sep 2018 15:13:19 -0700 Subject: [PATCH] [SHIBUI-570] Removed Batch resolver delegate. Added Refilterable interface. Implemented interface where appropriate. Added initialization for metadataFilterChain. Saving filters is much speedier now for these resolver types. --- ...OpenSamlBatchMetadataResolverDelegate.java | 19 ------------------ ...penSamlFileBackedHTTPMetadataResolver.java | 20 ++++++++----------- .../OpenSamlFilesystemMetadataResolver.java | 13 ++++++++---- ...penSamlResourceBackedMetadataResolver.java | 10 ++++++---- .../resolvers/opensaml/Refilterable.java | 16 +++++++++++++++ 5 files changed, 39 insertions(+), 39 deletions(-) delete mode 100644 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlBatchMetadataResolverDelegate.java create mode 100644 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/Refilterable.java diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlBatchMetadataResolverDelegate.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlBatchMetadataResolverDelegate.java deleted file mode 100644 index 855de838f..000000000 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlBatchMetadataResolverDelegate.java +++ /dev/null @@ -1,19 +0,0 @@ -package edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml; - -import org.opensaml.core.xml.XMLObject; -import org.opensaml.saml.metadata.resolver.impl.AbstractBatchMetadataResolver; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @author Bill Smith (wsmith@unicon.net) - */ -public class OpenSamlBatchMetadataResolverDelegate extends AbstractBatchMetadataResolver { - private static final Logger logger = LoggerFactory.getLogger(OpenSamlBatchMetadataResolverDelegate.class); - - //TODO: Not sure this delegate is really buying us anything.. other than to get this one line in to a shared class. - //Maybe we'll do more in here later? - public void refilter(AbstractBatchMetadataResolver.BatchEntityBackingStore backingStore, XMLObject filteredMetadata) { - backingStore.setCachedFilteredMetadata(filteredMetadata); - } -} diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFileBackedHTTPMetadataResolver.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFileBackedHTTPMetadataResolver.java index eac7debe7..d0a9b6ff4 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFileBackedHTTPMetadataResolver.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFileBackedHTTPMetadataResolver.java @@ -8,35 +8,27 @@ import org.apache.http.impl.client.HttpClients; import org.apache.lucene.index.IndexWriter; import org.joda.time.DateTime; -import org.opensaml.core.xml.XMLObject; -import org.opensaml.core.xml.io.UnmarshallingException; import org.opensaml.saml.metadata.resolver.filter.FilterException; +import org.opensaml.saml.metadata.resolver.filter.MetadataFilterChain; import org.opensaml.saml.metadata.resolver.impl.FileBackedHTTPMetadataResolver; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.annotation.Nonnull; import javax.annotation.Nullable; -import java.io.InputStream; -import java.time.Instant; - import static edu.internet2.tier.shibboleth.admin.util.DurationUtility.toMillis; /** * @author Bill Smith (wsmith@unicon.net) */ -public class OpenSamlFileBackedHTTPMetadataResolver extends FileBackedHTTPMetadataResolver { +public class OpenSamlFileBackedHTTPMetadataResolver extends FileBackedHTTPMetadataResolver implements Refilterable { private static final Logger logger = LoggerFactory.getLogger(OpenSamlFileBackedHTTPMetadataResolver.class); - private static final long MILLISECONDS_IN_ONE_SECOND = 1000; - private IndexWriter indexWriter; private FileBackedHttpMetadataResolver sourceResolver; private OpenSamlMetadataResolverDelegate delegate; - private OpenSamlBatchMetadataResolverDelegate batchDelegate; public OpenSamlFileBackedHTTPMetadataResolver(ParserPool parserPool, IndexWriter indexWriter, @@ -45,7 +37,6 @@ public OpenSamlFileBackedHTTPMetadataResolver(ParserPool parserPool, this.indexWriter = indexWriter; this.sourceResolver = sourceResolver; this.delegate = new OpenSamlMetadataResolverDelegate(); - this.batchDelegate = new OpenSamlBatchMetadataResolverDelegate(); this.setId(sourceResolver.getResourceId()); @@ -58,6 +49,8 @@ public OpenSamlFileBackedHTTPMetadataResolver(ParserPool parserPool, this.setBackupFileInitNextRefreshDelay(toMillis(sourceResolver.getBackupFileInitNextRefreshDelay())); this.setInitializeFromBackupFile(sourceResolver.getInitializeFromBackupFile()); + this.setMetadataFilter(new MetadataFilterChain()); + //TODO: Where does this get set in OpenSAML land? // sourceResolver.getMetadataURL(); } @@ -84,9 +77,12 @@ protected void initMetadataResolver() throws ComponentInitializationException { indexWriter); } + /** + * {@inheritDoc} + */ public void refilter() { try { - batchDelegate.refilter(this.getBackingStore(), filterMetadata(getCachedOriginalMetadata())); + this.getBackingStore().setCachedFilteredMetadata(filterMetadata(getCachedOriginalMetadata())); } catch (FilterException e) { logger.error("An error occurred while attempting to filter metadata!", e); } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFilesystemMetadataResolver.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFilesystemMetadataResolver.java index e20fe632b..b4fb6d578 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFilesystemMetadataResolver.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFilesystemMetadataResolver.java @@ -6,6 +6,7 @@ import org.apache.lucene.index.IndexWriter; import org.joda.time.DateTime; import org.opensaml.saml.metadata.resolver.filter.FilterException; +import org.opensaml.saml.metadata.resolver.filter.MetadataFilterChain; import org.opensaml.saml.metadata.resolver.impl.FilesystemMetadataResolver; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -16,13 +17,13 @@ /** * @author Bill Smith (wsmith@unicon.net) */ -public class OpenSamlFilesystemMetadataResolver extends FilesystemMetadataResolver { +public class OpenSamlFilesystemMetadataResolver extends FilesystemMetadataResolver implements Refilterable { + private static final Logger logger = LoggerFactory.getLogger(OpenSamlFilesystemMetadataResolver.class); private IndexWriter indexWriter; private edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FilesystemMetadataResolver sourceResolver; private OpenSamlMetadataResolverDelegate delegate; - private OpenSamlBatchMetadataResolverDelegate batchDelegate; public OpenSamlFilesystemMetadataResolver(ParserPool parserPool, IndexWriter indexWriter, @@ -32,12 +33,13 @@ public OpenSamlFilesystemMetadataResolver(ParserPool parserPool, this.indexWriter = indexWriter; this.sourceResolver = sourceResolver; this.delegate = new OpenSamlMetadataResolverDelegate(); - this.batchDelegate = new OpenSamlBatchMetadataResolverDelegate(); this.setId(sourceResolver.getResourceId()); OpenSamlMetadataResolverConstructorHelper.updateOpenSamlMetadataResolverFromReloadableMetadataResolverAttributes( this, sourceResolver.getReloadableMetadataResolverAttributes(), parserPool); + + this.setMetadataFilter(new MetadataFilterChain()); } // TODO: this is still probably not the best way to do this? @@ -56,9 +58,12 @@ protected void initMetadataResolver() throws ComponentInitializationException { indexWriter); } + /** + * {@inheritDoc} + */ public void refilter() { try { - batchDelegate.refilter(this.getBackingStore(), filterMetadata(getCachedOriginalMetadata())); + this.getBackingStore().setCachedFilteredMetadata(filterMetadata(getCachedOriginalMetadata())); } catch (FilterException e) { logger.error("An error occurred while attempting to filter metadata!", e); } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlResourceBackedMetadataResolver.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlResourceBackedMetadataResolver.java index fd2e945fc..0a4b2a7f2 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlResourceBackedMetadataResolver.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlResourceBackedMetadataResolver.java @@ -17,13 +17,13 @@ /** * @author Bill Smith (wsmith@unicon.net) */ -public class OpenSamlResourceBackedMetadataResolver extends ResourceBackedMetadataResolver { +public class OpenSamlResourceBackedMetadataResolver extends ResourceBackedMetadataResolver implements Refilterable { + private static final Logger logger = LoggerFactory.getLogger(OpenSamlResourceBackedMetadataResolver.class); private IndexWriter indexWriter; private edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.ResourceBackedMetadataResolver sourceResolver; private OpenSamlMetadataResolverDelegate delegate; - private OpenSamlBatchMetadataResolverDelegate batchDelegate; public OpenSamlResourceBackedMetadataResolver(ParserPool parserPool, IndexWriter indexWriter, @@ -33,7 +33,6 @@ public OpenSamlResourceBackedMetadataResolver(ParserPool parserPool, this.indexWriter = indexWriter; this.sourceResolver = sourceResolver; this.delegate = new OpenSamlMetadataResolverDelegate(); - this.batchDelegate = new OpenSamlBatchMetadataResolverDelegate(); this.setId(sourceResolver.getResourceId()); @@ -60,9 +59,12 @@ protected void initMetadataResolver() throws ComponentInitializationException { indexWriter); } + /** + * {@inheritDoc} + */ public void refilter() { try { - batchDelegate.refilter(this.getBackingStore(), filterMetadata(getCachedOriginalMetadata())); + this.getBackingStore().setCachedFilteredMetadata(filterMetadata(getCachedOriginalMetadata())); } catch (FilterException e) { logger.error("An error occurred while attempting to filter metadata!", e); } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/Refilterable.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/Refilterable.java new file mode 100644 index 000000000..339a3b8e3 --- /dev/null +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/Refilterable.java @@ -0,0 +1,16 @@ +package edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml; + +/** + * Indicates that the resolver implementing this interface is a resolver that allows for its metadata to be + * filtered multiple times. + * + * @author Bill Smith (wsmith@unicon.net) + */ +public interface Refilterable { + + /** + * Reapply this resolver's filters to its cached, unfiltered metadata, and set the result back to its cached, + * filtered metadata. + */ + void refilter(); +} \ No newline at end of file