Skip to content

Commit

Permalink
SHIBUI-522: EntityRoleWhiteListFilter REST endpoint impl
Browse files Browse the repository at this point in the history
  • Loading branch information
dima767 committed Jun 5, 2018
1 parent 3cd7ebd commit 090eb94
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 13 deletions.
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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();

Expand All @@ -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<Void>(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);

Expand All @@ -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/")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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))

Expand All @@ -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()
Expand All @@ -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))

Expand Down

0 comments on commit 090eb94

Please sign in to comment.