From fc8bba51162cb618065021b3b185551fc3af9f8c Mon Sep 17 00:00:00 2001 From: chasegawa Date: Tue, 27 Jul 2021 12:20:54 -0700 Subject: [PATCH] SHIBUI-1992 removed disregardTLSCertificate = false (now null rather than a default) --- .../HttpMetadataResolverAttributes.java | 2 +- ...taFiltersControllerIntegrationTests.groovy | 296 +++++++++--------- 2 files changed, 149 insertions(+), 149 deletions(-) diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/HttpMetadataResolverAttributes.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/HttpMetadataResolverAttributes.java index 8054ba852..706c34e08 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/HttpMetadataResolverAttributes.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/HttpMetadataResolverAttributes.java @@ -28,7 +28,7 @@ public class HttpMetadataResolverAttributes { private String socketTimeout; - private Boolean disregardTLSCertificate = false; + private Boolean disregardTLSCertificate; private String tlsTrustEngineRef; diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerIntegrationTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerIntegrationTests.groovy index 08abfc4b4..e223e0012 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerIntegrationTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerIntegrationTests.groovy @@ -95,154 +95,154 @@ class MetadataFiltersControllerIntegrationTests extends Specification { updatedResultFromPUT.statusCode.value() == 200 } -// def "PUT EntityAttributesFilter and update it"() { -// given: 'MetadataResolver with attached entity attributes is available in data store' -// def resolver = generator.buildRandomMetadataResolverOfType('FileBacked') -// resolver.metadataFilters << generator.entityAttributesFilter() -// def filterResourceId = resolver.metadataFilters[0].resourceId -// def resolverResourceId = resolver.resourceId -// metadataResolverRepository.save(resolver) -// MetadataResolver openSamlRepresentation = metadataResolverConverterService.convertToOpenSamlRepresentation(resolver) -// OpenSamlChainingMetadataResolverUtil.updateChainingMetadataResolver((OpenSamlChainingMetadataResolver) chainingMetadataResolver, openSamlRepresentation) -// -// when: 'GET request is made with resource Id matching the existing filter' -// def result = this.restTemplate.getForEntity("$BASE_URI/$resolverResourceId/Filters/$filterResourceId", String) -// def existingFilterMap = jsonSlurper.parseText(result.body) -// -// and: 'PUT call is made with modified filter state' -// existingFilterMap.name = 'Entity Attributes Filter Updated' -// def updatedResultFromPUT = this.restTemplate.exchange( -// "$BASE_URI/$resolverResourceId/Filters/$filterResourceId", -// PUT, -// createRequestHttpEntityFor { JsonOutput.toJson(existingFilterMap) }, String) -// -// then: -// updatedResultFromPUT.statusCode.value() == 200 -// } -// -// def "DELETE Filter"() { -// given: 'MetadataResolver with attached filter is available in data store' -// def resolver = generator.buildRandomMetadataResolverOfType('FileBacked') -// resolver.metadataFilters << generator.entityAttributesFilter() -// def filterResourceId = resolver.metadataFilters[0].resourceId -// def resolverResourceId = resolver.resourceId -// metadataResolverRepository.save(resolver) -// -// -// when: 'GET request is made with resource Id matching the existing filter' -// def result = this.restTemplate.getForEntity("$BASE_URI/$resolverResourceId/Filters/$filterResourceId", String) -// -// then: -// result.statusCode.value() == 200 -// -// and: 'DELETE call is made and then GET call is made for the just deleted resource' -// restTemplate.delete("$BASE_URI/$resolverResourceId/Filters/$filterResourceId") -// def GETResultAfterDelete = this.restTemplate.getForEntity("$BASE_URI/$resolverResourceId/Filters/$filterResourceId", String) -// -// then: 'The deleted resource is gone' -// GETResultAfterDelete.statusCode.value() == 404 -// } -// -// def "DELETE Filter with resolver having more than TWO filters attached"() { -// given: 'MetadataResolver with 3 attached filters is available in data store' -// def resolver = generator.buildRandomMetadataResolverOfType('FileBacked') -// resolver.metadataFilters << generator.entityAttributesFilter() -// resolver.metadataFilters << generator.entityAttributesFilter() -// resolver.metadataFilters << generator.entityAttributesFilter() -// resolver.metadataFilters << generator.entityAttributesFilter() -// resolver.metadataFilters << generator.entityAttributesFilter() -// resolver.metadataFilters << generator.entityAttributesFilter() -// resolver.metadataFilters << generator.entityAttributesFilter() -// def filter_THREE_ResourceId = resolver.metadataFilters[2].resourceId -// def filter_SIX_ResourceId = resolver.metadataFilters[5].resourceId -// def resolverResourceId = resolver.resourceId -// metadataResolverRepository.save(resolver) -// -// when: 'GET resolver to count the original number of filters' -// def originalResolverResult = this.restTemplate.getForEntity("$BASE_URI/$resolverResourceId", Map) -// -// then: -// originalResolverResult.body.metadataFilters.size == 7 -// -// when: 'DELETE call is made for one of the filters and then GET call is made for the just deleted filter' -// restTemplate.delete("$BASE_URI/$resolverResourceId/Filters/$filter_SIX_ResourceId") -// def GETResultAfterDelete = this.restTemplate.getForEntity("$BASE_URI/$resolverResourceId/Filters/$filter_SIX_ResourceId", String) -// -// then: 'The deleted resource is gone' -// GETResultAfterDelete.statusCodeValue == 404 -// -// and: 'GET resolver to count modified number of filters' -// def resolverResult_2 = this.restTemplate.getForEntity("$BASE_URI/$resolverResourceId", Map) -// -// then: -// resolverResult_2.body.metadataFilters.size == 6 -// -// and: 'DELETE call is made for one of the filters and then GET call is made for the just deleted filter' -// restTemplate.delete("$BASE_URI/$resolverResourceId/Filters/$filter_THREE_ResourceId") -// def GETResultAfterDelete_2 = this.restTemplate.getForEntity("$BASE_URI/$resolverResourceId/Filters/$filter_THREE_ResourceId", String) -// -// then: 'The deleted resource is gone' -// GETResultAfterDelete_2.statusCodeValue == 404 -// -// and: 'GET resolver to count modified number of filters' -// def resolverResult_3 = this.restTemplate.getForEntity("$BASE_URI/$resolverResourceId", Map) -// -// then: -// resolverResult_3.body.metadataFilters.size == 5 -// } -// -// def "POST new Filter updates resolver's modifiedDate - SHIBUI-1500"() { -// given: 'MetadataResolver with attached entity attributes is available in data store' -// def resolver = generator.buildRandomMetadataResolverOfType('FileBacked') -// def filter = generator.entityAttributesFilter() -// def resolverResourceId = resolver.resourceId -// metadataResolverRepository.save(resolver) -// MetadataResolver openSamlRepresentation = metadataResolverConverterService.convertToOpenSamlRepresentation(resolver) -// OpenSamlChainingMetadataResolverUtil.updateChainingMetadataResolver((OpenSamlChainingMetadataResolver) chainingMetadataResolver, openSamlRepresentation) -// -// when: 'Resolver without filter is fetched' -// def result = this.restTemplate.getForEntity("$BASE_URI/$resolverResourceId", String) -// def originalModifiedDate = jsonSlurper.parseText(result.body).modifiedDate -// -// and: 'POST call is made with new filter' -// result = restTemplate.postForEntity("$BASE_URI/$resolverResourceId/Filters", filter, String) -// def afterFilterAddedModifiedDate = jsonSlurper.parseText(result.body).modifiedDate -// -// then: -// originalModifiedDate < afterFilterAddedModifiedDate -// } -// -// def "EntityAttributesFilter with invalid script does not result in persisting that filter"() { -// def resolver = generator.buildRandomMetadataResolverOfType('FileBacked') -// def resolverResourceId = resolver.resourceId -// metadataResolverRepository.save(resolver) -// MetadataResolver openSamlRepresentation = metadataResolverConverterService.convertToOpenSamlRepresentation(resolver) -// OpenSamlChainingMetadataResolverUtil.updateChainingMetadataResolver((OpenSamlChainingMetadataResolver) chainingMetadataResolver, openSamlRepresentation) -// def filter = new EntityAttributesFilter().with { -// it.name = 'SHIBUI-1249' -// it.resourceId = 'SHIBUI-1249' -// it.entityAttributesFilterTarget = new EntityAttributesFilterTarget().with { -// it.entityAttributesFilterTargetType = CONDITION_SCRIPT -// it.singleValue = """ -// echo('invalid; -// """ -// it -// } -// it -// } -// -// when: -// def result = restTemplate.postForEntity("$BASE_URI/$resolverResourceId/Filters", filter, String) -// -// then: -// result.statusCodeValue == 400 -// -// when: -// result = this.restTemplate.getForEntity("$BASE_URI/$resolverResourceId", Map) -// -// then: -// result.body.metadataFilters.size == 0 -// } + def "PUT EntityAttributesFilter and update it"() { + given: 'MetadataResolver with attached entity attributes is available in data store' + def resolver = generator.buildRandomMetadataResolverOfType('FileBacked') + resolver.metadataFilters << generator.entityAttributesFilter() + def filterResourceId = resolver.metadataFilters[0].resourceId + def resolverResourceId = resolver.resourceId + metadataResolverRepository.save(resolver) + MetadataResolver openSamlRepresentation = metadataResolverConverterService.convertToOpenSamlRepresentation(resolver) + OpenSamlChainingMetadataResolverUtil.updateChainingMetadataResolver((OpenSamlChainingMetadataResolver) chainingMetadataResolver, openSamlRepresentation) + + when: 'GET request is made with resource Id matching the existing filter' + def result = this.restTemplate.getForEntity("$BASE_URI/$resolverResourceId/Filters/$filterResourceId", String) + def existingFilterMap = jsonSlurper.parseText(result.body) + + and: 'PUT call is made with modified filter state' + existingFilterMap.name = 'Entity Attributes Filter Updated' + def updatedResultFromPUT = this.restTemplate.exchange( + "$BASE_URI/$resolverResourceId/Filters/$filterResourceId", + PUT, + createRequestHttpEntityFor { JsonOutput.toJson(existingFilterMap) }, String) + + then: + updatedResultFromPUT.statusCode.value() == 200 + } + + def "DELETE Filter"() { + given: 'MetadataResolver with attached filter is available in data store' + def resolver = generator.buildRandomMetadataResolverOfType('FileBacked') + resolver.metadataFilters << generator.entityAttributesFilter() + def filterResourceId = resolver.metadataFilters[0].resourceId + def resolverResourceId = resolver.resourceId + metadataResolverRepository.save(resolver) + + + when: 'GET request is made with resource Id matching the existing filter' + def result = this.restTemplate.getForEntity("$BASE_URI/$resolverResourceId/Filters/$filterResourceId", String) + + then: + result.statusCode.value() == 200 + + and: 'DELETE call is made and then GET call is made for the just deleted resource' + restTemplate.delete("$BASE_URI/$resolverResourceId/Filters/$filterResourceId") + def GETResultAfterDelete = this.restTemplate.getForEntity("$BASE_URI/$resolverResourceId/Filters/$filterResourceId", String) + + then: 'The deleted resource is gone' + GETResultAfterDelete.statusCode.value() == 404 + } + + def "DELETE Filter with resolver having more than TWO filters attached"() { + given: 'MetadataResolver with 3 attached filters is available in data store' + def resolver = generator.buildRandomMetadataResolverOfType('FileBacked') + resolver.metadataFilters << generator.entityAttributesFilter() + resolver.metadataFilters << generator.entityAttributesFilter() + resolver.metadataFilters << generator.entityAttributesFilter() + resolver.metadataFilters << generator.entityAttributesFilter() + resolver.metadataFilters << generator.entityAttributesFilter() + resolver.metadataFilters << generator.entityAttributesFilter() + resolver.metadataFilters << generator.entityAttributesFilter() + def filter_THREE_ResourceId = resolver.metadataFilters[2].resourceId + def filter_SIX_ResourceId = resolver.metadataFilters[5].resourceId + def resolverResourceId = resolver.resourceId + metadataResolverRepository.save(resolver) + + when: 'GET resolver to count the original number of filters' + def originalResolverResult = this.restTemplate.getForEntity("$BASE_URI/$resolverResourceId", Map) + + then: + originalResolverResult.body.metadataFilters.size == 7 + + when: 'DELETE call is made for one of the filters and then GET call is made for the just deleted filter' + restTemplate.delete("$BASE_URI/$resolverResourceId/Filters/$filter_SIX_ResourceId") + def GETResultAfterDelete = this.restTemplate.getForEntity("$BASE_URI/$resolverResourceId/Filters/$filter_SIX_ResourceId", String) + + then: 'The deleted resource is gone' + GETResultAfterDelete.statusCodeValue == 404 + + and: 'GET resolver to count modified number of filters' + def resolverResult_2 = this.restTemplate.getForEntity("$BASE_URI/$resolverResourceId", Map) + + then: + resolverResult_2.body.metadataFilters.size == 6 + + and: 'DELETE call is made for one of the filters and then GET call is made for the just deleted filter' + restTemplate.delete("$BASE_URI/$resolverResourceId/Filters/$filter_THREE_ResourceId") + def GETResultAfterDelete_2 = this.restTemplate.getForEntity("$BASE_URI/$resolverResourceId/Filters/$filter_THREE_ResourceId", String) + + then: 'The deleted resource is gone' + GETResultAfterDelete_2.statusCodeValue == 404 + + and: 'GET resolver to count modified number of filters' + def resolverResult_3 = this.restTemplate.getForEntity("$BASE_URI/$resolverResourceId", Map) + + then: + resolverResult_3.body.metadataFilters.size == 5 + } + + def "POST new Filter updates resolver's modifiedDate - SHIBUI-1500"() { + given: 'MetadataResolver with attached entity attributes is available in data store' + def resolver = generator.buildRandomMetadataResolverOfType('FileBacked') + def filter = generator.entityAttributesFilter() + def resolverResourceId = resolver.resourceId + metadataResolverRepository.save(resolver) + MetadataResolver openSamlRepresentation = metadataResolverConverterService.convertToOpenSamlRepresentation(resolver) + OpenSamlChainingMetadataResolverUtil.updateChainingMetadataResolver((OpenSamlChainingMetadataResolver) chainingMetadataResolver, openSamlRepresentation) + + when: 'Resolver without filter is fetched' + def result = this.restTemplate.getForEntity("$BASE_URI/$resolverResourceId", String) + def originalModifiedDate = jsonSlurper.parseText(result.body).modifiedDate + + and: 'POST call is made with new filter' + result = restTemplate.postForEntity("$BASE_URI/$resolverResourceId/Filters", filter, String) + def afterFilterAddedModifiedDate = jsonSlurper.parseText(result.body).modifiedDate + + then: + originalModifiedDate < afterFilterAddedModifiedDate + } + + def "EntityAttributesFilter with invalid script does not result in persisting that filter"() { + def resolver = generator.buildRandomMetadataResolverOfType('FileBacked') + def resolverResourceId = resolver.resourceId + metadataResolverRepository.save(resolver) + MetadataResolver openSamlRepresentation = metadataResolverConverterService.convertToOpenSamlRepresentation(resolver) + OpenSamlChainingMetadataResolverUtil.updateChainingMetadataResolver((OpenSamlChainingMetadataResolver) chainingMetadataResolver, openSamlRepresentation) + def filter = new EntityAttributesFilter().with { + it.name = 'SHIBUI-1249' + it.resourceId = 'SHIBUI-1249' + it.entityAttributesFilterTarget = new EntityAttributesFilterTarget().with { + it.entityAttributesFilterTargetType = CONDITION_SCRIPT + it.singleValue = """ + echo('invalid; + """ + it + } + it + } + + when: + def result = restTemplate.postForEntity("$BASE_URI/$resolverResourceId/Filters", filter, String) + + then: + result.statusCodeValue == 400 + + when: + result = this.restTemplate.getForEntity("$BASE_URI/$resolverResourceId", Map) + + then: + result.body.metadataFilters.size == 0 + } private HttpEntity createRequestHttpEntityFor(Closure jsonBodySupplier) { new HttpEntity(jsonBodySupplier(), ['Content-Type': 'application/json'] as HttpHeaders)