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 cefc6a88c..d40d7730e 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 @@ -5,14 +5,12 @@ import net.shibboleth.utilities.java.support.component.ComponentInitializationException; import net.shibboleth.utilities.java.support.resolver.ResolverException; import org.apache.http.HttpResponse; -import org.apache.http.client.HttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.lucene.index.IndexWriter; import org.joda.time.DateTime; import org.opensaml.saml.metadata.resolver.impl.FileBackedHTTPMetadataResolver; import javax.annotation.Nullable; -import java.util.Timer; /** * @author Bill Smith (wsmith@unicon.net) @@ -29,20 +27,18 @@ public OpenSamlFileBackedHTTPMetadataResolver(IndexWriter indexWriter, this.indexWriter = indexWriter; this.luceneMetadataResolverService = luceneMetadataResolverService; this.sourceResolver = sourceResolver; - //TODO: set other things from the resolver here - } - public OpenSamlFileBackedHTTPMetadataResolver(HttpClient client, - String metadataURL, - String backupFilePath) throws ResolverException { - super(client, metadataURL, backupFilePath); - } + OpenSamlMetadataResolverConstructorHelper.updateOpenSamlMetadataResolverFromHttpMetadataResolverAttributes( + this, sourceResolver.getHttpMetadataResolverAttributes()); + OpenSamlMetadataResolverConstructorHelper.updateOpenSamlMetadataResolverFromReloadableMetadataResolverAttributes( + this, sourceResolver.getReloadableMetadataResolverAttributes()); - public OpenSamlFileBackedHTTPMetadataResolver(Timer backgroundTaskTimer, - HttpClient client, - String metadataURL, - String backupFilePath) throws ResolverException { - super(backgroundTaskTimer, client, metadataURL, backupFilePath); + this.setBackupFile(sourceResolver.getBackingFile()); + this.setBackupFileInitNextRefreshDelay(Long.parseLong(sourceResolver.getBackupFileInitNextRefreshDelay())); + this.setInitializeFromBackupFile(sourceResolver.getInitializeFromBackupFile()); + + //TODO: Where does this get set in OpenSAML land? + // sourceResolver.getMetadataURL(); } // TODO: this is still probably not the best way to do this? @@ -52,31 +48,18 @@ public DateTime getLastRefresh() { return null; } - @Override - protected void initMetadataResolver() throws ComponentInitializationException { - super.initMetadataResolver(); - - luceneMetadataResolverService.addIndexedDescriptorsFromBackingStore(this.getBackingStore(), - this.sourceResolver.getResourceId(), - indexWriter); - } - // TODO: this is still probably not the best way to do this? @Override protected void processConditionalRetrievalHeaders(HttpResponse response) { // let's do nothing 'cause we want to allow a refresh } - public void setIndexWriter(IndexWriter indexWriter) { - - this.indexWriter = indexWriter; - } - - public void setLuceneMetadataResolverService(LuceneMetadataResolverService luceneMetadataResolverService) { - this.luceneMetadataResolverService = luceneMetadataResolverService; - } + @Override + protected void initMetadataResolver() throws ComponentInitializationException { + super.initMetadataResolver(); - public void setSourceResolver(FileBackedHttpMetadataResolver sourceResolver) { - this.sourceResolver = sourceResolver; + luceneMetadataResolverService.addIndexedDescriptorsFromBackingStore(this.getBackingStore(), + this.sourceResolver.getResourceId(), + indexWriter); } } 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 4f3f778ba..e329e2b05 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 @@ -7,10 +7,8 @@ import org.joda.time.DateTime; import org.opensaml.saml.metadata.resolver.impl.FilesystemMetadataResolver; -import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.io.File; -import java.util.Timer; /** * @author Bill Smith (wsmith@unicon.net) @@ -28,16 +26,9 @@ public OpenSamlFilesystemMetadataResolver(File metadataFile, this.indexWriter = indexWriter; this.luceneMetadataResolverService = luceneMetadataResolverService; this.sourceResolver = sourceResolver; - //TODO: set other things from the resolver here - } - - public OpenSamlFilesystemMetadataResolver(@Nonnull File metadata) throws ResolverException { - super(metadata); - } - public OpenSamlFilesystemMetadataResolver(@Nullable Timer backgroundTaskTimer, - @Nonnull File metadata) throws ResolverException { - super(backgroundTaskTimer, metadata); + OpenSamlMetadataResolverConstructorHelper.updateOpenSamlMetadataResolverFromReloadableMetadataResolverAttributes( + this, sourceResolver.getReloadableMetadataResolverAttributes()); } // TODO: this is still probably not the best way to do this? @@ -55,17 +46,4 @@ protected void initMetadataResolver() throws ComponentInitializationException { this.sourceResolver.getResourceId(), indexWriter); } - - public void setIndexWriter(IndexWriter indexWriter) { - - this.indexWriter = indexWriter; - } - - public void setLuceneMetadataResolverService(LuceneMetadataResolverService luceneMetadataResolverService) { - this.luceneMetadataResolverService = luceneMetadataResolverService; - } - - public void setSourceResolver(edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FilesystemMetadataResolver sourceResolver) { - this.sourceResolver = sourceResolver; - } } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFunctionDrivenDynamicHTTPMetadataResolver.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFunctionDrivenDynamicHTTPMetadataResolver.java index 8b4039680..a0f324ae3 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFunctionDrivenDynamicHTTPMetadataResolver.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFunctionDrivenDynamicHTTPMetadataResolver.java @@ -3,15 +3,10 @@ import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.DynamicHttpMetadataResolver; import edu.internet2.tier.shibboleth.admin.ui.service.LuceneMetadataResolverService; import net.shibboleth.utilities.java.support.component.ComponentInitializationException; -import org.apache.http.client.HttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.lucene.index.IndexWriter; import org.opensaml.saml.metadata.resolver.impl.FunctionDrivenDynamicHTTPMetadataResolver; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import java.util.Timer; - /** * @author Bill Smith (wsmith@unicon.net) */ @@ -27,16 +22,19 @@ public OpenSamlFunctionDrivenDynamicHTTPMetadataResolver(IndexWriter indexWriter this.indexWriter = indexWriter; this.luceneMetadataResolverService = luceneMetadataResolverService; this.sourceResolver = sourceResolver; - //TODO: set other things from the resolver here - } - public OpenSamlFunctionDrivenDynamicHTTPMetadataResolver(HttpClient client) { - super(client); - } + OpenSamlMetadataResolverConstructorHelper.updateOpenSamlMetadataResolverFromDynamicMetadataResolverAttributes( + this, sourceResolver.getDynamicMetadataResolverAttributes()); + + OpenSamlMetadataResolverConstructorHelper.updateOpenSamlMetadataResolverFromHttpMetadataResolverAttributes( + this, sourceResolver.getHttpMetadataResolverAttributes()); - public OpenSamlFunctionDrivenDynamicHTTPMetadataResolver(@Nullable Timer backgroundTaskTimer, - @Nonnull HttpClient client) { - super(backgroundTaskTimer, client); + this.setSupportedContentTypes(sourceResolver.getSupportedContentTypes()); + + //TODO: These don't seem to be used anywhere. + // In the parser, if not null, a warning is logged .. but nothing else happens with them. + // sourceResolver.getMaxConnectionsPerRoute(); + // sourceResolver.getMaxConnectionsTotal(); } @Override @@ -47,16 +45,4 @@ protected void initMetadataResolver() throws ComponentInitializationException { this.sourceResolver.getResourceId(), indexWriter); } - - public void setIndexWriter(IndexWriter indexWriter) { - this.indexWriter = indexWriter; - } - - public void setLuceneMetadataResolverService(LuceneMetadataResolverService luceneMetadataResolverService) { - this.luceneMetadataResolverService = luceneMetadataResolverService; - } - - public void setSourceResolver(DynamicHttpMetadataResolver sourceResolver) { - this.sourceResolver = sourceResolver; - } } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlLocalDynamicMetadataResolver.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlLocalDynamicMetadataResolver.java index 0d248323d..41589e6a2 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlLocalDynamicMetadataResolver.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlLocalDynamicMetadataResolver.java @@ -1,17 +1,13 @@ package edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml; -import com.google.common.base.Function; import edu.internet2.tier.shibboleth.admin.ui.service.LuceneMetadataResolverService; import net.shibboleth.utilities.java.support.component.ComponentInitializationException; -import net.shibboleth.utilities.java.support.resolver.CriteriaSet; import org.apache.lucene.index.IndexWriter; import org.opensaml.core.xml.XMLObject; import org.opensaml.core.xml.persist.XMLObjectLoadSaveManager; import org.opensaml.saml.metadata.resolver.impl.LocalDynamicMetadataResolver; import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import java.util.Timer; /** * @author Bill Smith (wsmith@unicon.net) @@ -29,22 +25,13 @@ public OpenSamlLocalDynamicMetadataResolver(@Nonnull XMLObjectLoadSaveManager manager) { - super(manager); - } - public OpenSamlLocalDynamicMetadataResolver(@Nonnull XMLObjectLoadSaveManager manager, - @Nullable Function keyGenerator) { - super(manager, keyGenerator); - } + OpenSamlMetadataResolverConstructorHelper.updateOpenSamlMetadataResolverFromDynamicMetadataResolverAttributes( + this, sourceResolver.getDynamicMetadataResolverAttributes()); - public OpenSamlLocalDynamicMetadataResolver(@Nullable Timer backgroundTaskTimer, - @Nonnull XMLObjectLoadSaveManager manager, - @Nullable Function keyGenerator) { - super(backgroundTaskTimer, manager, keyGenerator); + //TODO: Where do these refs get used in OpenSAML land? + // sourceResolver.getSourceKeyGeneratorRef(); + // sourceResolver.getSourceManagerRef(); } @Override @@ -55,17 +42,4 @@ protected void initMetadataResolver() throws ComponentInitializationException { this.sourceResolver.getResourceId(), indexWriter); } - - public void setIndexWriter(IndexWriter indexWriter) { - - this.indexWriter = indexWriter; - } - - public void setLuceneMetadataResolverService(LuceneMetadataResolverService luceneMetadataResolverService) { - this.luceneMetadataResolverService = luceneMetadataResolverService; - } - - public void setSourceResolver(edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.LocalDynamicMetadataResolver sourceResolver) { - this.sourceResolver = sourceResolver; - } } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlMetadataResolverConstructorHelper.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlMetadataResolverConstructorHelper.java new file mode 100644 index 000000000..141abae95 --- /dev/null +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlMetadataResolverConstructorHelper.java @@ -0,0 +1,69 @@ +package edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml; + +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.DynamicMetadataResolverAttributes; +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.HttpMetadataResolverAttributes; +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.ReloadableMetadataResolverAttributes; +import org.opensaml.saml.metadata.resolver.MetadataResolver; +import org.opensaml.saml.metadata.resolver.impl.AbstractDynamicMetadataResolver; +import org.opensaml.saml.metadata.resolver.impl.AbstractReloadingMetadataResolver; + +/** + * @author Bill Smith (wsmith@unicon.net) + */ +public class OpenSamlMetadataResolverConstructorHelper { + + public static void updateOpenSamlMetadataResolverFromDynamicMetadataResolverAttributes(MetadataResolver metadataResolver, DynamicMetadataResolverAttributes attributes) { + + AbstractDynamicMetadataResolver dynamicMetadataResolver = (AbstractDynamicMetadataResolver) metadataResolver; + + // from DynamicMetadataResolverAttributes + dynamicMetadataResolver.setBackgroundInitializationFromCacheDelay(Long.valueOf(attributes.getBackgroundInitializationFromCacheDelay())); + dynamicMetadataResolver.setCleanupTaskInterval(Long.valueOf(attributes.getCleanupTaskInterval())); + dynamicMetadataResolver.setInitializeFromPersistentCacheInBackground(attributes.getInitializeFromPersistentCacheInBackground()); + dynamicMetadataResolver.setMaxCacheDuration(Long.valueOf(attributes.getMaxCacheDuration())); + dynamicMetadataResolver.setMaxIdleEntityData(Long.valueOf(attributes.getMaxIdleEntityData())); + dynamicMetadataResolver.setMinCacheDuration(Long.valueOf(attributes.getMinCacheDuration())); + dynamicMetadataResolver.setBackgroundInitializationFromCacheDelay(Long.valueOf(attributes.getBackgroundInitializationFromCacheDelay())); + dynamicMetadataResolver.setRefreshDelayFactor(attributes.getRefreshDelayFactor().floatValue()); + dynamicMetadataResolver.setRemoveIdleEntityData(attributes.getRemoveIdleEntityData()); + + //TODO: This takes a XMLObjectLoadSaveManager. Do we have what we need to create one? + // dynamicMetadataResolver.setPersistentCacheManager(); attributes.getPersistentCacheManagerDirectory(); + // attributes.getPersistentCacheManagerRef(); + + //TODO: This takes a Function. We've got a ref. How to convert? + // dynamicMetadataResolver.setPersistentCacheKeyGenerator(); attributes.getPersistentCacheKeyGeneratorRef(); + + //TODO: This takes a Predicate. We've got a predicate ref. How to convert? + // dynamicMetadataResolver.setInitializationFromCachePredicate(); attributes.getInitializationFromCachePredicateRef(); + + //TODO: This takes a ParserPool. We've got a ParserPoolRef. How to convert? + // dynamicMetadataResolver.setParserPool(); attributes.getParserPoolRef(); + + //TODO: Where does this get used in OpenSAML land? + // attributes.getTaskTimerRef(); + } + + public static void updateOpenSamlMetadataResolverFromHttpMetadataResolverAttributes(MetadataResolver metadataResolver, HttpMetadataResolverAttributes attributes) { + //TODO: Implement once we figure out what needs to happen here. + } + + public static void updateOpenSamlMetadataResolverFromReloadableMetadataResolverAttributes(MetadataResolver metadataResolver, ReloadableMetadataResolverAttributes attributes) { + AbstractReloadingMetadataResolver reloadingMetadataResolver = (AbstractReloadingMetadataResolver) metadataResolver; + + reloadingMetadataResolver.setExpirationWarningThreshold(Long.parseLong(attributes.getExpirationWarningThreshold())); + reloadingMetadataResolver.setMaxRefreshDelay(Long.parseLong(attributes.getMaxRefreshDelay())); + reloadingMetadataResolver.setMinRefreshDelay(Long.parseLong(attributes.getMinRefreshDelay())); + reloadingMetadataResolver.setRefreshDelayFactor(attributes.getRefreshDelayFactor().floatValue()); + reloadingMetadataResolver.setResolveViaPredicatesOnly(attributes.getResolveViaPredicatesOnly()); + + //TODO: This takes a set of MetadataIndex's. We've got an IndexesRef. How to convert? + // reloadingMetadataResolver.setIndexes(); attributes.getIndexesRef(); + + //TODO: This takes a ParserPool. We've got a ParserPoolRef. How to convert? + // reloadingMetadataResolver.setParserPool(); attributes.getParserPoolRef(); + + //TODO: Where does this get used in OpenSAML land? + // attributes.getTaskTimerRef(); + } +} 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 94921105f..a8b139804 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 @@ -9,7 +9,6 @@ import javax.annotation.Nullable; import java.io.IOException; -import java.util.Timer; /** * @author Bill Smith (wsmith@unicon.net) @@ -27,15 +26,9 @@ public OpenSamlResourceBackedMetadataResolver(Resource resource, this.indexWriter = indexWriter; this.luceneMetadataResolverService = luceneMetadataResolverService; this.sourceResolver = sourceResolver; - //TODO: set other things from the resolver here - } - - public OpenSamlResourceBackedMetadataResolver(Timer timer, Resource resource) throws IOException { - super(timer, resource); - } - public OpenSamlResourceBackedMetadataResolver(Resource resource) throws IOException { - super(resource); + OpenSamlMetadataResolverConstructorHelper.updateOpenSamlMetadataResolverFromReloadableMetadataResolverAttributes( + this, sourceResolver.getReloadableMetadataResolverAttributes()); } // TODO: this is still probably not the best way to do this? @@ -53,17 +46,4 @@ protected void initMetadataResolver() throws ComponentInitializationException { this.sourceResolver.getResourceId(), indexWriter); } - - public void setIndexWriter(IndexWriter indexWriter) { - - this.indexWriter = indexWriter; - } - - public void setLuceneMetadataResolverService(LuceneMetadataResolverService luceneMetadataResolverService) { - this.luceneMetadataResolverService = luceneMetadataResolverService; - } - - public void setSourceResolver(edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.ResourceBackedMetadataResolver sourceResolver) { - this.sourceResolver = sourceResolver; - } } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/MetadataResolverConverterServiceImpl.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/MetadataResolverConverterServiceImpl.java index ed8b40c8a..edca9fb7d 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/MetadataResolverConverterServiceImpl.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/MetadataResolverConverterServiceImpl.java @@ -13,6 +13,7 @@ import net.shibboleth.utilities.java.support.resolver.ResolverException; import net.shibboleth.utilities.java.support.resource.Resource; import org.apache.lucene.index.IndexWriter; +import org.opensaml.core.xml.persist.FilesystemLoadSaveManager; import org.opensaml.core.xml.persist.XMLObjectLoadSaveManager; import org.opensaml.saml.metadata.resolver.MetadataResolver; import org.springframework.beans.factory.annotation.Autowired; @@ -60,8 +61,9 @@ private OpenSamlFilesystemMetadataResolver convertToOpenSamlRepresentation(Files private OpenSamlLocalDynamicMetadataResolver convertToOpenSamlRepresentation(LocalDynamicMetadataResolver resolver) throws IOException { IndexWriter indexWriter = indexWriterService.getIndexWriter(resolver.getResourceId()); - XMLObjectLoadSaveManager manager = null; - //TODO: manager = new .. what? + + //TODO: This is an educated guess. + XMLObjectLoadSaveManager manager = new FilesystemLoadSaveManager(resolver.getSourceDirectory()); return new OpenSamlLocalDynamicMetadataResolver(manager, indexWriter, luceneMetadataResolverService, resolver); } @@ -72,12 +74,13 @@ private OpenSamlResourceBackedMetadataResolver convertToOpenSamlRepresentation(R Resource resource = null; switch (resourceType) { case SVN: - //TODO: resource = new ... what? + //TODO: What sort of resource type should be created here? URL? break; case CLASSPATH: - resource = (Resource) new ClassPathResource(resolver.getClasspathMetadataResource() - .getFile()); + resource = (Resource) new ClassPathResource(resolver.getClasspathMetadataResource().getFile()); break; + default: + throw new RuntimeException("Unsupported resource type!"); } return new OpenSamlResourceBackedMetadataResolver(resource,