diff --git a/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy b/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy index 8cb3df104..92d53ff65 100644 --- a/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy +++ b/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy @@ -150,6 +150,37 @@ class MetadataResolverControllerVersionEndpointsIntegrationTests extends Specifi mrv2.body.name == 'resolverUPDATED' } + def "SHIBUI-2182"() { + given: + def mr = new DynamicHttpMetadataResolver().with { + it.name = 'resolver2' + it.metadataRequestURLConstructionScheme = new RegexScheme().with { + it.match = 'This is the match field' + it.content = 'some content' + it + } + it + } + mr = repository.save(mr) + //Will create a second version for UPDATE revision + mr.name = 'resolverUPDATED' + mr.metadataRequestURLConstructionScheme.match = 'This is the match field too' + repository.save(mr) + + when: + def allVersions = getAllMetadataResolverVersions(mr.resourceId, List) + def mrv1 = getMetadataResolverForVersion(mr.resourceId, allVersions.body[0].id, MetadataResolver) + def mrv2 = getMetadataResolverForVersion(mr.resourceId, allVersions.body[1].id, MetadataResolver) + + then: + mrv1.statusCodeValue == 200 + mrv1.body.name == 'resolver2' + mrv1.body.metadataRequestURLConstructionScheme.match == 'This is the match field' + mrv2.statusCodeValue == 200 + mrv2.body.name == 'resolverUPDATED' + mrv2.body.metadataRequestURLConstructionScheme.match == 'This is the match field too' + } + def "SHIBUI-1386"() { given: MetadataResolver mr = new FileBackedHttpMetadataResolver(name: 'testme') @@ -292,4 +323,4 @@ trait AttributeReleaseAndOverrides { Map overrides(int filterIndex) { (this.metadataFilters[filterIndex] as EntityAttributesFilter).relyingPartyOverrides } -} +} \ No newline at end of file diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataRequestURLConstructionScheme.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataRequestURLConstructionScheme.java index a1223840e..e24b5cb02 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataRequestURLConstructionScheme.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataRequestURLConstructionScheme.java @@ -64,4 +64,7 @@ public String toString() { String type; String content; -} + + @Transient + String match; +} \ No newline at end of file diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EnversMetadataResolverVersionService.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EnversMetadataResolverVersionService.java index b0d90195f..375e91ad6 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EnversMetadataResolverVersionService.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EnversMetadataResolverVersionService.java @@ -1,9 +1,14 @@ package edu.internet2.tier.shibboleth.admin.ui.service; import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilter; +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.DynamicHttpMetadataResolver; +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataRequestURLConstructionScheme; import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver; +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.RegexScheme; import edu.internet2.tier.shibboleth.admin.ui.domain.versioning.Version; import edu.internet2.tier.shibboleth.admin.ui.envers.EnversVersionServiceSupport; +import org.springframework.aop.framework.Advised; +import org.springframework.aop.support.AopUtils; import java.util.List; @@ -36,8 +41,26 @@ public MetadataResolver findSpecificVersionOfMetadataResolver(String resourceId, //The @PostLoad is not honored by Envers. So need to do this manually for EntityAttributesFilters //So the correct representation is built and returned to upstream clients expecting JSON resolver.entityAttributesFilterIntoTransientRepresentation(); + if (resolver instanceof DynamicHttpMetadataResolver) { + MetadataRequestURLConstructionScheme scheme = ((DynamicHttpMetadataResolver)resolver).getMetadataRequestURLConstructionScheme(); + RegexScheme rs = null; + try { + rs = getTargetObject(scheme, RegexScheme.class); + ((DynamicHttpMetadataResolver)resolver).setMetadataRequestURLConstructionScheme(rs); + } + catch (Exception e) { + } + } return resolver; + } + @SuppressWarnings({"unchecked"}) + protected T getTargetObject(Object proxy, Class targetClass) throws Exception { + if (AopUtils.isJdkDynamicProxy(proxy)) { + return (T) ((Advised)proxy).getTargetSource().getTarget(); + } else { + return (T) proxy; // expected to be cglib proxy then, which is simply a specialized class + } } -} +} \ No newline at end of file