Skip to content

Commit

Permalink
[NOJIRA]
Browse files Browse the repository at this point in the history
Added OpenSamlObjects.getPoolParser to all OpenSaml constructors.
Added MetadataFiltersController.refreshOrInitResolver.
  • Loading branch information
Bill Smith committed Aug 27, 2018
1 parent ebc6eb1 commit 0aaf993
Show file tree
Hide file tree
Showing 8 changed files with 99 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,16 @@
import edu.internet2.tier.shibboleth.admin.ui.domain.filters.RequiredValidUntilFilter;
import edu.internet2.tier.shibboleth.admin.ui.domain.filters.SignatureValidationFilter;
import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver;
import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml.OpenSamlFunctionDrivenDynamicHTTPMetadataResolver;
import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml.OpenSamlLocalDynamicMetadataResolver;
import edu.internet2.tier.shibboleth.admin.ui.repository.FilterRepository;
import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository;
import edu.internet2.tier.shibboleth.admin.ui.service.MetadataResolverService;

import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
import net.shibboleth.utilities.java.support.resolver.ResolverException;
import org.opensaml.saml.metadata.resolver.ChainingMetadataResolver;
import org.opensaml.saml.metadata.resolver.RefreshableMetadataResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
Expand All @@ -27,6 +33,7 @@
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;

