Skip to content

Commit

Permalink
[SHIBUI-704]
Browse files Browse the repository at this point in the history
Fancied up the Scheme enum.
Added XML generation for scheme nodes.
Added simple tests for xml snippet generation.
  • Loading branch information
Bill Smith committed Nov 15, 2018
1 parent 1b45473 commit 531c813
Show file tree
Hide file tree
Showing 6 changed files with 141 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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()
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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<String, SchemeType> 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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',
Expand Down
5 changes: 5 additions & 0 deletions backend/src/test/resources/conf/704.1.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<MetadataProvider id='ShibbolethMetadata' xmlns='urn:mace:shibboleth:2.0:metadata' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:type='ChainingMetadataProvider' xsi:schemaLocation='urn:mace:shibboleth:2.0:metadata http://shibboleth.net/schema/idp/shibboleth-metadata.xsd urn:mace:shibboleth:2.0:resource http://shibboleth.net/schema/idp/shibboleth-resource.xsd urn:mace:shibboleth:2.0:security http://shibboleth.net/schema/idp/shibboleth-security.xsd urn:oasis:names:tc:SAML:2.0:metadata http://docs.oasis-open.org/security/saml/v2.0/saml-schema-metadata-2.0.xsd urn:oasis:names:tc:SAML:2.0:assertion http://docs.oasis-open.org/security/saml/v2.0/saml-schema-assertion-2.0.xsd'>
<MetadataProvider id='DynamicHttpMetadataResolver' xsi:type='DynamicHttpMetadataProvider' refreshDelayFactor='0.75' minCacheDuration='PT10M' maxCacheDuration='PT8H' maxIdleEntityData='PT8H' removeIdleEntityData='true' cleanupTaskInterval='PT30M' backgroundInitializationFromCacheDelay='PT2S' maxConnectionsTotal='100' maxConnectionsPerRoute='100' connectionRequestTimeout='PT5S' connectionTimeout='PT5S' socketTimeout='PT5S'>
<MetadataQueryProtocol transformRef='This is a transformRef'>some content</MetadataQueryProtocol>
</MetadataProvider>
</MetadataProvider>
5 changes: 5 additions & 0 deletions backend/src/test/resources/conf/704.2.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<MetadataProvider id='ShibbolethMetadata' xmlns='urn:mace:shibboleth:2.0:metadata' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:type='ChainingMetadataProvider' xsi:schemaLocation='urn:mace:shibboleth:2.0:metadata http://shibboleth.net/schema/idp/shibboleth-metadata.xsd urn:mace:shibboleth:2.0:resource http://shibboleth.net/schema/idp/shibboleth-resource.xsd urn:mace:shibboleth:2.0:security http://shibboleth.net/schema/idp/shibboleth-security.xsd urn:oasis:names:tc:SAML:2.0:metadata http://docs.oasis-open.org/security/saml/v2.0/saml-schema-metadata-2.0.xsd urn:oasis:names:tc:SAML:2.0:assertion http://docs.oasis-open.org/security/saml/v2.0/saml-schema-assertion-2.0.xsd'>
<MetadataProvider id='DynamicHttpMetadataResolver' xsi:type='DynamicHttpMetadataProvider' refreshDelayFactor='0.75' minCacheDuration='PT10M' maxCacheDuration='PT8H' maxIdleEntityData='PT8H' removeIdleEntityData='true' cleanupTaskInterval='PT30M' backgroundInitializationFromCacheDelay='PT2S' maxConnectionsTotal='100' maxConnectionsPerRoute='100' connectionRequestTimeout='PT5S' connectionTimeout='PT5S' socketTimeout='PT5S'>
<Template encodingStyle='FORM' transformRef='This is a transformRef' velocityEngine='This is a velocityEngine'>some content</Template>
</MetadataProvider>
</MetadataProvider>
5 changes: 5 additions & 0 deletions backend/src/test/resources/conf/704.3.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<MetadataProvider id='ShibbolethMetadata' xmlns='urn:mace:shibboleth:2.0:metadata' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:type='ChainingMetadataProvider' xsi:schemaLocation='urn:mace:shibboleth:2.0:metadata http://shibboleth.net/schema/idp/shibboleth-metadata.xsd urn:mace:shibboleth:2.0:resource http://shibboleth.net/schema/idp/shibboleth-resource.xsd urn:mace:shibboleth:2.0:security http://shibboleth.net/schema/idp/shibboleth-security.xsd urn:oasis:names:tc:SAML:2.0:metadata http://docs.oasis-open.org/security/saml/v2.0/saml-schema-metadata-2.0.xsd urn:oasis:names:tc:SAML:2.0:assertion http://docs.oasis-open.org/security/saml/v2.0/saml-schema-assertion-2.0.xsd'>
<MetadataProvider id='DynamicHttpMetadataResolver' xsi:type='DynamicHttpMetadataProvider' refreshDelayFactor='0.75' minCacheDuration='PT10M' maxCacheDuration='PT8H' maxIdleEntityData='PT8H' removeIdleEntityData='true' cleanupTaskInterval='PT30M' backgroundInitializationFromCacheDelay='PT2S' maxConnectionsTotal='100' maxConnectionsPerRoute='100' connectionRequestTimeout='PT5S' connectionTimeout='PT5S' socketTimeout='PT5S'>
<Regex match='This is the match field'>some content</Regex>
</MetadataProvider>
</MetadataProvider>

0 comments on commit 531c813

Please sign in to comment.