Skip to content

Commit

Permalink
SHIBUI-2182
Browse files Browse the repository at this point in the history
"match" was not coming through in the JSON (Regex URL Scheme for DynamicHttpMetadataProvider
  • Loading branch information
chasegawa committed Oct 27, 2021
1 parent 168c892 commit a40d3fc
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand Down Expand Up @@ -292,4 +323,4 @@ trait AttributeReleaseAndOverrides {
Map<String, Object> overrides(int filterIndex) {
(this.metadataFilters[filterIndex] as EntityAttributesFilter).relyingPartyOverrides
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,7 @@ public String toString() {
String type;

String content;
}

@Transient
String match;
}
Original file line number Diff line number Diff line change
@@ -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;

Expand Down Expand Up @@ -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> T getTargetObject(Object proxy, Class<T> 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
}
}
}
}

0 comments on commit a40d3fc

Please sign in to comment.