[java-identity-provider COMMIT] in /trunk/idp-attribute-filter-impl/src: main/java/net/shibboleth/idp/attribute/filte...

noreply at shibboleth.net noreply at shibboleth.net
Tue Jul 29 05:00:12 EDT 2014


Author: rdw
Date: Tue Jul 29 05:00:12 2014
New Revision: 6352

URL: http://svn.shibboleth.net/view/java-identity-provider?rev=6352&view=rev
Log:
Add profileContext to scripted attribute filters (+tests)

Modified:
    trunk/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcher.java
    trunk/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/impl/ScriptedPolicyRule.java
    trunk/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcherTest.java
    trunk/idp-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/impl/ScriptedPolicyRuleTest.java

Modified: trunk/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcher.java
URL: http://svn.shibboleth.net/view/java-identity-provider/trunk/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcher.java?rev=6352&r1=6351&r2=6352&view=diff
==============================================================================
--- trunk/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcher.java (original)
+++ trunk/idp-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcher.java Tue Jul 29 05:00:12 2014
@@ -32,6 +32,8 @@
 import net.shibboleth.idp.attribute.IdPAttributeValue;
 import net.shibboleth.idp.attribute.filter.Matcher;
 import net.shibboleth.idp.attribute.filter.context.AttributeFilterContext;
+import net.shibboleth.idp.profile.context.RelyingPartyContext;
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
 import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
@@ -41,9 +43,13 @@
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.scripting.EvaluableScript;
 
+import org.opensaml.messaging.context.navigate.ParentContextLookup;
+import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
 import com.google.common.base.Objects;
 
 /**
@@ -55,10 +61,13 @@
         UnmodifiableComponent {
 
     /** Class logger. */
-    private final Logger log = LoggerFactory.getLogger(ScriptedMatcher.class);
+    @Nonnull private final Logger log = LoggerFactory.getLogger(ScriptedMatcher.class);
 
     /** Script to be evaluated. */
-    private EvaluableScript script;
+    @NonnullAfterInit private EvaluableScript script;
+
+    /** Strategy used to locate the {@link ProfileRequestContext} to use. */
+    @Nonnull private Function<AttributeFilterContext, ProfileRequestContext> prcLookupStrategy;
 
     /** Log prefix. */
     private String logPrefix;
@@ -70,6 +79,10 @@
      */
     public ScriptedMatcher(@Nonnull final EvaluableScript matchingScript) {
         setScript(matchingScript);
+        // Defaults to ProfileRequestContext -> RelyingPartyContext -> AttributeContext.
+        prcLookupStrategy =
+                Functions.compose(new ParentContextLookup<RelyingPartyContext, ProfileRequestContext>(),
+                        new ParentContextLookup<AttributeFilterContext, RelyingPartyContext>());
     }
 
     /**
@@ -90,6 +103,20 @@
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
 
         script = Constraint.isNotNull(matcherScript, "Attribute value matching script can not be null");
+    }
+
+    /**
+     * Set the strategy used to locate the {@link ProfileRequestContext} associated with a given
+     * {@link AttributeFilterContext}.
+     * 
+     * @param strategy strategy used to locate the {@link ProfileRequestContext} associated with a given
+     *            {@link AttributeFilterContext}
+     */
+    public void setProfileRequestContextLookupStrategy(
+            @Nonnull final Function<AttributeFilterContext, ProfileRequestContext> strategy) {
+        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+
+        prcLookupStrategy = Constraint.isNotNull(strategy, "ProfileRequestContext lookup strategy cannot be null");
     }
 
     /**
@@ -115,6 +142,8 @@
         final EvaluableScript currentScript = script;
         final SimpleScriptContext scriptContext = new SimpleScriptContext();
         scriptContext.setAttribute("filterContext", filterContext, ScriptContext.ENGINE_SCOPE);
+        scriptContext
+                .setAttribute("profileContext", prcLookupStrategy.apply(filterContext), ScriptContext.ENGINE_SCOPE);
         scriptContext.setAttribute("attribute", attribute, ScriptContext.ENGINE_SCOPE);
 
         try {
@@ -141,11 +170,10 @@
     /** {@inheritDoc} */

[... 425 lines stripped ...]


More information about the commits mailing list