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 bea96989f..815360908 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 @@ -38,8 +38,8 @@ import org.w3c.dom.Document import javax.annotation.Nonnull -import static edu.internet2.tier.shibboleth.admin.ui.domain.filters.NameIdFormatFilterTarget.NameIdFormatFilterTargetType.ENTITY import static edu.internet2.tier.shibboleth.admin.ui.domain.filters.NameIdFormatFilterTarget.NameIdFormatFilterTargetType.CONDITION_SCRIPT +import static edu.internet2.tier.shibboleth.admin.ui.domain.filters.NameIdFormatFilterTarget.NameIdFormatFilterTargetType.ENTITY import static edu.internet2.tier.shibboleth.admin.ui.domain.filters.NameIdFormatFilterTarget.NameIdFormatFilterTargetType.REGEX import static edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.ResourceBackedMetadataResolver.ResourceType.CLASSPATH import static edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.ResourceBackedMetadataResolver.ResourceType.SVN @@ -114,7 +114,7 @@ class JPAMetadataResolverServiceImpl implements MetadataResolverService { if (metadataFilter instanceof NameIdFormatFilter) { NameIdFormatFilter nameIdFormatFilter = NameIdFormatFilter.cast(metadataFilter) NameIDFormatFilter openSamlTargetFilter = new OpenSamlNameIdFormatFilter() - openSamlTargetFilter.removeExistingFormats = nameIdFormatFilter.removeExistingFormats + openSamlTargetFilter.removeExistingFormats = nameIdFormatFilter.removeExistingFormats == null ? false : nameIdFormatFilter.removeExistingFormats Map, Collection> predicateRules = [:] def type = nameIdFormatFilter.nameIdFormatFilterTarget.nameIdFormatFilterTargetType def values = nameIdFormatFilter.nameIdFormatFilterTarget.value @@ -543,7 +543,7 @@ class JPAMetadataResolverServiceImpl implements MetadataResolverService { 'username': resolver.svnMetadataResource.username, 'password': resolver.svnMetadataResource.password, 'proxyHost': resolver.svnMetadataResource.proxyHost, - 'proxyPort': resolver.svnMetadataResource.proxyHost, + 'proxyPort': resolver.svnMetadataResource.proxyPort, 'proxyUserName': resolver.svnMetadataResource.proxyUserName, 'proxyPassword': resolver.svnMetadataResource.proxyPassword) 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 3762b7b4c..ebfe9979d 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 @@ -222,12 +222,12 @@ public ResponseEntity update(@PathVariable String metadataResolverId, } /** - * IF the filter is of type "EntityAttributes" AND the target is "ENTITY" THEN check each of the values (which are entityIds) + * If the filter is "Targetable" AND the target is "ENTITY" THEN check each of the values (which are entityIds) */ private void validateFilterOrThrowHttp400(MetadataFilter createdFilter) { if (createdFilter instanceof ITargetable){ ITargetable filter = (ITargetable) createdFilter; - if ("ENTITY".equals(filter.getTarget().getTargetTypeValue())) { + if (filter.getTarget() != null && "ENTITY".equals(filter.getTarget().getTargetTypeValue())) { for (String entityId : filter.getTarget().getValue()) { if (!groupService.doesStringMatchGroupPattern(userService.getCurrentUser().getGroupId(), entityId)) { throw HTTP_400_BAD_REQUEST_EXCEPTION.get(); diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/EntityAttributesFilter.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/EntityAttributesFilter.java index c267d4204..cb3a85f3e 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/EntityAttributesFilter.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/EntityAttributesFilter.java @@ -33,7 +33,7 @@ public class EntityAttributesFilter extends MetadataFilter implements ITargetabl @Transient private List attributeRelease = new ArrayList<>(); - @OneToOne(cascade = CascadeType.ALL) + @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER) private EntityAttributesFilterTarget entityAttributesFilterTarget; @Transient diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/EntityAttributesFilterTarget.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/EntityAttributesFilterTarget.java index 8d9247074..b74658b14 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/EntityAttributesFilterTarget.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/EntityAttributesFilterTarget.java @@ -20,7 +20,7 @@ public class EntityAttributesFilterTarget extends AbstractAuditable implements I private EntityAttributesFilterTargetType entityAttributesFilterTargetType; - @ElementCollection + @ElementCollection (fetch = FetchType.EAGER) @OrderColumn @Column(length = 760) private List value; @@ -32,11 +32,12 @@ public EntityAttributesFilterTargetType getEntityAttributesFilterTargetType() { @Override @JsonIgnore public String getTargetTypeValue() { - return entityAttributesFilterTargetType.name(); + return entityAttributesFilterTargetType == null ? "NONE" : entityAttributesFilterTargetType.name(); } + @Override public List getValue() { - return value; + return value == null ? new ArrayList<>() : value; } public void setEntityAttributesFilterTargetType(EntityAttributesFilterTargetType entityAttributesFilterTarget) { diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolver.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolver.java index 13d573b56..f9347fab3 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolver.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolver.java @@ -84,6 +84,10 @@ public class MetadataResolver extends AbstractAuditable { @Transient private Integer version; + public Boolean getDoInitialization() { + return doInitialization == null ? false : doInitialization; + } + @JsonGetter("version") public int getVersion() { if (this.version != null && this.version != 0 ) { @@ -111,4 +115,4 @@ public void entityAttributesFilterIntoTransientRepresentation() { .map(EntityAttributesFilter.class::cast) .forEach(EntityAttributesFilter::intoTransientRepresentation); } -} +} \ No newline at end of file diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/FilterRepositoryTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/FilterRepositoryTests.groovy index 3a5b28713..ccc04ad61 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/FilterRepositoryTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/FilterRepositoryTests.groovy @@ -59,11 +59,13 @@ class FilterRepositoryTests extends AbstractBaseDataJpaTest { def filter = new ObjectMapper().readValue(entityAttributesFilterJson.bytes, EntityAttributesFilter) def persistedFilter = filterRepository.save(filter) entityManager.flush() + entityManager.clear() then: - def item1 = filterRepository.findByResourceId(persistedFilter.resourceId) + def item1 = filterRepository.findByResourceId("29a5d409-562a-41cd-acee-e9b3d7098d05") + entityManager.flush() entityManager.clear() - def item2 = filterRepository.findByResourceId(persistedFilter.resourceId) + def item2 = filterRepository.findByResourceId("29a5d409-562a-41cd-acee-e9b3d7098d05") item1.hashCode() == item2.hashCode() }