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 e9faeb69c..4c0229b22 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 @@ -246,6 +246,7 @@ class JPAMetadataResolverServiceImpl implements MetadataResolverService { httpMaxCacheEntries: resolver.httpMetadataResolverAttributes?.httpMaxCacheEntries, httpMaxCacheEntrySize: resolver.httpMetadataResolverAttributes?.httpMaxCacheEntrySize) { + childNodes() switch (MetadataRequestURLConstructionScheme.SchemeType.get(resolver.metadataRequestURLConstructionScheme.type)) { case MetadataRequestURLConstructionScheme.SchemeType.METADATA_QUERY_PROTOCOL: MetadataQueryProtocolScheme scheme = (MetadataQueryProtocolScheme) resolver.metadataRequestURLConstructionScheme @@ -276,7 +277,6 @@ class JPAMetadataResolverServiceImpl implements MetadataResolverService { default: break } - childNodes() } } diff --git a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JsonSchemaBuilderService.groovy b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JsonSchemaBuilderService.groovy index a45448016..dd8bf8954 100644 --- a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JsonSchemaBuilderService.groovy +++ b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JsonSchemaBuilderService.groovy @@ -64,17 +64,17 @@ class JsonSchemaBuilderService { def definition = [title : it['displayName'], description: it['helpText'], type : 'array'] - if (it['displayType'] == 'set' || it['displayType'] == 'selection_list') { - definition['uniqueItems'] = true - } else if (it['displayType'] == 'list') { - definition['uniqueItems'] = false - } def items = [type : 'string', minLength: 1, // TODO: should this be configurable? maxLength: 255] //TODO: or this? - items.examples = it['examples'] + if (it['displayType'] == 'set' || it['displayType'] == 'list') { + definition['uniqueItems'] = true + items.examples = it['examples'] + } else if (it['displayType'] == 'selection_list') { + definition['uniqueItems'] = false + items.enum = it['examples'] + } items['default'] = it['defaultValue'] - definition['items'] = items json[(String) it['name']] = definition diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlMetadataResolverConstructorHelper.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlMetadataResolverConstructorHelper.java index 862624b05..cd7c564c7 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlMetadataResolverConstructorHelper.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlMetadataResolverConstructorHelper.java @@ -21,47 +21,49 @@ public static void updateOpenSamlMetadataResolverFromDynamicMetadataResolverAttr ParserPool parserPool) { AbstractDynamicMetadataResolver dynamicMetadataResolver = (AbstractDynamicMetadataResolver) metadataResolver; - if (attributes.getBackgroundInitializationFromCacheDelay() != null) { - dynamicMetadataResolver - .setBackgroundInitializationFromCacheDelay(toMillis(placeholderResolverService() - .resolveValueFromPossibleTokenPlaceholder(attributes.getBackgroundInitializationFromCacheDelay()))); - } + if (attributes != null) { + if (attributes.getBackgroundInitializationFromCacheDelay() != null) { + dynamicMetadataResolver + .setBackgroundInitializationFromCacheDelay(toMillis(placeholderResolverService() + .resolveValueFromPossibleTokenPlaceholder(attributes.getBackgroundInitializationFromCacheDelay()))); + } - if (attributes.getCleanupTaskInterval() != null) { - dynamicMetadataResolver.setCleanupTaskInterval(toMillis(placeholderResolverService() - .resolveValueFromPossibleTokenPlaceholder(attributes.getCleanupTaskInterval()))); - } + if (attributes.getCleanupTaskInterval() != null) { + dynamicMetadataResolver.setCleanupTaskInterval(toMillis(placeholderResolverService() + .resolveValueFromPossibleTokenPlaceholder(attributes.getCleanupTaskInterval()))); + } - if (attributes.getInitializeFromPersistentCacheInBackground()) { - dynamicMetadataResolver.setInitializeFromPersistentCacheInBackground(attributes.getInitializeFromPersistentCacheInBackground()); - } + if (attributes.getInitializeFromPersistentCacheInBackground()) { + dynamicMetadataResolver.setInitializeFromPersistentCacheInBackground(attributes.getInitializeFromPersistentCacheInBackground()); + } - if (attributes.getMaxCacheDuration() != null) { - dynamicMetadataResolver.setMaxCacheDuration(toMillis(placeholderResolverService() - .resolveValueFromPossibleTokenPlaceholder(attributes.getMaxCacheDuration()))); - } + if (attributes.getMaxCacheDuration() != null) { + dynamicMetadataResolver.setMaxCacheDuration(toMillis(placeholderResolverService() + .resolveValueFromPossibleTokenPlaceholder(attributes.getMaxCacheDuration()))); + } - if (attributes.getMaxIdleEntityData() != null) { - dynamicMetadataResolver.setMaxIdleEntityData(toMillis(placeholderResolverService() - .resolveValueFromPossibleTokenPlaceholder(attributes.getMaxIdleEntityData()))); - } + if (attributes.getMaxIdleEntityData() != null) { + dynamicMetadataResolver.setMaxIdleEntityData(toMillis(placeholderResolverService() + .resolveValueFromPossibleTokenPlaceholder(attributes.getMaxIdleEntityData()))); + } - if (attributes.getMinCacheDuration() != null) { - dynamicMetadataResolver.setMinCacheDuration(toMillis(placeholderResolverService() - .resolveValueFromPossibleTokenPlaceholder(attributes.getMinCacheDuration()))); - } + if (attributes.getMinCacheDuration() != null) { + dynamicMetadataResolver.setMinCacheDuration(toMillis(placeholderResolverService() + .resolveValueFromPossibleTokenPlaceholder(attributes.getMinCacheDuration()))); + } - if (attributes.getBackgroundInitializationFromCacheDelay() != null) { - dynamicMetadataResolver.setBackgroundInitializationFromCacheDelay(toMillis(placeholderResolverService() - .resolveValueFromPossibleTokenPlaceholder(attributes.getBackgroundInitializationFromCacheDelay()))); - } + if (attributes.getBackgroundInitializationFromCacheDelay() != null) { + dynamicMetadataResolver.setBackgroundInitializationFromCacheDelay(toMillis(placeholderResolverService() + .resolveValueFromPossibleTokenPlaceholder(attributes.getBackgroundInitializationFromCacheDelay()))); + } - if (attributes.getRefreshDelayFactor() != null) { - dynamicMetadataResolver.setRefreshDelayFactor(attributes.getRefreshDelayFactor()); - } + if (attributes.getRefreshDelayFactor() != null) { + dynamicMetadataResolver.setRefreshDelayFactor(attributes.getRefreshDelayFactor()); + } - if (attributes.getRemoveIdleEntityData() != null) { - dynamicMetadataResolver.setRemoveIdleEntityData(attributes.getRemoveIdleEntityData()); + if (attributes.getRemoveIdleEntityData() != null) { + dynamicMetadataResolver.setRemoveIdleEntityData(attributes.getRemoveIdleEntityData()); + } } //TODO: This takes a XMLObjectLoadSaveManager. Do we have what we need to create one? diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlMetadataResolverConstructorHelperSpec.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlMetadataResolverConstructorHelperSpec.groovy new file mode 100644 index 000000000..b4bf01305 --- /dev/null +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlMetadataResolverConstructorHelperSpec.groovy @@ -0,0 +1,22 @@ +package edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml + +import org.opensaml.saml.metadata.resolver.impl.AbstractDynamicMetadataResolver +import spock.lang.Specification + +//TODO: we need to fill this out +class OpenSamlMetadataResolverConstructorHelperSpec extends Specification { + def "SHIBUI-2163: make sure that we don't get a NPE if attributes are null"() { + given: + def x = Mock(AbstractDynamicMetadataResolver) + + when: + OpenSamlMetadataResolverConstructorHelper.updateOpenSamlMetadataResolverFromDynamicMetadataResolverAttributes( + x, + null, + null + ) + + then: + noExceptionThrown() + } +} diff --git a/backend/src/test/resources/conf/278.2.xml b/backend/src/test/resources/conf/278.2.xml index c8bd08e6b..9218ebcd5 100644 --- a/backend/src/test/resources/conf/278.2.xml +++ b/backend/src/test/resources/conf/278.2.xml @@ -1,6 +1,5 @@ - content @@ -12,10 +11,11 @@ md:SPSSODescriptor + content - + \ No newline at end of file diff --git a/backend/src/test/resources/conf/278.xml b/backend/src/test/resources/conf/278.xml index 0c1bfd794..46e57a6b4 100644 --- a/backend/src/test/resources/conf/278.xml +++ b/backend/src/test/resources/conf/278.xml @@ -1,15 +1,15 @@ - content md:SPSSODescriptor + content - + \ No newline at end of file diff --git a/backend/src/test/resources/conf/984-2.xml b/backend/src/test/resources/conf/984-2.xml index c3bd16e05..f6db94956 100644 --- a/backend/src/test/resources/conf/984-2.xml +++ b/backend/src/test/resources/conf/984-2.xml @@ -1,6 +1,5 @@ - http://mdq-beta.incommon.org/global + http://mdq-beta.incommon.org/global - + \ No newline at end of file diff --git a/backend/src/test/resources/conf/984.xml b/backend/src/test/resources/conf/984.xml index a67eb1a93..42328a0c0 100644 --- a/backend/src/test/resources/conf/984.xml +++ b/backend/src/test/resources/conf/984.xml @@ -1,6 +1,5 @@ - http://mdq-beta.incommon.org/global + http://mdq-beta.incommon.org/global - + \ No newline at end of file