[java-shib-attribute] branch main updated: Update scripted extension APIs and add unit tests.
Scott Cantor
cantor.2 at osu.edu
Thu Jun 23 13:55:51 UTC 2022
This is an automated email from the git hooks/post-receive script.
scantor pushed a commit to branch main
in repository java-shib-attribute.
View the commit online:
http://git.shibboleth.net/view/?p=java-shib-attribute.git;a=commit;h=4040d79db36dddc4f731edfcac70e7325d56067d
The following commit(s) were added to refs/heads/main by this push:
new 4040d79db Update scripted extension APIs and add unit tests.
4040d79db is described below
commit 4040d79db36dddc4f731edfcac70e7325d56067d
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Thu Jun 23 09:55:48 2022 -0400
Update scripted extension APIs and add unit tests.
---
.../filter/FilterScriptContextExtender.java | 29 ++++++++++
.../filter/matcher/impl/ScriptedMatcher.java | 35 +++++++++++--
.../filter/policyrule/impl/ScriptedPolicyRule.java | 33 ++++++++++++
.../spring/basic/impl/ScriptedMatcherParser.java | 2 +
.../filter/spring/basic/ScriptedTest.java | 12 ++---
.../spring/testing/MockScriptContextExtender.java | 45 ++++++++++++++++
.../idp/attribute/filter/matcher/customBean.xml | 8 ++-
.../attribute/filter/matcher/scripted-rhino.xml | 4 +-
.../idp/attribute/filter/matcher/scripted.xml | 5 +-
.../idp/attribute/filter/policyrule/file.script | 2 +-
.../attribute/filter/policyrule/file.script.rhino | 2 +-
.../scripted/ResolverScriptContextExtender.java | 29 ++++++++++
.../ad/impl/ScriptedAttributeDefinition.java | 7 +--
.../resolver/dc/impl/ScriptedDataConnector.java | 36 +++++++------
...arser.java => ScriptedDataConnectorParser.java} | 7 +--
.../impl/AttributeResolverNamespaceHandler.java | 4 +-
.../dc/impl/ScriptDataConnectorParserTest.java | 8 +--
.../spring/testing/MockScriptContextExtender.java | 45 ++++++++++++++++
.../idp/attribute/resolver/filter/resolver.xml | 33 ------------
.../idp/attribute/resolver/filter/service.xml | 61 ----------------------
.../attribute/resolver/filter/withAttributes.xml | 26 ---------
.../idp/attribute/resolver/spring/customBean.xml | 2 +
.../resolver/spring/dc/scriptedConnector.8.js | 5 ++
23 files changed, 277 insertions(+), 163 deletions(-)
diff --git a/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/FilterScriptContextExtender.java b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/FilterScriptContextExtender.java
new file mode 100644
index 000000000..357f8497a
--- /dev/null
+++ b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/FilterScriptContextExtender.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.shibboleth.idp.attribute.filter;
+
+import net.shibboleth.utilities.java.support.scripting.ScriptContextExtender;
+
+/**
+ * Marker interface for an extender of filter engine scripting.
+ *
+ * @since 5.0.0
+ */
+public interface FilterScriptContextExtender extends ScriptContextExtender {
+
+}
\ No newline at end of file
diff --git a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcher.java b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcher.java
index 4d0c1ccf9..b434e24e9 100644
--- a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcher.java
+++ b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcher.java
@@ -17,11 +17,12 @@
package net.shibboleth.idp.attribute.filter.matcher.impl;
+import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashSet;
+import java.util.List;
import java.util.Objects;
import java.util.Set;
-import java.util.function.Function;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -30,6 +31,7 @@ import javax.script.ScriptContext;
import net.shibboleth.idp.attribute.IdPAttribute;
import net.shibboleth.idp.attribute.IdPAttributeValue;
+import net.shibboleth.idp.attribute.filter.FilterScriptContextExtender;
import net.shibboleth.idp.attribute.filter.Matcher;
import net.shibboleth.idp.attribute.filter.context.AttributeFilterContext;
import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
@@ -66,11 +68,16 @@ public class ScriptedMatcher extends AbstractIdentifiableInitializableComponent
/** Evaluator. */
@NonnullAfterInit private MatcherScriptEvaluator scriptEvaluator;
+ /** Extenders for script context. */
+ @Nonnull @NonnullElements private Collection<FilterScriptContextExtender> contextExtenders;
+
/** Custom object for script. */
@Nullable private Object customObject;
-
- /** Strategy used to locate the {@link ProfileRequestContext} to use. */
- @Nonnull private Function<AttributeFilterContext,ProfileRequestContext> prcLookupStrategy;
+
+ /** Constructor. */
+ public ScriptedMatcher() {
+ contextExtenders = Collections.emptyList();
+ }
/**
* Return the custom (externally provided) object.
@@ -114,6 +121,25 @@ public class ScriptedMatcher extends AbstractIdentifiableInitializableComponent
script = Constraint.isNotNull(matcherScript, "Attribute value matching script cannot be null");
}
+ /**
+ * Set any script context extenders to apply.
+ *
+ * @param extenders script extenders
+ *
+ * @since 5.0.0
+ */
+ @Nullable public void setScriptContextExtenders(
+ @Nullable @NonnullElements final Collection<FilterScriptContextExtender> extenders) {
+ ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+ ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+
+ if (extenders != null) {
+ contextExtenders = List.copyOf(extenders);
+ } else {
+ contextExtenders = Collections.emptyList();
+ }
+ }
+
/** {@inheritDoc} */
@Override
protected void doInitialize() throws ComponentInitializationException {
@@ -125,6 +151,7 @@ public class ScriptedMatcher extends AbstractIdentifiableInitializableComponent
scriptEvaluator = new MatcherScriptEvaluator(script);
scriptEvaluator.setCustomObject(customObject);
+ scriptEvaluator.setContextExtenders(contextExtenders);
final StringBuilder builder = new StringBuilder("Scripted Attribute Filter '").append(getId()).append("':");
scriptEvaluator.setLogPrefix(builder.toString());
diff --git a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/impl/ScriptedPolicyRule.java b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/impl/ScriptedPolicyRule.java
index 87a0c8cfc..0766c64ce 100644
--- a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/impl/ScriptedPolicyRule.java
+++ b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/impl/ScriptedPolicyRule.java
@@ -17,6 +17,9 @@
package net.shibboleth.idp.attribute.filter.policyrule.impl;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
import java.util.Objects;
import javax.annotation.Nonnull;
@@ -24,9 +27,11 @@ import javax.annotation.Nullable;
import javax.annotation.concurrent.ThreadSafe;
import javax.script.ScriptContext;
+import net.shibboleth.idp.attribute.filter.FilterScriptContextExtender;
import net.shibboleth.idp.attribute.filter.PolicyRequirementRule;
import net.shibboleth.idp.attribute.filter.context.AttributeFilterContext;
import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
import net.shibboleth.utilities.java.support.component.ComponentSupport;
@@ -59,9 +64,17 @@ public class ScriptedPolicyRule extends AbstractIdentifiableInitializableCompone
/** Evaluator. */
@NonnullAfterInit private PolicyRuleScriptEvaluator scriptEvaluator;
+ /** Extenders for script context. */
+ @Nonnull @NonnullElements private Collection<FilterScriptContextExtender> contextExtenders;
+
/** The custom object we inject into all scripts. */
@Nullable private Object customObject;
+ /** Constructor. */
+ public ScriptedPolicyRule() {
+ contextExtenders = Collections.emptyList();
+ }
+
/**
* Return the custom (externally provided) object.
*
@@ -104,6 +117,25 @@ public class ScriptedPolicyRule extends AbstractIdentifiableInitializableCompone
script = Constraint.isNotNull(matcherScript, "Attribute value matching script can not be null");
}
+ /**
+ * Set any script context extenders to apply.
+ *
+ * @param extenders script extenders
+ *
+ * @since 5.0.0
+ */
+ @Nullable public void setScriptContextExtenders(
+ @Nullable @NonnullElements final Collection<FilterScriptContextExtender> extenders) {
+ ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+ ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+
+ if (extenders != null) {
+ contextExtenders = List.copyOf(extenders);
+ } else {
+ contextExtenders = Collections.emptyList();
+ }
+ }
+
/**
* Calculate the PolicyRule.
* <p>
@@ -141,6 +173,7 @@ public class ScriptedPolicyRule extends AbstractIdentifiableInitializableCompone
scriptEvaluator = new PolicyRuleScriptEvaluator(script);
scriptEvaluator.setCustomObject(customObject);
+ scriptEvaluator.setContextExtenders(contextExtenders);
final StringBuilder builder = new StringBuilder("Scripted Attribute Filter '").append(getId()).append("':");
scriptEvaluator.setLogPrefix(builder.toString());
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/ScriptedMatcherParser.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/ScriptedMatcherParser.java
index 50625d130..5e5e993f0 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/ScriptedMatcherParser.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/basic/impl/ScriptedMatcherParser.java
@@ -68,6 +68,8 @@ public class ScriptedMatcherParser extends BaseFilterParser {
@Override protected void doParse(@Nonnull final Element config, @Nonnull final ParserContext parserContext,
@Nonnull final BeanDefinitionBuilder builder) {
super.doParse(config, parserContext, builder);
+
+ builder.addAutowiredProperty("scriptContextExtenders");
final String myId = builder.getBeanDefinition().getAttribute(BaseFilterParser.QUALIFIED_ID).toString();
final String logPrefix = new StringBuilder("Scipted Filter '").append(myId).append("' :").toString();
diff --git a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/basic/ScriptedTest.java b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/basic/ScriptedTest.java
index 27969d5ef..5e0e8c3ed 100644
--- a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/basic/ScriptedTest.java
+++ b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/basic/ScriptedTest.java
@@ -60,7 +60,7 @@ public class ScriptedTest extends BaseAttributeFilterParserTest {
@Test public void policy() throws ComponentInitializationException {
final ScriptedPolicyRule rule = (ScriptedPolicyRule) getPolicyRule(NASHORN_SCRIPT);
- AttributeFilterContext filterContext = new AttributeFilterContext();
+ final AttributeFilterContext filterContext = new AttributeFilterContext();
filterContext.setPrefilteredIdPAttributes(epaUid.values());
assertEquals(rule.matches(filterContext), Tristate.FALSE);
}
@@ -68,7 +68,7 @@ public class ScriptedTest extends BaseAttributeFilterParserTest {
@Test public void policyRhino() throws ComponentInitializationException {
final ScriptedPolicyRule rule = (ScriptedPolicyRule) getPolicyRule(RHINO_SCRIPT);
- AttributeFilterContext filterContext = new AttributeFilterContext();
+ final AttributeFilterContext filterContext = new AttributeFilterContext();
filterContext.setPrefilteredIdPAttributes(epaUid.values());
assertEquals(rule.matches(filterContext), Tristate.FALSE);
}
@@ -82,7 +82,7 @@ public class ScriptedTest extends BaseAttributeFilterParserTest {
@Test public void matcher() throws ComponentInitializationException {
final ScriptedMatcher matcher = (ScriptedMatcher) getMatcher(NASHORN_SCRIPT);
- AttributeFilterContext filterContext = new AttributeFilterContext();
+ final AttributeFilterContext filterContext = new AttributeFilterContext();
filterContext.setPrefilteredIdPAttributes(epaUid.values());
Set<IdPAttributeValue> x = matcher.getMatchingValues(epaUid.get("uid"), filterContext);
assertEquals(x.size(), 1);
@@ -93,7 +93,7 @@ public class ScriptedTest extends BaseAttributeFilterParserTest {
@Test public void matcherRhino() throws ComponentInitializationException {
final ScriptedMatcher matcher = (ScriptedMatcher) getMatcher(RHINO_SCRIPT);
- AttributeFilterContext filterContext = new AttributeFilterContext();
+ final AttributeFilterContext filterContext = new AttributeFilterContext();
filterContext.setPrefilteredIdPAttributes(epaUid.values());
Set<IdPAttributeValue> x = matcher.getMatchingValues(epaUid.get("uid"), filterContext);
assertEquals(x.size(), 1);
@@ -118,8 +118,6 @@ public class ScriptedTest extends BaseAttributeFilterParserTest {
assertEquals(custom.size(), 1);
assertEquals(custom.get("bar"), "foo");
-
}
-
-}
+}
\ No newline at end of file
diff --git a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/testing/MockScriptContextExtender.java b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/testing/MockScriptContextExtender.java
new file mode 100644
index 000000000..4413c5373
--- /dev/null
+++ b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/testing/MockScriptContextExtender.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.shibboleth.idp.attribute.filter.spring.testing;
+
+import javax.annotation.Nonnull;
+import javax.script.ScriptContext;
+
+import net.shibboleth.idp.attribute.filter.FilterScriptContextExtender;
+import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.utilities.java.support.scripting.ScriptContextExtender;
+
+/**
+ * Mock implementation of {@link ScriptContextExtender}.
+ *
+ * @since 5.0.0
+ */
+public class MockScriptContextExtender implements FilterScriptContextExtender {
+
+ /** Context extension name. */
+ @Nonnull @NotEmpty public static final String NAME = "zorkmid";
+
+ /** Context extension value. */
+ @Nonnull @NotEmpty public static final String VALUE = "frobnitz";
+
+ /** {@inheritDoc} */
+ public void extendContext(@Nonnull final ScriptContext scriptContext) {
+ scriptContext.setAttribute(NAME, VALUE, ScriptContext.ENGINE_SCOPE);
+ }
+
+}
\ No newline at end of file
diff --git a/shib-attribute-filter-spring/src/test/resources/net/shibboleth/idp/attribute/filter/matcher/customBean.xml b/shib-attribute-filter-spring/src/test/resources/net/shibboleth/idp/attribute/filter/matcher/customBean.xml
index 9ca79241d..0fbc9f33b 100644
--- a/shib-attribute-filter-spring/src/test/resources/net/shibboleth/idp/attribute/filter/matcher/customBean.xml
+++ b/shib-attribute-filter-spring/src/test/resources/net/shibboleth/idp/attribute/filter/matcher/customBean.xml
@@ -8,13 +8,17 @@
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
- default-init-method="initialize"
- default-destroy-method="destroy">
+ default-init-method="initialize">
+
<util:map id="shibboleth.CustomScriptObject">
<entry key="foo" value="bar"/>
</util:map>
<util:map id="other.CustomScriptObject">
<entry key="bar" value="foo"/>
</util:map>
+
+ <!-- Should be auto-wired via builders into Scripted plugins. -->
+ <bean class="net.shibboleth.idp.attribute.filter.spring.testing.MockScriptContextExtender" />
+
</beans>
\ No newline at end of file
diff --git a/shib-attribute-filter-spring/src/test/resources/net/shibboleth/idp/attribute/filter/matcher/scripted-rhino.xml b/shib-attribute-filter-spring/src/test/resources/net/shibboleth/idp/attribute/filter/matcher/scripted-rhino.xml
index 262a9d298..f73b41391 100644
--- a/shib-attribute-filter-spring/src/test/resources/net/shibboleth/idp/attribute/filter/matcher/scripted-rhino.xml
+++ b/shib-attribute-filter-spring/src/test/resources/net/shibboleth/idp/attribute/filter/matcher/scripted-rhino.xml
@@ -7,7 +7,9 @@
<![CDATA[
importPackage(Packages.java.util);
x = new HashSet();
- x.add(attribute.getValues().iterator().next());
+ if (typeof zorkmid != "undefined" && zorkmid != null && zorkmid == "frobnitz") {
+ x.add(attribute.getValues().iterator().next());
+ }
x;
]]>
</Script>
diff --git a/shib-attribute-filter-spring/src/test/resources/net/shibboleth/idp/attribute/filter/matcher/scripted.xml b/shib-attribute-filter-spring/src/test/resources/net/shibboleth/idp/attribute/filter/matcher/scripted.xml
index 4596bd68d..cfd93e5a4 100644
--- a/shib-attribute-filter-spring/src/test/resources/net/shibboleth/idp/attribute/filter/matcher/scripted.xml
+++ b/shib-attribute-filter-spring/src/test/resources/net/shibboleth/idp/attribute/filter/matcher/scripted.xml
@@ -5,7 +5,10 @@
<![CDATA[
hs = Java.type("java.util.HashSet");
x = new hs();
- x.add(attribute.getValues().iterator().next());
+
+ if (typeof zorkmid != "undefined" && zorkmid != null && zorkmid == "frobnitz") {
+ x.add(attribute.getValues().iterator().next());
+ }
x;
]]>
</Script>
diff --git a/shib-attribute-filter-spring/src/test/resources/net/shibboleth/idp/attribute/filter/policyrule/file.script b/shib-attribute-filter-spring/src/test/resources/net/shibboleth/idp/attribute/filter/policyrule/file.script
index 9370154d1..e0e06ffbd 100644
--- a/shib-attribute-filter-spring/src/test/resources/net/shibboleth/idp/attribute/filter/policyrule/file.script
+++ b/shib-attribute-filter-spring/src/test/resources/net/shibboleth/idp/attribute/filter/policyrule/file.script
@@ -1,2 +1,2 @@
bool = Java.type("java.lang.Boolean");
-new bool(false);
\ No newline at end of file
+new bool(typeof zorkmid == "undefined" || zorkmid == null || zorkmid != "frobnitz")
diff --git a/shib-attribute-filter-spring/src/test/resources/net/shibboleth/idp/attribute/filter/policyrule/file.script.rhino b/shib-attribute-filter-spring/src/test/resources/net/shibboleth/idp/attribute/filter/policyrule/file.script.rhino
index 44f4cd4a5..cb3668328 100644
--- a/shib-attribute-filter-spring/src/test/resources/net/shibboleth/idp/attribute/filter/policyrule/file.script.rhino
+++ b/shib-attribute-filter-spring/src/test/resources/net/shibboleth/idp/attribute/filter/policyrule/file.script.rhino
@@ -1 +1 @@
-new java.lang.Boolean(false);
\ No newline at end of file
+new java.lang.Boolean(typeof zorkmid == "undefined" || zorkmid == null || zorkmid != "frobnitz");
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/scripted/ResolverScriptContextExtender.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/scripted/ResolverScriptContextExtender.java
new file mode 100644
index 000000000..9516185ae
--- /dev/null
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/scripted/ResolverScriptContextExtender.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.shibboleth.idp.attribute.resolver.scripted;
+
+import net.shibboleth.utilities.java.support.scripting.ScriptContextExtender;
+
+/**
+ * Marker interface for an extender of resolver scripting.
+ *
+ * @since 5.0.0
+ */
+public interface ResolverScriptContextExtender extends ScriptContextExtender {
+
+}
\ No newline at end of file
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeDefinition.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeDefinition.java
index 63377ce7d..f305f184b 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeDefinition.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeDefinition.java
@@ -40,6 +40,7 @@ import net.shibboleth.idp.attribute.resolver.PluginDependencySupport;
import net.shibboleth.idp.attribute.resolver.ResolutionException;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
+import net.shibboleth.idp.attribute.resolver.scripted.ResolverScriptContextExtender;
import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
@@ -47,7 +48,7 @@ import net.shibboleth.utilities.java.support.component.ComponentSupport;
import net.shibboleth.utilities.java.support.logic.Constraint;
import net.shibboleth.utilities.java.support.scripting.AbstractScriptEvaluator;
import net.shibboleth.utilities.java.support.scripting.EvaluableScript;
-import net.shibboleth.utilities.java.support.scripting.ScriptContextExtender;
+
/**
* An {@link net.shibboleth.idp.attribute.resolver.AttributeDefinition} that executes a script in order to populate the
@@ -84,7 +85,7 @@ public class ScriptedAttributeDefinition extends AbstractAttributeDefinition {
@NonnullAfterInit private AttributeDefinitionScriptEvaluator scriptEvaluator;
/** Extenders for script context. */
- @Nonnull @NonnullElements private Collection<ScriptContextExtender> contextExtenders;
+ @Nonnull @NonnullElements private Collection<ResolverScriptContextExtender> contextExtenders;
/** The custom object we inject into all scripts. */
@Nullable private Object customObject;
@@ -144,7 +145,7 @@ public class ScriptedAttributeDefinition extends AbstractAttributeDefinition {
* @since 5.0.0
*/
@Nullable public void setScriptContextExtenders(
- @Nullable @NonnullElements final Collection<ScriptContextExtender> extenders) {
+ @Nullable @NonnullElements final Collection<ResolverScriptContextExtender> extenders) {
ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnector.java
index 8160fca7e..d2b9c21d5 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/ScriptedDataConnector.java
@@ -25,14 +25,12 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.function.Function;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.script.ScriptContext;
import javax.script.ScriptException;
-import org.opensaml.messaging.context.navigate.ParentContextLookup;
import org.opensaml.profile.context.ProfileRequestContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -45,7 +43,9 @@ import net.shibboleth.idp.attribute.resolver.ResolutionException;
import net.shibboleth.idp.attribute.resolver.ad.impl.ScriptedIdPAttributeImpl;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
+import net.shibboleth.idp.attribute.resolver.scripted.ResolverScriptContextExtender;
import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
import net.shibboleth.utilities.java.support.component.ComponentSupport;
import net.shibboleth.utilities.java.support.logic.Constraint;
@@ -69,16 +69,15 @@ public class ScriptedDataConnector extends AbstractDataConnector {
/** Evaluator. */
@NonnullAfterInit private DataConnectorScriptEvaluator scriptEvaluator;
- /** Strategy used to locate the {@link ProfileRequestContext} to use. */
- @Nonnull private Function<AttributeResolutionContext,ProfileRequestContext> prcLookupStrategy;
-
+ /** Extenders for script context. */
+ @Nonnull @NonnullElements private Collection<ResolverScriptContextExtender> contextExtenders;
+
/** The custom object we inject into all scripts. */
@Nullable private Object customObject;
/** Constructor. */
public ScriptedDataConnector() {
- // Defaults to ProfileRequestContext -> RelyingPartyContext -> AttributeContext.
- prcLookupStrategy = new ParentContextLookup<>(ProfileRequestContext.class);
+ contextExtenders = Collections.emptyList();
}
/**
@@ -124,18 +123,22 @@ public class ScriptedDataConnector extends AbstractDataConnector {
}
/**
- * Set the strategy used to locate the {@link ProfileRequestContext} associated with a given
- * {@link AttributeResolutionContext}.
+ * Set any script context extenders to apply.
*
- * @param strategy strategy used to locate the {@link ProfileRequestContext} associated with a given
- * {@link AttributeResolutionContext}
+ * @param extenders script extenders
+ *
+ * @since 5.0.0
*/
- public void setProfileRequestContextLookupStrategy(
- @Nonnull final Function<AttributeResolutionContext, ProfileRequestContext> strategy) {
+ @Nullable public void setScriptContextExtenders(
+ @Nullable @NonnullElements final Collection<ResolverScriptContextExtender> extenders) {
ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
- prcLookupStrategy = Constraint.isNotNull(strategy, "ProfileRequestContext lookup strategy cannot be null");
+ if (extenders != null) {
+ contextExtenders = List.copyOf(extenders);
+ } else {
+ contextExtenders = Collections.emptyList();
+ }
}
/** {@inheritDoc} */
@@ -148,6 +151,7 @@ public class ScriptedDataConnector extends AbstractDataConnector {
scriptEvaluator = new DataConnectorScriptEvaluator(script);
scriptEvaluator.setCustomObject(customObject);
+ scriptEvaluator.setContextExtenders(contextExtenders);
scriptEvaluator.setLogPrefix(getLogPrefix());
}
@@ -205,7 +209,9 @@ public class ScriptedDataConnector extends AbstractDataConnector {
log.debug("{} Adding current attribute resolution contexts to script context", getLogPrefix());
scriptContext.setAttribute("resolutionContext", input[0], ScriptContext.ENGINE_SCOPE);
- final ProfileRequestContext prc = prcLookupStrategy.apply((AttributeResolutionContext) input[0]);
+ final ProfileRequestContext prc =
+ ((AttributeResolutionContext) input[0]).getProfileRequestContextLookupStrategy().apply(
+ (AttributeResolutionContext) input[0]);
if (null == prc) {
log.error("{} ProfileRequestContext could not be located", getLogPrefix());
}
diff --git a/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/ScriptDataConnectorParser.java b/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/ScriptedDataConnectorParser.java
similarity index 96%
rename from shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/ScriptDataConnectorParser.java
rename to shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/ScriptedDataConnectorParser.java
index b5fb3e2e3..9ab2f1235 100644
--- a/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/ScriptDataConnectorParser.java
+++ b/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/ScriptedDataConnectorParser.java
@@ -31,7 +31,6 @@ import org.w3c.dom.Element;
import net.shibboleth.ext.spring.factory.EvaluableScriptFactoryBean;
import net.shibboleth.idp.attribute.resolver.dc.impl.ScriptedDataConnector;
-import net.shibboleth.idp.attribute.resolver.spring.ad.impl.ScriptedAttributeDefinitionParser;
import net.shibboleth.idp.attribute.resolver.spring.dc.AbstractDataConnectorParser;
import net.shibboleth.idp.attribute.resolver.spring.impl.AttributeResolverNamespaceHandler;
import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
@@ -40,7 +39,7 @@ import net.shibboleth.utilities.java.support.primitive.StringSupport;
import net.shibboleth.utilities.java.support.xml.ElementSupport;
/** Bean definition Parser for a {@link ScriptedDataConnector}. */
-public class ScriptDataConnectorParser extends AbstractDataConnectorParser {
+public class ScriptedDataConnectorParser extends AbstractDataConnectorParser {
/** Schema type - resolver. */
@Nonnull public static final QName TYPE_NAME_RESOLVER =
@@ -55,7 +54,7 @@ public class ScriptDataConnectorParser extends AbstractDataConnectorParser {
new QName(AttributeResolverNamespaceHandler.NAMESPACE, "Script");
/** Class logger. */
- @Nonnull private final Logger log = LoggerFactory.getLogger(ScriptedAttributeDefinitionParser.class);
+ @Nonnull private final Logger log = LoggerFactory.getLogger(ScriptedDataConnectorParser.class);
/** {@inheritDoc} */
@Override protected Class<ScriptedDataConnector> getNativeBeanClass() {
@@ -70,6 +69,8 @@ public class ScriptDataConnectorParser extends AbstractDataConnectorParser {
DeprecationSupport.warnOnce(ObjectType.ATTRIBUTE, ATTR_SPRING_RESOURCE, null,null);
}
super.doParse(config, parserContext, builder);
+
+ builder.addAutowiredProperty("scriptContextExtenders");
}
/** {@inheritDoc} */
diff --git a/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/impl/AttributeResolverNamespaceHandler.java b/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/impl/AttributeResolverNamespaceHandler.java
index 90f7c0dba..b9dca0289 100644
--- a/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/impl/AttributeResolverNamespaceHandler.java
+++ b/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/impl/AttributeResolverNamespaceHandler.java
@@ -39,7 +39,7 @@ import net.shibboleth.idp.attribute.resolver.spring.ad.mapped.impl.ValueMapParse
import net.shibboleth.idp.attribute.resolver.spring.dc.http.impl.HTTPDataConnectorParser;
import net.shibboleth.idp.attribute.resolver.spring.dc.impl.ComputedIdDataConnectorParser;
import net.shibboleth.idp.attribute.resolver.spring.dc.impl.PairwiseIdDataConnectorParser;
-import net.shibboleth.idp.attribute.resolver.spring.dc.impl.ScriptDataConnectorParser;
+import net.shibboleth.idp.attribute.resolver.spring.dc.impl.ScriptedDataConnectorParser;
import net.shibboleth.idp.attribute.resolver.spring.dc.impl.StaticDataConnectorParser;
import net.shibboleth.idp.attribute.resolver.spring.dc.impl.StoredIdDataConnectorParser;
import net.shibboleth.idp.attribute.resolver.spring.dc.ldap.impl.LDAPDataConnectorParser;
@@ -116,7 +116,7 @@ public class AttributeResolverNamespaceHandler extends BaseSpringNamespaceHandle
registerBeanDefinitionParser(PairwiseIdDataConnectorParser.TYPE_NAME_RESOLVER,
new PairwiseIdDataConnectorParser());
registerBeanDefinitionParser(HTTPDataConnectorParser.TYPE_NAME, new HTTPDataConnectorParser());
- registerBeanDefinitionParser(ScriptDataConnectorParser.TYPE_NAME_RESOLVER, new ScriptDataConnectorParser());
+ registerBeanDefinitionParser(ScriptedDataConnectorParser.TYPE_NAME_RESOLVER, new ScriptedDataConnectorParser());
registerBeanDefinitionParser(StaticDataConnectorParser.TYPE_NAME_RESOLVER, new StaticDataConnectorParser());
registerBeanDefinitionParser(StoredIdDataConnectorParser.TYPE_NAME_RESOLVER, new StoredIdDataConnectorParser());
// Implement in IdP layer.
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/ScriptDataConnectorParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/ScriptDataConnectorParserTest.java
index 2dc6a33da..4c4c53a58 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/ScriptDataConnectorParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/ScriptDataConnectorParserTest.java
@@ -32,13 +32,12 @@ import net.shibboleth.idp.attribute.StringAttributeValue;
import net.shibboleth.idp.attribute.resolver.ResolutionException;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
import net.shibboleth.idp.attribute.resolver.dc.impl.ScriptedDataConnector;
-import net.shibboleth.idp.attribute.resolver.spring.dc.impl.ScriptDataConnectorParser;
import net.shibboleth.idp.attribute.resolver.spring.testing.BaseAttributeDefinitionParserTest;
import net.shibboleth.idp.attribute.resolver.testing.TestSources;
import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
/**
- * test for {@link ScriptDataConnectorParser}
+ * test for {@link ScriptedDataConnectorParser}
*/
@SuppressWarnings("javadoc")
public class ScriptDataConnectorParserTest extends BaseAttributeDefinitionParserTest {
@@ -63,7 +62,7 @@ public class ScriptDataConnectorParserTest extends BaseAttributeDefinitionParser
TestSources.SP_ENTITY_ID);
final Map<String, IdPAttribute> result = dataConnector.resolve(context);
- assertEquals(result.size(), 2);
+ assertEquals(result.size(), 3);
List<IdPAttributeValue> values = result.get("ScriptedOne").getValues();
assertEquals(values.size(), 2);
@@ -76,6 +75,9 @@ public class ScriptDataConnectorParserTest extends BaseAttributeDefinitionParser
assertTrue(values.contains(new StringAttributeValue("2Value")));
assertTrue(values.contains(new StringAttributeValue("3Value")));
+ values = result.get("zorkmid").getValues();
+ assertEquals(values.size(), 1);
+ assertTrue(values.contains(new StringAttributeValue("frobnitz")));
}
@Test public void tooManyFiles() throws ComponentInitializationException, ResolutionException {
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/testing/MockScriptContextExtender.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/testing/MockScriptContextExtender.java
new file mode 100644
index 000000000..5af339c24
--- /dev/null
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/testing/MockScriptContextExtender.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.shibboleth.idp.attribute.resolver.spring.testing;
+
+import javax.annotation.Nonnull;
+import javax.script.ScriptContext;
+
+import net.shibboleth.idp.attribute.resolver.scripted.ResolverScriptContextExtender;
+import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.utilities.java.support.scripting.ScriptContextExtender;
+
+/**
+ * Mock implementation of {@link ScriptContextExtender}.
+ *
+ * @since 5.0.0
+ */
+public class MockScriptContextExtender implements ResolverScriptContextExtender {
+
+ /** Context extension name. */
+ @Nonnull @NotEmpty public static final String NAME = "zorkmid";
+
+ /** Context extension value. */
+ @Nonnull @NotEmpty public static final String VALUE = "frobnitz";
+
+ /** {@inheritDoc} */
+ public void extendContext(@Nonnull final ScriptContext scriptContext) {
+ scriptContext.setAttribute(NAME, VALUE, ScriptContext.ENGINE_SCOPE);
+ }
+
+}
\ No newline at end of file
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/filter/resolver.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/filter/resolver.xml
deleted file mode 100644
index 04f4be695..000000000
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/filter/resolver.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<AttributeResolver xmlns="urn:mace:shibboleth:2.0:resolver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- id="TestID"
- xsi:schemaLocation="urn:mace:shibboleth:2.0:resolver http://shibboleth.net/schema/idp/shibboleth-attribute-resolver.xsd">
-
- <DataConnector id="staticAttributes" xsi:type="Static">
- <Attribute id="eduPersonAffiliation"><Value>member</Value></Attribute>
- <Attribute id="eduPersonEntitlement">
- <Value>urn:example.org:entitlement:entitlement1</Value>
- <Value>urn:mace:dir:entitlement:common-lib-terms</Value>
- </Attribute>
- </DataConnector>
-
- <AttributeDefinition id="dn1" xsi:type="Simple" >
- <InputDataConnector ref="staticAttributes" attributeNames="dn1"></InputDataConnector>
- <AttributeEncoder xsi:type="SAML2String"
- name="urn:mace:dir:attribute-def:displayName" nameFormat="urn:mace:shibboleth:1.0:attributeNamespace:uri"
- friendlyName="dn1" />
- </AttributeDefinition>
-
- <AttributeDefinition id="dn2" xsi:type="Simple" >
- <InputDataConnector ref="staticAttributes" attributeNames="dn2"/>
- <AttributeEncoder xsi:type="SAML2String"
- name="urn:oid:2.16.840.1.113730.3.1.241" nameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
- friendlyName="dn2" />
- </AttributeDefinition>
-
- <AttributeDefinition id="eppn" xsi:type="Simple" >
- <AttributeEncoder xsi:type="SAML2String" name="urn:mace:dir:attribute-def:eduPersonPrincipalName" friendlyName="dn2"
- nameFormat="urn:mace:shibboleth:1.0:attributeNamespace:uri"/>
- <InputDataConnector ref="staticAttributes" allAttributes="true"/>
- </AttributeDefinition>
-
-</AttributeResolver>
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/filter/service.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/filter/service.xml
deleted file mode 100644
index ba6c027fb..000000000
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/filter/service.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:util="http://www.springframework.org/schema/util"
- xmlns:p="http://www.springframework.org/schema/p"
- xmlns:c="http://www.springframework.org/schema/c"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
- http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
- default-init-method="initialize" default-destroy-method="destroy">
-
- <context:annotation-config />
-
- <bean id="shibboleth.AttributeRegistryService" class="net.shibboleth.ext.spring.service.ReloadableSpringService"
- depends-on="shibboleth.VelocityEngine" p:failFast="true"
- p:reloadCheckDelay="0">
-
- <constructor-arg name="claz"
- value="net.shibboleth.idp.attribute.transcoding.AttributeTranscoderRegistry" />
- <constructor-arg name="strategy">
- <bean class="net.shibboleth.idp.attribute.transcoding.impl.AttributeRegistryServiceStrategy"
- p:id="shibboleth.AttributeRegistryService" />
- </constructor-arg>
- <property name="serviceConfigurations">
- <util:list>
- <value>/net/shibboleth/idp/attribute/resolver/filter/resolver.xml</value>
- </util:list>
- </property>
- </bean>
-
- <bean class="net.shibboleth.idp.attribute.transcoding.BasicNamingFunction"
- c:claz="org.opensaml.saml.saml2.core.Attribute">
- <constructor-arg name="function">
- <bean class="net.shibboleth.idp.saml.attribute.transcoding.AbstractSAML2AttributeTranscoder.NamingFunction" />
- </constructor-arg>
- </bean>
-
- <bean class="net.shibboleth.idp.attribute.transcoding.BasicNamingFunction"
- c:claz="org.opensaml.saml.saml1.core.AttributeDesignator">
- <constructor-arg name="function">
- <bean class="net.shibboleth.idp.saml.attribute.transcoding.AbstractSAML1AttributeTranscoder.NamingFunction" />
- </constructor-arg>
- </bean>
-
- <bean id="shibboleth.VelocityEngine"
- class="net.shibboleth.ext.spring.velocity.VelocityEngineFactoryBean">
- <property name="velocityProperties">
- <props>
- <prop key="resource.loaders">classpath, string</prop>
- <prop key="resource.loader.classpath.class">
- org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
- </prop>
- <prop key="resource.loader.string.class">
- org.apache.velocity.runtime.resource.loader.StringResourceLoader
- </prop>
- </props>
- </property>
- </bean>
-
-</beans>
\ No newline at end of file
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/filter/withAttributes.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/filter/withAttributes.xml
deleted file mode 100644
index b94e1651f..000000000
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/filter/withAttributes.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<EntityDescriptor entityID="https://example.org/shibboleth"
- xmlns="urn:oasis:names:tc:SAML:2.0:metadata">
- <Extensions xmlns:mdattr="urn:oasis:names:tc:SAML:metadata:attribute">
- <mdattr:EntityAttributes xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
- <saml:Attribute Name="http://macedir.org/entity-category"
- NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
- <saml:AttributeValue>http://id.incommon.org/category/research-and-scholarship
- </saml:AttributeValue>
- </saml:Attribute>
- </mdattr:EntityAttributes>
- </Extensions>
- <SPSSODescriptor
- protocolSupportEnumeration="urn:oasis:names:tc:SAML:1.1:protocol urn:oasis:names:tc:SAML:2.0:protocol">
- <AssertionConsumerService Location="https://foo" index="1" Binding="urn:foo" />
- <AttributeConsumingService xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
- index="1">
- <ServiceName xml:lang="en">Foo</ServiceName>
- <RequestedAttribute FriendlyName="displayName"
- Name="urn:mace:dir:attribute-def:displayName" NameFormat="urn:mace:shibboleth:1.0:attributeNamespace:uri" />
- <RequestedAttribute FriendlyName="displayName" isRequired="true"
- Name="urn:oid:2.16.840.1.113730.3.1.241" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" />
- <RequestedAttribute FriendlyName="eduPersonPrincipalName"
- Name="urn:mace:dir:attribute-def:eduPersonPrincipalName" NameFormat="urn:mace:shibboleth:1.0:attributeNamespace:uri" />
- </AttributeConsumingService>
- </SPSSODescriptor>
-</EntityDescriptor>
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/customBean.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/customBean.xml
index 247e20bbb..dd6791596 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/customBean.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/customBean.xml
@@ -26,6 +26,8 @@
class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"
p:placeholderPrefix="%{" p:placeholderSuffix="}" />
+ <bean class="net.shibboleth.idp.attribute.resolver.spring.testing.MockScriptContextExtender" />
+
<!-- Necessary for encoder parsing to function, normally part of registry wiring. -->
<bean id="SAML2StringTranscoder"
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/scriptedConnector.8.js b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/scriptedConnector.8.js
index a3358da57..0ef646b5c 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/scriptedConnector.8.js
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/scriptedConnector.8.js
@@ -17,3 +17,8 @@ set.add(new StringAttributeValue("3Value"));
attr.setValues(set);
connectorResults.add(attr);
+attr = new IdPAttribute("zorkmid");
+set = new HashSet(1);
+set.add(new StringAttributeValue(zorkmid));
+attr.setValues(set);
+connectorResults.add(attr);
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list