import java.net.URI;
import java.util.List;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
Expand All @@ -46,6 +53,9 @@ public class MetadataFiltersController {
@Autowired
private FilterRepository filterRepository;

@Autowired
org.opensaml.saml.metadata.resolver.MetadataResolver chainingMetadataResolver;

private static final Supplier<HttpClientErrorException> HTTP_404_CLIENT_ERROR_EXCEPTION = () -> new HttpClientErrorException(NOT_FOUND);

@ExceptionHandler
Expand Down Expand Up @@ -78,6 +88,7 @@ public ResponseEntity<?> create(@PathVariable String metadataResolverId, @Reques

// we reload the filters here after save
metadataResolverService.reloadFilters(persistedMr.getName());
refreshOrInitResolver(metadataResolver);

MetadataFilter persistedFilter = newlyPersistedFilter(persistedMr.getMetadataFilters().stream(), createdFilter.getResourceId());

Expand All @@ -86,6 +97,33 @@ public ResponseEntity<?> create(@PathVariable String metadataResolverId, @Reques
.body(persistedFilter);
}

private void refreshOrInitResolver(MetadataResolver resolver) {
List<org.opensaml.saml.metadata.resolver.MetadataResolver> resolvers = ((ChainingMetadataResolver) chainingMetadataResolver).getResolvers();
resolvers.stream().filter(it -> it.getId().equals(resolver.getResourceId())).forEach(it -> {
if (it instanceof RefreshableMetadataResolver) {
try {
((RefreshableMetadataResolver) it).refresh();
} catch (ResolverException e) {
//TODO what should we do if we can't refresh?
}
} else if (it instanceof OpenSamlFunctionDrivenDynamicHTTPMetadataResolver) {
try {
((OpenSamlFunctionDrivenDynamicHTTPMetadataResolver) it).refresh();
} catch (ComponentInitializationException e) {
//TODO what should we do if we can't refresh?
}
} else if (it instanceof OpenSamlLocalDynamicMetadataResolver) {
try {
((OpenSamlLocalDynamicMetadataResolver) it).refresh();
} catch (ComponentInitializationException e) {
//TODO what should we do if we can't refresh?
}
} else {
//TODO we shouldn't get here, but if we do... throw exception?
}
});
}

@PutMapping("/Filters/{resourceId}")
public ResponseEntity<?> update(@PathVariable String metadataResolverId,
@PathVariable String resourceId,
Expand Down Expand Up @@ -120,6 +158,7 @@ public ResponseEntity<?> update(@PathVariable String metadataResolverId,

// TODO: this is wrong
metadataResolverService.reloadFilters(metadataResolver.getName());
refreshOrInitResolver(metadataResolver);

return ResponseEntity.ok().body(persistedFilter);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FileBackedHttpMetadataResolver;
import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
import net.shibboleth.utilities.java.support.resolver.ResolverException;
import net.shibboleth.utilities.java.support.xml.ParserPool;
import org.apache.http.HttpResponse;
import org.apache.http.impl.client.HttpClients;
import org.apache.lucene.index.IndexWriter;
Expand All @@ -22,7 +23,8 @@ public class OpenSamlFileBackedHTTPMetadataResolver extends FileBackedHTTPMetada

private OpenSamlMetadataResolverDelegate delegate;

public OpenSamlFileBackedHTTPMetadataResolver(IndexWriter indexWriter,
public OpenSamlFileBackedHTTPMetadataResolver(ParserPool parserPool,
IndexWriter indexWriter,
FileBackedHttpMetadataResolver sourceResolver) throws ResolverException {
super(HttpClients.createMinimal(), sourceResolver.getMetadataURL(), sourceResolver.getBackingFile());
this.indexWriter = indexWriter;
Expand All @@ -34,7 +36,7 @@ public OpenSamlFileBackedHTTPMetadataResolver(IndexWriter indexWriter,
OpenSamlMetadataResolverConstructorHelper.updateOpenSamlMetadataResolverFromHttpMetadataResolverAttributes(
this, sourceResolver.getHttpMetadataResolverAttributes());
OpenSamlMetadataResolverConstructorHelper.updateOpenSamlMetadataResolverFromReloadableMetadataResolverAttributes(
this, sourceResolver.getReloadableMetadataResolverAttributes());
this, sourceResolver.getReloadableMetadataResolverAttributes(), parserPool);

this.setBackupFile(sourceResolver.getBackingFile());
this.setBackupFileInitNextRefreshDelay(toMillis(sourceResolver.getBackupFileInitNextRefreshDelay()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
import net.shibboleth.utilities.java.support.resolver.ResolverException;
import net.shibboleth.utilities.java.support.xml.ParserPool;
import org.apache.lucene.index.IndexWriter;
import org.joda.time.DateTime;
import org.opensaml.saml.metadata.resolver.impl.FilesystemMetadataResolver;
Expand All @@ -17,9 +18,10 @@ public class OpenSamlFilesystemMetadataResolver extends FilesystemMetadataResolv
private edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FilesystemMetadataResolver sourceResolver;
private OpenSamlMetadataResolverDelegate delegate;

public OpenSamlFilesystemMetadataResolver(File metadataFile,
public OpenSamlFilesystemMetadataResolver(ParserPool parserPool,
IndexWriter indexWriter,
edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FilesystemMetadataResolver sourceResolver) throws ResolverException {
edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FilesystemMetadataResolver sourceResolver,
File metadataFile) throws ResolverException {
super(metadataFile);
this.indexWriter = indexWriter;
this.sourceResolver = sourceResolver;
Expand All @@ -28,7 +30,7 @@ public OpenSamlFilesystemMetadataResolver(File metadataFile,
this.setId(sourceResolver.getResourceId());

OpenSamlMetadataResolverConstructorHelper.updateOpenSamlMetadataResolverFromReloadableMetadataResolverAttributes(
this, sourceResolver.getReloadableMetadataResolverAttributes());
this, sourceResolver.getReloadableMetadataResolverAttributes(), parserPool);
}

// TODO: this is still probably not the best way to do this?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.DynamicHttpMetadataResolver;
import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
import net.shibboleth.utilities.java.support.xml.ParserPool;
import org.apache.http.impl.client.HttpClients;
import org.apache.lucene.index.IndexWriter;
import org.opensaml.saml.metadata.resolver.impl.FunctionDrivenDynamicHTTPMetadataResolver;
Expand All @@ -14,7 +15,8 @@ public class OpenSamlFunctionDrivenDynamicHTTPMetadataResolver extends FunctionD
private DynamicHttpMetadataResolver sourceResolver;
private OpenSamlMetadataResolverDelegate delegate;

public OpenSamlFunctionDrivenDynamicHTTPMetadataResolver(IndexWriter indexWriter,
public OpenSamlFunctionDrivenDynamicHTTPMetadataResolver(ParserPool parserPool,
IndexWriter indexWriter,
DynamicHttpMetadataResolver sourceResolver) {
super(HttpClients.createMinimal());
this.indexWriter = indexWriter;
Expand All @@ -24,7 +26,7 @@ public OpenSamlFunctionDrivenDynamicHTTPMetadataResolver(IndexWriter indexWriter
this.setId(sourceResolver.getResourceId());

OpenSamlMetadataResolverConstructorHelper.updateOpenSamlMetadataResolverFromDynamicMetadataResolverAttributes(
this, sourceResolver.getDynamicMetadataResolverAttributes());
this, sourceResolver.getDynamicMetadataResolverAttributes(), parserPool);

OpenSamlMetadataResolverConstructorHelper.updateOpenSamlMetadataResolverFromHttpMetadataResolverAttributes(
this, sourceResolver.getHttpMetadataResolverAttributes());
Expand All @@ -45,4 +47,10 @@ protected void initMetadataResolver() throws ComponentInitializationException {
this.sourceResolver.getResourceId(),
indexWriter);
}

public void refresh() throws ComponentInitializationException {
delegate.addIndexedDescriptorsFromBackingStore(this.getBackingStore(),
this.sourceResolver.getResourceId(),
indexWriter);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml;

import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
import net.shibboleth.utilities.java.support.xml.ParserPool;
import org.apache.lucene.index.IndexWriter;
import org.opensaml.core.xml.XMLObject;
import org.opensaml.core.xml.persist.XMLObjectLoadSaveManager;
Expand All @@ -16,9 +17,10 @@ public class OpenSamlLocalDynamicMetadataResolver extends LocalDynamicMetadataRe
private edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.LocalDynamicMetadataResolver sourceResolver;
private OpenSamlMetadataResolverDelegate delegate;

public OpenSamlLocalDynamicMetadataResolver(@Nonnull XMLObjectLoadSaveManager<XMLObject> manager,
public OpenSamlLocalDynamicMetadataResolver(ParserPool parserPool,
IndexWriter indexWriter,
edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.LocalDynamicMetadataResolver sourceResolver) {
edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.LocalDynamicMetadataResolver sourceResolver,
@Nonnull XMLObjectLoadSaveManager<XMLObject> manager) {
super(manager);
this.indexWriter = indexWriter;
this.sourceResolver = sourceResolver;
Expand All @@ -27,7 +29,7 @@ public OpenSamlLocalDynamicMetadataResolver(@Nonnull XMLObjectLoadSaveManager<XM
this.setId(sourceResolver.getResourceId());

OpenSamlMetadataResolverConstructorHelper.updateOpenSamlMetadataResolverFromDynamicMetadataResolverAttributes(
this, sourceResolver.getDynamicMetadataResolverAttributes());
this, sourceResolver.getDynamicMetadataResolverAttributes(), parserPool);

//TODO: Where do these refs get used in OpenSAML land?
// sourceResolver.getSourceKeyGeneratorRef();
Expand All @@ -42,4 +44,10 @@ protected void initMetadataResolver() throws ComponentInitializationException {
this.sourceResolver.getResourceId(),
indexWriter);
}

public void refresh() throws ComponentInitializationException {
delegate.addIndexedDescriptorsFromBackingStore(this.getBackingStore(),
this.sourceResolver.getResourceId(),
indexWriter);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
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 net.shibboleth.utilities.java.support.xml.ParserPool;
import org.opensaml.saml.metadata.resolver.MetadataResolver;
import org.opensaml.saml.metadata.resolver.impl.AbstractDynamicMetadataResolver;
import org.opensaml.saml.metadata.resolver.impl.AbstractReloadingMetadataResolver;
Expand All @@ -14,7 +15,9 @@
*/
public class OpenSamlMetadataResolverConstructorHelper {

public static void updateOpenSamlMetadataResolverFromDynamicMetadataResolverAttributes(MetadataResolver metadataResolver, DynamicMetadataResolverAttributes attributes) {
public static void updateOpenSamlMetadataResolverFromDynamicMetadataResolverAttributes(MetadataResolver metadataResolver,
DynamicMetadataResolverAttributes attributes,
ParserPool parserPool) {
AbstractDynamicMetadataResolver dynamicMetadataResolver = (AbstractDynamicMetadataResolver) metadataResolver;

dynamicMetadataResolver.setBackgroundInitializationFromCacheDelay(toMillis(attributes.getBackgroundInitializationFromCacheDelay()));
Expand All @@ -39,8 +42,8 @@ public static void updateOpenSamlMetadataResolverFromDynamicMetadataResolverAttr
//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: This takes a ParserPool. We've got a ParserPoolRef in attributes.getParserPoolRef(). Should we use it for anything?
dynamicMetadataResolver.setParserPool(parserPool);

//TODO: Where does this get used in OpenSAML land?
// attributes.getTaskTimerRef();
Expand All @@ -50,7 +53,9 @@ public static void updateOpenSamlMetadataResolverFromHttpMetadataResolverAttribu
//TODO: Implement once we figure out what needs to happen here.
}

public static void updateOpenSamlMetadataResolverFromReloadableMetadataResolverAttributes(MetadataResolver metadataResolver, ReloadableMetadataResolverAttributes attributes) {
public static void updateOpenSamlMetadataResolverFromReloadableMetadataResolverAttributes(MetadataResolver metadataResolver,
ReloadableMetadataResolverAttributes attributes,
ParserPool parserPool) {
AbstractReloadingMetadataResolver reloadingMetadataResolver = (AbstractReloadingMetadataResolver) metadataResolver;

reloadingMetadataResolver.setExpirationWarningThreshold(toMillis(attributes.getExpirationWarningThreshold()));
Expand All @@ -66,8 +71,8 @@ public static void updateOpenSamlMetadataResolverFromReloadableMetadataResolverA
//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: This takes a ParserPool. We've got a ParserPoolRef in attributes.getParserPoolRef(). Should we use it for anything?
reloadingMetadataResolver.setParserPool(parserPool);

//TODO: Where does this get used in OpenSAML land?
// attributes.getTaskTimerRef();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
import net.shibboleth.utilities.java.support.resource.Resource;
import net.shibboleth.utilities.java.support.xml.ParserPool;
import org.apache.lucene.index.IndexWriter;
import org.joda.time.DateTime;
import org.opensaml.saml.metadata.resolver.impl.ResourceBackedMetadataResolver;
Expand All @@ -17,9 +18,10 @@ public class OpenSamlResourceBackedMetadataResolver extends ResourceBackedMetada
private edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.ResourceBackedMetadataResolver sourceResolver;
private OpenSamlMetadataResolverDelegate delegate;

public OpenSamlResourceBackedMetadataResolver(Resource resource,
public OpenSamlResourceBackedMetadataResolver(ParserPool parserPool,
IndexWriter indexWriter,
edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.ResourceBackedMetadataResolver sourceResolver) throws IOException {
edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.ResourceBackedMetadataResolver sourceResolver,
Resource resource) throws IOException {
super(resource);
this.indexWriter = indexWriter;
this.sourceResolver = sourceResolver;
Expand All @@ -28,7 +30,7 @@ public OpenSamlResourceBackedMetadataResolver(Resource resource,
this.setId(sourceResolver.getResourceId());

OpenSamlMetadataResolverConstructorHelper.updateOpenSamlMetadataResolverFromReloadableMetadataResolverAttributes(
this, sourceResolver.getReloadableMetadataResolverAttributes());
this, sourceResolver.getReloadableMetadataResolverAttributes(), parserPool);
}

// TODO: this is still probably not the best way to do this?
Expand Down
Loading

0 comments on commit 0aaf993

Please sign in to comment.