From 717e52a50484475f442c47f249535a66b35a8f5e Mon Sep 17 00:00:00 2001 From: chasegawa Date: Thu, 7 Oct 2021 08:51:18 -0700 Subject: [PATCH 1/7] SHIBUI-2151 Changes per ryan to backend schema --- .../admin/ui/service/JsonSchemaBuilderService.groovy | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) 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..e03157b50 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,11 +64,7 @@ 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 - } + definition['uniqueItems'] = false def items = [type : 'string', minLength: 1, // TODO: should this be configurable? maxLength: 255] //TODO: or this? From 2ed9b1094555a6ad2e2b03414312408f6d0a2f9c Mon Sep 17 00:00:00 2001 From: chasegawa Date: Thu, 7 Oct 2021 09:08:52 -0700 Subject: [PATCH 2/7] SHIBUI-2151 Changes per ryan to backend schema --- .../shibboleth/admin/ui/service/JsonSchemaBuilderService.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 e03157b50..622b91f0a 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 @@ -68,7 +68,7 @@ class JsonSchemaBuilderService { def items = [type : 'string', minLength: 1, // TODO: should this be configurable? maxLength: 255] //TODO: or this? - items.examples = it['examples'] + items.enum = it['examples'] items['default'] = it['defaultValue'] From 1a7a60d88c08f9a3c62d45d1476f20cdb5df54fa Mon Sep 17 00:00:00 2001 From: chasegawa Date: Thu, 7 Oct 2021 11:26:36 -0700 Subject: [PATCH 3/7] SHIBUI-2151 Changes per ryan to backend schema --- .../admin/ui/service/JsonSchemaBuilderService.groovy | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) 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 622b91f0a..ee44ce794 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,13 +64,18 @@ class JsonSchemaBuilderService { def definition = [title : it['displayName'], description: it['helpText'], type : 'array'] - definition['uniqueItems'] = false def items = [type : 'string', minLength: 1, // TODO: should this be configurable? maxLength: 255] //TODO: or this? - items.enum = it['examples'] + if (it['displayType'] == 'set' || it['displayType'] == 'selection_list') { + definition['uniqueItems'] = true + items.examples = it['examples'] + } else if (it['displayType'] == 'list') { + definition['uniqueItems'] = false + items.enum = it['examples'] + } + items['default'] = it['defaultValue'] - definition['items'] = items json[(String) it['name']] = definition From 14c16dd5dd8c09b2ce65aee9c6c0f04e5363e2e7 Mon Sep 17 00:00:00 2001 From: chasegawa Date: Thu, 7 Oct 2021 14:00:26 -0700 Subject: [PATCH 4/7] SHIBUI-2151 Changes per ryan to backend schema --- .../admin/ui/service/JsonSchemaBuilderService.groovy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 ee44ce794..73d02651d 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 @@ -67,10 +67,10 @@ class JsonSchemaBuilderService { def items = [type : 'string', minLength: 1, // TODO: should this be configurable? maxLength: 255] //TODO: or this? - if (it['displayType'] == 'set' || it['displayType'] == 'selection_list') { + if (it['displayType'] == 'set' || it['displayType'] == 'list') { definition['uniqueItems'] = true items.examples = it['examples'] - } else if (it['displayType'] == 'list') { + } else if (it['displayType'] == 'selection_list') { definition['uniqueItems'] = false items.enum = it['examples'] } From dc31ada419de634241c898f9609e555679937f2e Mon Sep 17 00:00:00 2001 From: chasegawa Date: Thu, 7 Oct 2021 14:21:09 -0700 Subject: [PATCH 5/7] SHIBUI-2151 Changes per ryan to backend schema --- .../shibboleth/admin/ui/service/JsonSchemaBuilderService.groovy | 1 - 1 file changed, 1 deletion(-) 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 73d02651d..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 @@ -74,7 +74,6 @@ class JsonSchemaBuilderService { definition['uniqueItems'] = false items.enum = it['examples'] } - items['default'] = it['defaultValue'] definition['items'] = items From 99743019ca00fce78ba5dfdffcbe9d4c9ddfe7b6 Mon Sep 17 00:00:00 2001 From: Jj! Date: Fri, 8 Oct 2021 16:46:47 -0500 Subject: [PATCH 6/7] [SHIBUI-2163] --- ...SamlMetadataResolverConstructorHelper.java | 68 ++++++++++--------- ...tadataResolverConstructorHelperSpec.groovy | 22 ++++++ 2 files changed, 57 insertions(+), 33 deletions(-) create mode 100644 backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlMetadataResolverConstructorHelperSpec.groovy 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() + } +} From e5f74cb18dc7277d19ef0a8446216c0d0618b045 Mon Sep 17 00:00:00 2001 From: chasegawa Date: Mon, 11 Oct 2021 10:48:22 -0700 Subject: [PATCH 7/7] SHIBUI-2164 Adjustment to output to move MDQ to after the filter nodes --- .../admin/ui/service/JPAMetadataResolverServiceImpl.groovy | 2 +- backend/src/test/resources/conf/278.2.xml | 4 ++-- backend/src/test/resources/conf/278.xml | 4 ++-- backend/src/test/resources/conf/984-2.xml | 4 ++-- backend/src/test/resources/conf/984.xml | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) 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/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