From 090eb94af5a3ad1003d366749c2a07e4f0217c2c Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Tue, 5 Jun 2018 10:54:38 -0400 Subject: [PATCH] SHIBUI-522: EntityRoleWhiteListFilter REST endpoint impl --- .../controller/MetadataFiltersController.java | 41 ++++++++++++++----- .../MetadataFiltersControllerTests.groovy | 6 +-- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersController.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersController.java index 31c955d37..e810f9380 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersController.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersController.java @@ -1,6 +1,7 @@ package edu.internet2.tier.shibboleth.admin.ui.controller; import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilter; +import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityRoleWhiteListFilter; import edu.internet2.tier.shibboleth.admin.ui.domain.filters.MetadataFilter; import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.FilterRepresentation; import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver; @@ -78,8 +79,8 @@ public ResponseEntity create(@PathVariable String metadataResolverId, @Reques } - @PutMapping("/Filters/EntityAttributes/{resourceId}") - public ResponseEntity update(@PathVariable String metadataResolverId, @RequestBody EntityAttributesFilter updatedFilter) { + @PutMapping("/Filters/{resourceId}") + public ResponseEntity update(@PathVariable String metadataResolverId, @RequestBody MetadataFilter updatedFilter) { //TODO: replace with get by metadataResolverId once we have more than one MetadataResolver metadataResolver = repository.findAll().iterator().next(); @@ -94,18 +95,15 @@ public ResponseEntity update(@PathVariable String metadataResolverId, @Reques "We're going to go ahead and use the first one, but .. look in to this!", updatedFilter.getResourceId()); } - EntityAttributesFilter filter = EntityAttributesFilter.class.cast(filters.get(0)); + MetadataFilter filterTobeUpdated = filters.get(0); // Verify we're the only one attempting to update the filter - if (updatedFilter.getVersion() != filter.hashCode()) { + if (updatedFilter.getVersion() != filterTobeUpdated.hashCode()) { return new ResponseEntity(HttpStatus.CONFLICT); } - filter.setName(updatedFilter.getName()); - filter.setFilterEnabled(updatedFilter.isFilterEnabled()); - filter.setEntityAttributesFilterTarget(updatedFilter.getEntityAttributesFilterTarget()); - filter.setRelyingPartyOverrides(updatedFilter.getRelyingPartyOverrides()); - filter.setAttributeRelease(updatedFilter.getAttributeRelease()); - filter.intoTransientRepresentation(); + filterTobeUpdated.setName(updatedFilter.getName()); + filterTobeUpdated.setFilterEnabled(updatedFilter.isFilterEnabled()); + updateConcreteFilterTypeData(filterTobeUpdated, updatedFilter); MetadataResolver persistedMr = repository.save(metadataResolver); @@ -117,6 +115,29 @@ public ResponseEntity update(@PathVariable String metadataResolverId, @Reques .collect(Collectors.toList()).get(0)); } + /** + * + * Add else if instanceof block here for each concrete filter types we add in the future + */ + private void updateConcreteFilterTypeData(MetadataFilter filterToBeUpdated, MetadataFilter filterWithUpdatedData) { + if(filterWithUpdatedData instanceof EntityAttributesFilter) { + EntityAttributesFilter toFilter = EntityAttributesFilter.class.cast(filterToBeUpdated); + EntityAttributesFilter fromFilter = EntityAttributesFilter.class.cast(filterWithUpdatedData); + toFilter.setEntityAttributesFilterTarget(fromFilter.getEntityAttributesFilterTarget()); + toFilter.setRelyingPartyOverrides(fromFilter.getRelyingPartyOverrides()); + toFilter.setAttributeRelease(fromFilter.getAttributeRelease()); + toFilter.intoTransientRepresentation(); + } + else if(filterWithUpdatedData instanceof EntityRoleWhiteListFilter) { + EntityRoleWhiteListFilter toFilter = EntityRoleWhiteListFilter.class.cast(filterToBeUpdated); + EntityRoleWhiteListFilter fromFilter = EntityRoleWhiteListFilter.class.cast(filterWithUpdatedData); + toFilter.setRemoveEmptyEntitiesDescriptors(fromFilter.getRemoveEmptyEntitiesDescriptors()); + toFilter.setRemoveRolelessEntityDescriptors(fromFilter.getRemoveRolelessEntityDescriptors()); + toFilter.setRetainedRoles(fromFilter.getRetainedRoles()); + } + //TODO: add other types of concrete filters update here + } + private static URI getResourceUriFor(MetadataResolver mr, String filterResourceId) { return ServletUriComponentsBuilder .fromCurrentServletMapping().path("/api/MetadataResolver/") diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerTests.groovy index ed21a85ce..3c0a0ab8d 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerTests.groovy @@ -187,7 +187,7 @@ class MetadataFiltersControllerTests extends Specification { when: def result = mockMvc.perform( - put("/api/MetadataResolver/foo/Filters/EntityAttributes/$filterUUID") + put("/api/MetadataResolver/foo/Filters/$filterUUID") .contentType(APPLICATION_JSON_UTF8) .content(postedJsonBody)) @@ -198,7 +198,7 @@ class MetadataFiltersControllerTests extends Specification { .andExpect(content().json(JsonOutput.toJson(expectedJson), true)) } - def "FilterController.update EntityAttributes filter 409's if the version numbers don't match"() { + def "FilterController.update filter 409's if the version numbers don't match"() { given: def randomFilter = testObjectGenerator.entityAttributesFilter() def updatedFilter = testObjectGenerator.entityAttributesFilter() @@ -216,7 +216,7 @@ class MetadataFiltersControllerTests extends Specification { when: def result = mockMvc.perform( - put("/api/MetadataResolver/foo/Filters/EntityAttributes/$filterUUID") + put("/api/MetadataResolver/foo/Filters/$filterUUID") .contentType(APPLICATION_JSON_UTF8) .content(postedJsonBody))