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 f4b3036ee..ef8e4dae4 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 @@ -49,7 +49,7 @@ public MetadataResolver metadataResolver() throws ResolverException, ComponentIn List resolvers = new ArrayList<>(); // TODO: remove this later when we allow for creation of arbitrary metadata resolvers - FileBackedHTTPMetadataResolver incommonMR = new FileBackedHTTPMetadataResolver(HttpClients.createMinimal(), "http://md.incommon.org/InCommon/InCommon-metadata.xml", "/tmp/incommon.xml"){ + FileBackedHTTPMetadataResolver incommonMR = new FileBackedHTTPMetadataResolver(HttpClients.createMinimal(), "http://md.incommon.org/InCommon/InCommon-metadata.xml", "/tmp/incommonmd.xml"){ @Override protected void initMetadataResolver() throws ComponentInitializationException { super.initMetadataResolver(); diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.java index 5daed6f1c..8cc907d98 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.java @@ -16,6 +16,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.w3c.dom.Document; import java.util.*; @@ -68,4 +69,10 @@ public void reloadFilters(String metadataResolverName) { } } } + + @Override + public Document generateConfiguration() { + //TODO: implement + return null; + } } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/MetadataResolverService.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/MetadataResolverService.java index 732693bd7..376c34aa5 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/MetadataResolverService.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/MetadataResolverService.java @@ -1,5 +1,9 @@ package edu.internet2.tier.shibboleth.admin.ui.service; +import org.w3c.dom.Document; + public interface MetadataResolverService { public void reloadFilters(String metadataResolverName); + + public Document generateConfiguration(); } diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/FilterControllerTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/FilterControllerTests.groovy index f69883052..0c899d4f7 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/FilterControllerTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/FilterControllerTests.groovy @@ -19,6 +19,7 @@ import org.springframework.data.jpa.repository.config.EnableJpaRepositories import org.springframework.test.context.ContextConfiguration import org.springframework.test.web.servlet.result.MockMvcResultHandlers import org.springframework.test.web.servlet.setup.MockMvcBuilders +import org.w3c.dom.Document import spock.lang.Specification import static org.hamcrest.CoreMatchers.containsString @@ -66,6 +67,11 @@ class FilterControllerTests extends Specification { void reloadFilters(String metadataResolverName) { // we do nothing 'cause we're lazy } + + @Override + Document generateConfiguration() { + return null + } } ) diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/IncommonJPAMetadataResolverServiceImplTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/IncommonJPAMetadataResolverServiceImplTests.groovy new file mode 100644 index 000000000..576e86a0a --- /dev/null +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/IncommonJPAMetadataResolverServiceImplTests.groovy @@ -0,0 +1,72 @@ +package edu.internet2.tier.shibboleth.admin.ui.service + +import edu.internet2.tier.shibboleth.admin.ui.configuration.CoreShibUiConfiguration +import edu.internet2.tier.shibboleth.admin.ui.configuration.SearchConfiguration +import edu.internet2.tier.shibboleth.admin.ui.opensaml.OpenSamlObjects +import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository +import org.apache.http.impl.client.HttpClients +import org.opensaml.saml.metadata.resolver.ChainingMetadataResolver +import org.opensaml.saml.metadata.resolver.MetadataResolver +import org.opensaml.saml.metadata.resolver.impl.FileBackedHTTPMetadataResolver +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.autoconfigure.domain.EntityScan +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.boot.test.context.TestConfiguration +import org.springframework.context.annotation.Bean +import org.springframework.data.jpa.repository.config.EnableJpaRepositories +import org.springframework.test.context.ContextConfiguration +import org.xmlunit.builder.DiffBuilder +import org.xmlunit.builder.Input +import spock.lang.Specification + +@SpringBootTest +@DataJpaTest +@ContextConfiguration(classes = [CoreShibUiConfiguration, SearchConfiguration]) +@EnableJpaRepositories(basePackages = ["edu.internet2.tier.shibboleth.admin.ui"]) +@EntityScan("edu.internet2.tier.shibboleth.admin.ui") +class IncommonJPAMetadataResolverServiceImplTests extends Specification { + @Autowired + MetadataResolverService metadataResolverService + + def 'test generation of metadata-providers.xml'() { + when: + def output = metadataResolverService.generateConfiguration() + + then: + assert !DiffBuilder.compare(Input.fromStream(this.class.getResourceAsStream('/conf/278.xml'))).withTest(Input.fromDocument(output)).ignoreComments().ignoreWhitespace().build().hasDifferences() + } + + //TODO: check that this configuration is sufficient + @TestConfiguration + static class Config { + @Autowired + OpenSamlObjects openSamlObjects + + @Autowired + MetadataResolverRepository metadataResolverRepository + + @Bean + MetadataResolver metadataResolver() { + def resolver = new ChainingMetadataResolver().with { + it.id = 'chain' + + resolvers = [ + [ + 'id': { 'incommonmd' } + ] as MetadataResolver + ] + it.initialize() + it + } + + if (!metadataResolverRepository.findAll().iterator().hasNext()) { + edu.internet2.tier.shibboleth.admin.ui.domain.MetadataResolver mr = new edu.internet2.tier.shibboleth.admin.ui.domain.MetadataResolver() + mr.setName("incommonmd") + metadataResolverRepository.save(mr) + } + + return resolver + } + } +} \ No newline at end of file diff --git a/backend/src/test/resources/conf/278.xml b/backend/src/test/resources/conf/278.xml new file mode 100644 index 000000000..721a2ac80 --- /dev/null +++ b/backend/src/test/resources/conf/278.xml @@ -0,0 +1,19 @@ + + + + + + +