From 531c813d05c1f8c8737dea1d1047ddd11219a93f Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Thu, 15 Nov 2018 10:21:28 -0700 Subject: [PATCH] [SHIBUI-704] Fancied up the Scheme enum. Added XML generation for scheme nodes. Added simple tests for xml snippet generation. --- .../JPAMetadataResolverServiceImpl.groovy | 28 ++++++++ .../MetadataRequestURLConstructionScheme.java | 29 ++++++++ ...JPAMetadataResolverServiceImplTests.groovy | 69 +++++++++++++++++++ backend/src/test/resources/conf/704.1.xml | 5 ++ backend/src/test/resources/conf/704.2.xml | 5 ++ backend/src/test/resources/conf/704.3.xml | 5 ++ 6 files changed, 141 insertions(+) create mode 100644 backend/src/test/resources/conf/704.1.xml create mode 100644 backend/src/test/resources/conf/704.2.xml create mode 100644 backend/src/test/resources/conf/704.3.xml diff --git a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.groovy b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.groovy index 4a95484e8..35e3a6343 100644 --- a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.groovy +++ b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.groovy @@ -10,7 +10,11 @@ import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.DynamicHttpMetada import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FileBackedHttpMetadataResolver import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FilesystemMetadataResolver import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.LocalDynamicMetadataResolver +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataQueryProtocolScheme +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataRequestURLConstructionScheme +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.RegexScheme import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.ResourceBackedMetadataResolver +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.TemplateScheme import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml.OpenSamlChainingMetadataResolver import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml.Refilterable import edu.internet2.tier.shibboleth.admin.ui.opensaml.OpenSamlObjects @@ -287,6 +291,30 @@ class JPAMetadataResolverServiceImpl implements MetadataResolverService { httpMaxCacheEntries: resolver.httpMetadataResolverAttributes?.httpMaxCacheEntries, httpMaxCacheEntrySize: resolver.httpMetadataResolverAttributes?.httpMaxCacheEntrySize) { + switch (MetadataRequestURLConstructionScheme.SchemeType.get(resolver.metadataRequestURLConstructionScheme.type)) { + case MetadataRequestURLConstructionScheme.SchemeType.METADATA_QUERY_PROTOCOL: + MetadataQueryProtocolScheme scheme = (MetadataQueryProtocolScheme) resolver.metadataRequestURLConstructionScheme + MetadataQueryProtocol(transformRef: scheme.transformRef) { + mkp.yield(scheme.content) + } + break + case MetadataRequestURLConstructionScheme.SchemeType.TEMPLATE: + TemplateScheme scheme = (TemplateScheme) resolver.metadataRequestURLConstructionScheme + Template(encodingStyle: scheme.encodingStyle, + transformRef: scheme.transformRef, + velocityEngine: scheme.velocityEngine) { + mkp.yield(scheme.content) + } + break + case MetadataRequestURLConstructionScheme.SchemeType.REGEX: + RegexScheme scheme = (RegexScheme) resolver.metadataRequestURLConstructionScheme + Regex(match: scheme.match) { + mkp.yield(scheme.content) + } + break + default: + break + } childNodes() } } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataRequestURLConstructionScheme.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataRequestURLConstructionScheme.java index c6e8f9be1..adddcc5aa 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataRequestURLConstructionScheme.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataRequestURLConstructionScheme.java @@ -10,6 +10,8 @@ import javax.persistence.Entity; import javax.persistence.Transient; +import java.util.HashMap; +import java.util.Map; /** * @author Bill Smith (wsmith@unicon.net) @@ -23,6 +25,33 @@ @JsonSubTypes.Type(value=TemplateScheme.class, name="Template"), @JsonSubTypes.Type(value=RegexScheme.class, name="Regex")}) public abstract class MetadataRequestURLConstructionScheme extends AbstractAuditable { + public enum SchemeType { + METADATA_QUERY_PROTOCOL("MetadataQueryProtocol"), + TEMPLATE("Template"), + REGEX("Regex"); + + private String schemeType; + private static final Map lookup = new HashMap<>(); + + static { + for (SchemeType schemeType : SchemeType.values()) { + lookup.put(schemeType.toString(), schemeType); + } + } + + SchemeType(String schemeType) { + this.schemeType = schemeType; + } + + public static SchemeType get(String schemeType) { + return lookup.get(schemeType); + } + + @Override + public String toString() { + return schemeType; + } + } @JsonProperty("@type") @Transient diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImplTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImplTests.groovy index 8bb9bc7d4..1e2e61b3c 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImplTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImplTests.groovy @@ -9,7 +9,11 @@ import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFil import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilterTarget import edu.internet2.tier.shibboleth.admin.ui.domain.filters.RequiredValidUntilFilter import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.ClasspathMetadataResource +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.DynamicHttpMetadataResolver +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataQueryProtocolScheme +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.RegexScheme import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.SvnMetadataResource +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.TemplateScheme 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 @@ -280,6 +284,71 @@ class JPAMetadataResolverServiceImplTests extends Specification { generatedXmlIsTheSameAsExpectedXml('/conf/670.xml', generatedXmlDocument) } + def 'test generating DynamicHttpMetadataResolver xml snippet with MetadataQueryProtocolScheme'() { + given: + def resolver = new DynamicHttpMetadataResolver().with { + it.xmlId = 'DynamicHttpMetadataResolver' + it.metadataRequestURLConstructionScheme = new MetadataQueryProtocolScheme().with { + it.transformRef = 'This is a transformRef' + it.content = 'some content' + it + } + it + } + + when: + genXmlSnippet(markupBuilder) { + JPAMetadataResolverServiceImpl.cast(metadataResolverService).constructXmlNodeForResolver(resolver, it) {} + } + + then: + generatedXmlIsTheSameAsExpectedXml('/conf/704.1.xml', domBuilder.parseText(writer.toString())) + } + + def 'test generating DynamicHttpMetadataResolver xml snippet with TemplateScheme'() { + given: + def resolver = new DynamicHttpMetadataResolver().with { + it.xmlId = 'DynamicHttpMetadataResolver' + it.metadataRequestURLConstructionScheme = new TemplateScheme().with { + it.encodingStyle = TemplateScheme.EncodingStyle.FORM + it.transformRef = 'This is a transformRef' + it.velocityEngine = 'This is a velocityEngine' + it.content = 'some content' + it + } + it + } + + when: + genXmlSnippet(markupBuilder) { + JPAMetadataResolverServiceImpl.cast(metadataResolverService).constructXmlNodeForResolver(resolver, it) {} + } + + then: + generatedXmlIsTheSameAsExpectedXml('/conf/704.2.xml', domBuilder.parseText(writer.toString())) + } + + def 'test generating DynamicHttpMetadataResolver xml snippet with RegexScheme'() { + given: + def resolver = new DynamicHttpMetadataResolver().with { + it.xmlId = 'DynamicHttpMetadataResolver' + it.metadataRequestURLConstructionScheme = new RegexScheme().with { + it.match = 'This is the match field' + it.content = 'some content' + it + } + it + } + + when: + genXmlSnippet(markupBuilder) { + JPAMetadataResolverServiceImpl.cast(metadataResolverService).constructXmlNodeForResolver(resolver, it) {} + } + + then: + generatedXmlIsTheSameAsExpectedXml('/conf/704.3.xml', domBuilder.parseText(writer.toString())) + } + static genXmlSnippet(MarkupBuilder xml, Closure xmlNodeGenerator) { xml.MetadataProvider('id': 'ShibbolethMetadata', 'xmlns': 'urn:mace:shibboleth:2.0:metadata', diff --git a/backend/src/test/resources/conf/704.1.xml b/backend/src/test/resources/conf/704.1.xml new file mode 100644 index 000000000..a7e5d63a0 --- /dev/null +++ b/backend/src/test/resources/conf/704.1.xml @@ -0,0 +1,5 @@ + + + some content + + \ No newline at end of file diff --git a/backend/src/test/resources/conf/704.2.xml b/backend/src/test/resources/conf/704.2.xml new file mode 100644 index 000000000..823b89de4 --- /dev/null +++ b/backend/src/test/resources/conf/704.2.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/backend/src/test/resources/conf/704.3.xml b/backend/src/test/resources/conf/704.3.xml new file mode 100644 index 000000000..d7ce637d3 --- /dev/null +++ b/backend/src/test/resources/conf/704.3.xml @@ -0,0 +1,5 @@ + + + some content + + \ No newline at end of file