Skip to content

Commit

Permalink
[SHIBUI-723]
Browse files Browse the repository at this point in the history
Finished first pass at new OpenSaml resolver creation.
Added a simple helper to clean up the code a bit.
  • Loading branch information
Bill Smith committed Aug 14, 2018
1 parent 01a5a72 commit 36daa44
Show file tree
Hide file tree
Showing 7 changed files with 113 additions and 140 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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?
Expand All @@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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?
Expand All @@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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)
*/
Expand All @@ -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
Expand All @@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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)
Expand All @@ -29,22 +25,13 @@ public OpenSamlLocalDynamicMetadataResolver(@Nonnull XMLObjectLoadSaveManager<XM
this.indexWriter = indexWriter;
this.luceneMetadataResolverService = luceneMetadataResolverService;
this.sourceResolver = sourceResolver;
//TODO: set other things from the resolver here
}

public OpenSamlLocalDynamicMetadataResolver(@Nonnull XMLObjectLoadSaveManager<XMLObject> manager) {
super(manager);
}

public OpenSamlLocalDynamicMetadataResolver(@Nonnull XMLObjectLoadSaveManager<XMLObject> manager,
@Nullable Function<CriteriaSet, String> keyGenerator) {
super(manager, keyGenerator);
}
OpenSamlMetadataResolverConstructorHelper.updateOpenSamlMetadataResolverFromDynamicMetadataResolverAttributes(
this, sourceResolver.getDynamicMetadataResolverAttributes());

public OpenSamlLocalDynamicMetadataResolver(@Nullable Timer backgroundTaskTimer,
@Nonnull XMLObjectLoadSaveManager<XMLObject> manager,
@Nullable Function<CriteriaSet, String> keyGenerator) {
super(backgroundTaskTimer, manager, keyGenerator);
//TODO: Where do these refs get used in OpenSAML land?
// sourceResolver.getSourceKeyGeneratorRef();
// sourceResolver.getSourceManagerRef();
}

@Override
Expand All @@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@

import javax.annotation.Nullable;
import java.io.IOException;
import java.util.Timer;

/**
* @author Bill Smith (wsmith@unicon.net)
Expand All @@ -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?
Expand All @@ -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;
}
}
Loading

0 comments on commit 36daa44

Please sign in to comment.