Skip to content

Commit

Permalink
[SHIBUI-661]
Browse files Browse the repository at this point in the history
Added support to XML generation for EntityAttributesFilter for target
types CONDITION_SCRIPT and REGEX. Added helper method that evaluates
regex and generates tiny script. Unit tests forthcoming.
  • Loading branch information
Bill Smith committed Aug 21, 2018
1 parent 62b6183 commit af9975a
Showing 1 changed file with 39 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ class JPAMetadataResolverServiceImpl implements MetadataResolverService {
(List<Attribute>) (List<? extends Attribute>) entityAttributesFilter.getAttributes()
)
}
//TODO: else if CONDITION_SCRIPT/REGEX, add new rule
// new ScriptedPredicate, new EvaluableScript
target.setRules(rules)
metadataFilters.add(target)
}
Expand Down Expand Up @@ -146,15 +148,47 @@ class JPAMetadataResolverServiceImpl implements MetadataResolverService {
filter.attributes.each { attribute ->
mkp.yieldUnescaped(openSamlObjects.marshalToXmlString(attribute, false))
}
if (filter.entityAttributesFilterTarget.entityAttributesFilterTargetType == EntityAttributesFilterTarget
.EntityAttributesFilterTargetType.ENTITY) {
filter.entityAttributesFilterTarget.value.each {
Entity(it)
}
switch (filter.entityAttributesFilterTarget.entityAttributesFilterTargetType) {
case EntityAttributesFilterTarget
.EntityAttributesFilterTargetType.ENTITY:
filter.entityAttributesFilterTarget.value.each {
Entity(it)
}
break
case EntityAttributesFilterTarget
.EntityAttributesFilterTargetType.CONDITION_SCRIPT:
case EntityAttributesFilterTarget
.EntityAttributesFilterTargetType.REGEX:
ConditionScript() {
Script() {
def script
if (filter.entityAttributesFilterTarget.entityAttributesFilterTargetType ==
EntityAttributesFilterTarget.EntityAttributesFilterTargetType.CONDITION_SCRIPT) {
script = filter.entityAttributesFilterTarget.value
} else if (filter.entityAttributesFilterTarget.entityAttributesFilterTargetType ==
EntityAttributesFilterTarget.EntityAttributesFilterTargetType.REGEX) {
//TODO: Is the "entityId" supposed to be the resourceId of the filter? Or something else?
//TODO: Assuming value is a list of one element? Error check?
script = generateRegexScript(filter.entityAttributesFilterTarget.value.get(0), filter.resourceId)
}
mkp.yieldUnescaped("<![CDATA[${script}]]>")
}
}
break
default:
//TODO do nothing?
break
}
}
}

private String generateRegexScript(String regex, String entityId) {
def matched = entityId ==~ ~regex
return '''\
"use strict";
${matched};'''
}

void constructXmlNodeForFilter(EntityRoleWhiteListFilter filter, def markupBuilderDelegate) {
markupBuilderDelegate.MetadataFilter(
'xsi:type': 'EntityRoleWhiteList',
Expand Down

0 comments on commit af9975a

Please sign in to comment.