From a2fe5b492ea583086da1556ba1e4c03db5f6fbb8 Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Thu, 23 Aug 2018 15:24:05 -0700 Subject: [PATCH 1/2] [NOJIRA] Extended ChainingMetadataResolver and swapped it in for the original. It now includes a mutable collection of resolvers. --- .../MetadataResolverConfiguration.java | 3 +- .../OpenSamlChainingMetadataResolver.java | 60 +++++++++++++++++++ .../ui/configuration/TestConfiguration.groovy | 3 +- 3 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlChainingMetadataResolver.java diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/MetadataResolverConfiguration.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/MetadataResolverConfiguration.java index 3b2eab911..0222ba46e 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/MetadataResolverConfiguration.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/MetadataResolverConfiguration.java @@ -1,5 +1,6 @@ package edu.internet2.tier.shibboleth.admin.ui.configuration; +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml.OpenSamlChainingMetadataResolver; import edu.internet2.tier.shibboleth.admin.ui.opensaml.OpenSamlObjects; import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository; import edu.internet2.tier.shibboleth.admin.ui.service.IndexWriterService; @@ -39,7 +40,7 @@ public class MetadataResolverConfiguration { @Bean public MetadataResolver metadataResolver() throws ResolverException, ComponentInitializationException { - ChainingMetadataResolver metadataResolver = new ChainingMetadataResolver(); + ChainingMetadataResolver metadataResolver = new OpenSamlChainingMetadataResolver(); metadataResolver.setId("chain"); List resolvers = new ArrayList<>(); diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlChainingMetadataResolver.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlChainingMetadataResolver.java new file mode 100644 index 000000000..e5265cc29 --- /dev/null +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlChainingMetadataResolver.java @@ -0,0 +1,60 @@ +package edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml; + +import com.google.common.base.Predicates; +import com.google.common.collect.Collections2; +import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements; +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.MetadataResolver; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.annotation.Nonnull; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * @author Bill Smith (wsmith@unicon.net) + */ +public class OpenSamlChainingMetadataResolver extends ChainingMetadataResolver { + @Nonnull private final Logger log = LoggerFactory.getLogger(OpenSamlChainingMetadataResolver.class); + + @Nonnull @NonnullElements private List mutableResolvers; + + public OpenSamlChainingMetadataResolver() { + this.mutableResolvers = Collections.emptyList(); + } + + public OpenSamlChainingMetadataResolver(@Nonnull List mutableResolvers) { + this.mutableResolvers = mutableResolvers; + } + + @Override + public void setResolvers(@Nonnull @NonnullElements final List newResolvers) + throws ResolverException { + if (newResolvers == null || newResolvers.isEmpty()) { + mutableResolvers = Collections.emptyList(); + return; + } + + mutableResolvers = new ArrayList<>(Collections2.filter(newResolvers, Predicates.notNull())); + } + + @Nonnull + @NonnullElements + @Override + public List getResolvers() { + return mutableResolvers; + } + + @Override + protected void doInitialize() throws ComponentInitializationException { + super.doInitialize(); + if (mutableResolvers == null) { + log.warn("OpenSamlChainingMetadataResolver was not configured with any member MetadataResolvers"); + mutableResolvers = Collections.emptyList(); + } + } +} diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/configuration/TestConfiguration.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/configuration/TestConfiguration.groovy index 2cb3c7d9d..1796e3b70 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/configuration/TestConfiguration.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/configuration/TestConfiguration.groovy @@ -1,5 +1,6 @@ package edu.internet2.tier.shibboleth.admin.ui.configuration +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml.OpenSamlChainingMetadataResolver import edu.internet2.tier.shibboleth.admin.ui.opensaml.OpenSamlObjects import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository import edu.internet2.tier.shibboleth.admin.ui.service.IndexWriterService @@ -36,7 +37,7 @@ class TestConfiguration { @Bean MetadataResolver metadataResolver() { - ChainingMetadataResolver metadataResolver = new ChainingMetadataResolver() + ChainingMetadataResolver metadataResolver = new OpenSamlChainingMetadataResolver() metadataResolver.setId("chain") String resolverId = "test" From f65097c59f2ed87d7faed5c06467a0827ee65d41 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Thu, 23 Aug 2018 15:38:29 -0700 Subject: [PATCH 2/2] Made backupFileInitNextRefreshDelay into duration attribute --- .../filebacked-http-common.editor.schema.json | 18 +++++++++++++++++- .../filebacked-http-common.schema.json | 18 +++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/ui/src/assets/schema/provider/filebacked-http-common.editor.schema.json b/ui/src/assets/schema/provider/filebacked-http-common.editor.schema.json index 2b5d368e4..ca8ea2646 100644 --- a/ui/src/assets/schema/provider/filebacked-http-common.editor.schema.json +++ b/ui/src/assets/schema/provider/filebacked-http-common.editor.schema.json @@ -159,7 +159,23 @@ "initializeFromBackupFile": [ true ] - } + }, + "widget": { + "id": "datalist", + "data": [ + "PT0S", + "PT30S", + "PT1M", + "PT10M", + "PT30M", + "PT1H", + "PT4H", + "PT12H", + "PT24H" + ] + }, + "default": null, + "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" }, "requireValidMetadata": { "title": "Require Valid Metadata?", diff --git a/ui/src/assets/schema/provider/filebacked-http-common.schema.json b/ui/src/assets/schema/provider/filebacked-http-common.schema.json index 4e01b4f76..2b318c44c 100644 --- a/ui/src/assets/schema/provider/filebacked-http-common.schema.json +++ b/ui/src/assets/schema/provider/filebacked-http-common.schema.json @@ -96,7 +96,23 @@ "initializeFromBackupFile": [ true ] - } + }, + "widget": { + "id": "datalist", + "data": [ + "PT0S", + "PT30S", + "PT1M", + "PT10M", + "PT30M", + "PT1H", + "PT4H", + "PT12H", + "PT24H" + ] + }, + "default": null, + "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" }, "requireValidMetadata": { "title": "Require Valid Metadata?",