Skip to content

Commit

Permalink
SHIBUI-1783
Browse files Browse the repository at this point in the history
Removed added code around custom entity attributes and filters that
ended up being un-needed.

Fixed bug (NPE) on creating attribute from custom entity attribute
  • Loading branch information
chasegawa committed Jun 18, 2021
1 parent 1c8e24e commit 93f4a5f
Show file tree
Hide file tree
Showing 9 changed files with 8 additions and 271 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,12 @@ public String getDisplayType() {
return attributeType.name().toLowerCase();
}

@Override
public String getAttributeFriendlyName() {
// This is here only to ensure proper functionality works until the full definition is revised with all the fields
return attributeFriendlyName == null ? name : attributeFriendlyName;
}

@Override
public Boolean getFromConfigFile() {
return Boolean.FALSE;
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -53,16 +53,7 @@ public EntityAttributesFilter() {

@Transient
private List<String> attributeRelease = new ArrayList<>();

@JsonIgnore
@OneToMany(cascade = CascadeType.ALL, mappedBy = "entityAttributesFilter", orphanRemoval = true)
private Set<CustomEntityAttributeFilterValue> customEntityAttributes = new HashSet<>();

public void setCustomEntityAttributes (Set<CustomEntityAttributeFilterValue> newValues) {
customEntityAttributes.clear();
customEntityAttributes.addAll(newValues);
}


public void setAttributeRelease(List<String> attributeRelease) {
this.attributeRelease = attributeRelease;
this.rebuildAttributes();
Expand Down Expand Up @@ -95,7 +86,6 @@ private EntityAttributesFilter updateConcreteFilterTypeData(EntityAttributesFilt
filterToBeUpdated.setEntityAttributesFilterTarget(getEntityAttributesFilterTarget());
filterToBeUpdated.setRelyingPartyOverrides(getRelyingPartyOverrides());
filterToBeUpdated.setAttributeRelease(getAttributeRelease());
filterToBeUpdated.setCustomEntityAttributes(customEntityAttributes);
return filterToBeUpdated;
}

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,14 @@
import org.springframework.transaction.annotation.Transactional;

import edu.internet2.tier.shibboleth.admin.ui.domain.CustomEntityAttributeDefinition;
import edu.internet2.tier.shibboleth.admin.ui.domain.filters.CustomEntityAttributeFilterValue;
import edu.internet2.tier.shibboleth.admin.ui.repository.CustomEntityAttributeDefinitionRepository;
import edu.internet2.tier.shibboleth.admin.ui.repository.CustomEntityAttributeFilterValueRepository;
import edu.internet2.tier.shibboleth.admin.ui.service.events.CustomEntityAttributeDefinitionChangeEvent;

@Service
public class CustomEntityAttributesDefinitionServiceImpl implements CustomEntityAttributesDefinitionService {
@Autowired
private ApplicationEventPublisher applicationEventPublisher;

@Autowired
CustomEntityAttributeFilterValueRepository customEntityAttributeFilterValueRepository;

@Autowired
EntityManager entityManager;

Expand All @@ -40,13 +35,6 @@ public CustomEntityAttributeDefinition createOrUpdateDefinition(CustomEntityAttr
@Override
@Transactional
public void deleteDefinition(CustomEntityAttributeDefinition definition) {
// must remove any CustomEntityAttributeFilterValues first to avoid integrity constraint issues
List<CustomEntityAttributeFilterValue> customEntityValues = customEntityAttributeFilterValueRepository.findAllByCustomEntityAttributeDefinition(definition);
customEntityValues.forEach(value -> {
value.getEntityAttributesFilter().getCustomEntityAttributes().remove(value);
entityManager.remove(value);
customEntityAttributeFilterValueRepository.delete(value);
});
CustomEntityAttributeDefinition entityToRemove = repository.findByName(definition.getName());
repository.delete(entityToRemove);
notifyListeners();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import edu.internet2.tier.shibboleth.admin.ui.configuration.SearchConfiguration
import edu.internet2.tier.shibboleth.admin.ui.domain.CustomEntityAttributeDefinition
import edu.internet2.tier.shibboleth.admin.ui.opensaml.OpenSamlObjects
import edu.internet2.tier.shibboleth.admin.ui.repository.CustomEntityAttributeDefinitionRepository
import edu.internet2.tier.shibboleth.admin.ui.repository.CustomEntityAttributeFilterValueRepository
import edu.internet2.tier.shibboleth.admin.ui.security.repository.RoleRepository
import edu.internet2.tier.shibboleth.admin.ui.security.repository.UserRepository
import edu.internet2.tier.shibboleth.admin.ui.service.CustomEntityAttributesDefinitionService
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package edu.internet2.tier.shibboleth.admin.ui.configuration
import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml.OpenSamlChainingMetadataResolver
import edu.internet2.tier.shibboleth.admin.ui.opensaml.OpenSamlObjects
import edu.internet2.tier.shibboleth.admin.ui.repository.CustomEntityAttributeDefinitionRepository
import edu.internet2.tier.shibboleth.admin.ui.repository.CustomEntityAttributeFilterValueRepository
import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository
import edu.internet2.tier.shibboleth.admin.ui.security.DefaultAuditorAware
import edu.internet2.tier.shibboleth.admin.ui.service.CustomEntityAttributesDefinitionServiceImpl
Expand Down Expand Up @@ -46,10 +45,7 @@ class TestConfiguration {

@Autowired
private CustomEntityAttributeDefinitionRepository repository;

@Autowired
CustomEntityAttributeFilterValueRepository customEntityAttributeFilterValueRepository;


@Autowired
EntityManager entityManager

Expand All @@ -63,7 +59,6 @@ class TestConfiguration {
new CustomEntityAttributesDefinitionServiceImpl().with {
it.entityManager = entityManager
it.repository = repository
it.customEntityAttributeFilterValueRepository = customEntityAttributeFilterValueRepository
return it
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,6 @@ class EntityDescriptorRepositoryTest extends Specification {
@Autowired
private CustomEntityAttributeDefinitionRepository repository;

@Autowired
CustomEntityAttributeFilterValueRepository customEntityAttributeFilterValueRepository;

@Autowired
EntityManager entityManager

Expand Down Expand Up @@ -113,7 +110,6 @@ class EntityDescriptorRepositoryTest extends Specification {
new CustomEntityAttributesDefinitionServiceImpl().with {
it.entityManager = entityManager
it.repository = repository
it.customEntityAttributeFilterValueRepository = customEntityAttributeFilterValueRepository
return it
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import javax.persistence.EntityManager
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.autoconfigure.domain.EntityScan
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest
import org.springframework.context.annotation.ComponentScan
import org.springframework.data.jpa.repository.config.EnableJpaRepositories
import org.springframework.test.context.ContextConfiguration

Expand All @@ -16,28 +15,19 @@ import edu.internet2.tier.shibboleth.admin.ui.configuration.Internationalization
import edu.internet2.tier.shibboleth.admin.ui.configuration.SearchConfiguration
import edu.internet2.tier.shibboleth.admin.ui.configuration.TestConfiguration
import edu.internet2.tier.shibboleth.admin.ui.domain.CustomEntityAttributeDefinition
import edu.internet2.tier.shibboleth.admin.ui.domain.filters.CustomEntityAttributeFilterValue
import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilter
import edu.internet2.tier.shibboleth.admin.ui.service.CustomEntityAttributesDefinitionService
import edu.internet2.tier.shibboleth.admin.ui.util.TestObjectGenerator
import spock.lang.Specification

@DataJpaTest
@ContextConfiguration(classes=[CoreShibUiConfiguration, SearchConfiguration, TestConfiguration, InternationalizationConfiguration])
@EnableJpaRepositories(basePackages = ["edu.internet2.tier.shibboleth.admin.ui"])
@EntityScan("edu.internet2.tier.shibboleth.admin.ui")
@ComponentScan("edu.internet2.tier.shibboleth.admin.ui.service")
class FilterRepositoryTests extends Specification {

@Autowired
FilterRepository repositoryUnderTest

@Autowired
CustomEntityAttributesDefinitionService ceadService

@Autowired
CustomEntityAttributeFilterValueRepository ceafvRepo

@Autowired
EntityManager entityManager

Expand Down Expand Up @@ -96,172 +86,4 @@ class FilterRepositoryTests extends Specification {
persistedFilter.audId > 0L
persistedFilter.formats.size() == 1
}

def "FilterRepository + EntityAttributesFilter CRUD ops with custom entity attributes correctly"(){
given:
def ca = new CustomEntityAttributeDefinition().with {
it.name = "ca-name"
it.attributeType = "STRING"
it.defaultValue = "foo"
it
}
ceadService.createOrUpdateDefinition(ca)
entityManager.flush()
entityManager.clear()

def entityAttributesFilterJson = '''{
"name": "EntityAttributes",
"resourceId": "29a5d409-562a-41cd-acee-e9b3d7098d05",
"filterEnabled": false,
"entityAttributesFilterTarget": {
"entityAttributesFilterTargetType": "CONDITION_SCRIPT",
"value": [
"TwUuSOz5O6"
]
},
"attributeRelease": [
"WbkhLQNI3m"
],
"relyingPartyOverrides": {
"signAssertion": true,
"dontSignResponse": true,
"turnOffEncryption": true,
"useSha": true,
"ignoreAuthenticationMethod": false,
"omitNotBefore": true,
"responderId": null,
"nameIdFormats": [
"xLenUFmCLn"
],
"authenticationMethods": []
},
"@type": "EntityAttributes"
}'''
def filter = new ObjectMapper().readValue(entityAttributesFilterJson.bytes, EntityAttributesFilter.class)
def persistedFilter = repositoryUnderTest.save(filter)
entityManager.flush()

def savedFilter = repositoryUnderTest.findByResourceId(persistedFilter.resourceId)
def saveEAD = ceadService.find("ca-name")

def ceafv = new CustomEntityAttributeFilterValue().with {
it.entityAttributesFilter = savedFilter
it.customEntityAttributeDefinition = saveEAD
it.value = "bar"
it
}

def customEntityAttributes = new HashSet()

when:
customEntityAttributes.add(ceafv) // nothing to do yet, just here to let us verify nothing in the CEAFV table in 'then' block

then:
((Set)ceafvRepo.findAll()).size() == 0 //nothing yet
((EntityAttributesFilter)savedFilter).setCustomEntityAttributes(customEntityAttributes)
repositoryUnderTest.save(savedFilter)
entityManager.flush()

then:
def listOfceafv = ceafvRepo.findAll()
listOfceafv.size() == 1

def ceafvFromDb = listOfceafv.get(0).asType(CustomEntityAttributeFilterValue)
ceafvFromDb.getEntityAttributesFilter().getResourceId().equals("29a5d409-562a-41cd-acee-e9b3d7098d05")

def filterFromDb = (EntityAttributesFilter) repositoryUnderTest.findByResourceId("29a5d409-562a-41cd-acee-e9b3d7098d05")
filterFromDb.getCustomEntityAttributes().size() == 1

// now remove all
def emptySet = new HashSet()
filterFromDb.setCustomEntityAttributes(emptySet)
repositoryUnderTest.save(filterFromDb)
entityManager.flush()

ceafvRepo.findAll().size() == 0
}

def "Delete custom entity attributes definition removes entries from filter correctly"(){
given:
def ca = new CustomEntityAttributeDefinition().with {
it.name = "ca-name"
it.attributeType = "STRING"
it.defaultValue = "foo"
it
}
ceadService.createOrUpdateDefinition(ca)
entityManager.flush()
entityManager.clear()

def entityAttributesFilterJson = '''{
"name": "EntityAttributes",
"resourceId": "29a5d409-562a-41cd-acee-e9b3d7098d05",
"filterEnabled": false,
"entityAttributesFilterTarget": {
"entityAttributesFilterTargetType": "CONDITION_SCRIPT",
"value": [
"TwUuSOz5O6"
]
},
"attributeRelease": [
"WbkhLQNI3m"
],
"relyingPartyOverrides": {
"signAssertion": true,
"dontSignResponse": true,
"turnOffEncryption": true,
"useSha": true,
"ignoreAuthenticationMethod": false,
"omitNotBefore": true,
"responderId": null,
"nameIdFormats": [
"xLenUFmCLn"
],
"authenticationMethods": []
},
"@type": "EntityAttributes"
}'''
def filter = new ObjectMapper().readValue(entityAttributesFilterJson.bytes, EntityAttributesFilter.class)
def persistedFilter = repositoryUnderTest.save(filter)
entityManager.flush()

def savedFilter = repositoryUnderTest.findByResourceId(persistedFilter.resourceId)
def saveEAD = ceadService.find("ca-name");

def ceafv = new CustomEntityAttributeFilterValue().with {
it.entityAttributesFilter = savedFilter
it.customEntityAttributeDefinition = saveEAD
it.value = "bar"
it
}

def customEntityAttributes = new HashSet()

when:
customEntityAttributes.add(ceafv) // nothing to do yet, just here to let us verify nothing in the CEAFV table in 'then' block

then:
((Set)ceafvRepo.findAll()).size() == 0 //nothing yet
((EntityAttributesFilter)savedFilter).setCustomEntityAttributes(customEntityAttributes)
repositoryUnderTest.save(savedFilter)
entityManager.flush()

then:
def listOfceafv = ceafvRepo.findAll()
listOfceafv.size() == 1

def ceafvFromDb = listOfceafv.get(0).asType(CustomEntityAttributeFilterValue)
ceafvFromDb.getEntityAttributesFilter().getResourceId().equals("29a5d409-562a-41cd-acee-e9b3d7098d05")

def filterFromDb = (EntityAttributesFilter) repositoryUnderTest.findByResourceId("29a5d409-562a-41cd-acee-e9b3d7098d05")
filterFromDb.getCustomEntityAttributes().size() == 1

// now remove the definition
ceadService.deleteDefinition(saveEAD)
entityManager.flush()
entityManager.clear()

def filterFromDb2 = (EntityAttributesFilter)repositoryUnderTest.findByResourceId("29a5d409-562a-41cd-acee-e9b3d7098d05")
filterFromDb2.getCustomEntityAttributes().size() == 0
}
}

0 comments on commit 93f4a5f

Please sign in to comment.