[java-identity-provider] branch master updated: IDP-1315 relyingparties="" attribute as short cut activationCondition

Rod Widdowson rdw at steadingsoftware.com
Tue Aug 21 09:45:34 EDT 2018


This is an automated email from the git hooks/post-receive script.

rdw pushed a commit to branch master
in repository java-identity-provider.

View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=b70026c790701c3a768fcf19a1d9d38fa75b126a

The following commit(s) were added to refs/heads/master by this push:
       new  b70026c   IDP-1315 relyingparties="" attribute as short cut activationCondition
b70026c is described below

commit b70026c790701c3a768fcf19a1d9d38fa75b126a
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Tue Aug 21 14:43:59 2018 +0100

    IDP-1315 relyingparties="" attribute as short cut activationCondition
    
    https://issues.shibboleth.net/jira/browse/IDP-1315
    
    Includes tests (which also serve to test JSE-29)
---
 idp-attribute-resolver-spring/pom.xml              |  5 +++
 .../resolver/spring/BaseResolverPluginParser.java  | 10 ++++++
 .../spring/ad/SimpleAttributeParserTest.java       | 36 ++++++++++++++++++++++
 .../resolver/spring/ad/relyingParties.xml          |  8 +++++
 .../schema/shibboleth-attribute-resolver.xsd       |  9 ++++++
 5 files changed, 68 insertions(+)

diff --git a/idp-attribute-resolver-spring/pom.xml b/idp-attribute-resolver-spring/pom.xml
index 322a499..acb68dc 100644
--- a/idp-attribute-resolver-spring/pom.xml
+++ b/idp-attribute-resolver-spring/pom.xml
@@ -50,6 +50,11 @@
         </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
+            <artifactId>idp-profile-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
             <artifactId>idp-profile-spring</artifactId>
             <version>${project.version}</version>
         </dependency>
diff --git a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/BaseResolverPluginParser.java b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/BaseResolverPluginParser.java
index e26ade1..3591cb2 100644
--- a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/BaseResolverPluginParser.java
+++ b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/BaseResolverPluginParser.java
@@ -24,6 +24,7 @@ import javax.annotation.Nonnull;
 import net.shibboleth.ext.spring.util.SpringSupport;
 import net.shibboleth.idp.attribute.resolver.spring.impl.InputAttributeDefinitionParser;
 import net.shibboleth.idp.attribute.resolver.spring.impl.InputDataConnectorParser;
+import net.shibboleth.idp.profile.logic.RelyingPartyIdPredicate;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 import net.shibboleth.utilities.java.support.xml.ElementSupport;
@@ -68,8 +69,17 @@ public abstract class BaseResolverPluginParser extends AbstractSingleBeanDefinit
         builder.setDestroyMethodName("destroy");
 
         if (config.hasAttributeNS(null, "activationConditionRef")) {
+            if (config.hasAttributeNS(null, "relyingParties")) {
+                log.warn("relyingParties ignore, using activationConditionRef");
+            }
             builder.addPropertyReference("activationCondition",
                     StringSupport.trimOrNull(config.getAttributeNS(null, "activationConditionRef")));
+        } else if (config.hasAttributeNS(null, "relyingParties")) {
+            final BeanDefinitionBuilder rpBuilder =
+                    BeanDefinitionBuilder.genericBeanDefinition(RelyingPartyIdPredicate.class);
+            rpBuilder .addConstructorArgValue(
+                    SpringSupport.getAttributeValueAsList(config.getAttributeNodeNS(null, "relyingParties")));
+            builder.addPropertyValue("activationCondition", rpBuilder.getBeanDefinition());
         }
 
         if (config.hasAttributeNS(null, "profileContextStrategyRef")) {
diff --git a/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/SimpleAttributeParserTest.java b/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/SimpleAttributeParserTest.java
index 11127c6..33db632 100644
--- a/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/SimpleAttributeParserTest.java
+++ b/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/ad/SimpleAttributeParserTest.java
@@ -23,14 +23,23 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 
+import org.opensaml.profile.context.ProfileRequestContext;
+import org.springframework.context.support.GenericApplicationContext;
+import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
+import org.springframework.core.env.MutablePropertySources;
+import org.springframework.core.env.StandardEnvironment;
+import org.springframework.mock.env.MockPropertySource;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
+import net.shibboleth.ext.spring.context.FilesystemGenericApplicationContext;
 import net.shibboleth.idp.attribute.resolver.AttributeDefinition;
 import net.shibboleth.idp.attribute.resolver.ResolverPluginDependency;
 import net.shibboleth.idp.attribute.resolver.ad.impl.SimpleAttributeDefinition;
 import net.shibboleth.idp.attribute.resolver.spring.BaseAttributeDefinitionParserTest;
 import net.shibboleth.idp.attribute.resolver.spring.ad.impl.SimpleAttributeDefinitionParser;
+import net.shibboleth.idp.profile.context.RelyingPartyContext;
+import net.shibboleth.idp.profile.logic.RelyingPartyIdPredicate;
 import net.shibboleth.idp.saml.attribute.encoding.impl.SAML1StringAttributeEncoder;
 import net.shibboleth.idp.saml.attribute.encoding.impl.SAML2StringAttributeEncoder;
 import net.shibboleth.idp.saml.impl.TestSources;
@@ -137,4 +146,31 @@ public class SimpleAttributeParserTest extends BaseAttributeDefinitionParserTest
     @Test public void bad() throws ComponentInitializationException {
         getAttributeDefn("simpleAttributeBadValues.xml", SimpleAttributeDefinition.class);
     }
+
+    @Test public void relyingParties() throws ComponentInitializationException {
+        final GenericApplicationContext context = new FilesystemGenericApplicationContext();
+        final MutablePropertySources propertySources = context.getEnvironment().getPropertySources();
+        final MockPropertySource mockEnvVars = new MockPropertySource();
+        mockEnvVars.setProperty("prop1", "p1");
+        mockEnvVars.setProperty("prop2", "p2 p3");
+        mockEnvVars.setProperty("prop3", "");
+        propertySources.replace(StandardEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME, mockEnvVars);
+
+        final PropertySourcesPlaceholderConfigurer placeholderConfig = new PropertySourcesPlaceholderConfigurer();
+        placeholderConfig.setPlaceholderPrefix("%{");
+        placeholderConfig.setPlaceholderSuffix("}");
+        placeholderConfig.setPropertySources(propertySources);
+        context.addBeanFactoryPostProcessor(placeholderConfig);
+
+        AttributeDefinition attr = getAttributeDefn("relyingParties.xml", SimpleAttributeDefinition.class, context);
+        RelyingPartyIdPredicate pre = (RelyingPartyIdPredicate) attr.getActivationCondition();
+        ProfileRequestContext prc = new ProfileRequestContext<>();
+        RelyingPartyContext rpContext = prc.getSubcontext(RelyingPartyContext.class, true);
+        rpContext.setRelyingPartyId("p1");
+        Assert.assertTrue(pre.apply(prc));
+        rpContext.setRelyingPartyId("p2 p3");
+        Assert.assertFalse(pre.apply(prc));
+        rpContext.setRelyingPartyId("p3");
+        Assert.assertTrue(pre.apply(prc));
+    }
 }
diff --git a/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/ad/relyingParties.xml b/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/ad/relyingParties.xml
new file mode 100644
index 0000000..0c3d879
--- /dev/null
+++ b/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/ad/relyingParties.xml
@@ -0,0 +1,8 @@
+ <AttributeDefinition 
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+    xmlns="urn:mace:shibboleth:2.0:resolver"
+    xsi:type="Simple" id="attry"    
+    relyingParties="%{prop1} %{prop2} %{prop3}"
+    xsi:schemaLocation="urn:mace:shibboleth:2.0:resolver http://shibboleth.net/schema/idp/shibboleth-attribute-resolver.xsd">
+    <InputAttributeDefinition ref="fii"/>
+</AttributeDefinition>
\ No newline at end of file
diff --git a/idp-schema/src/main/resources/schema/shibboleth-attribute-resolver.xsd b/idp-schema/src/main/resources/schema/shibboleth-attribute-resolver.xsd
index 175a141..d966cb8 100644
--- a/idp-schema/src/main/resources/schema/shibboleth-attribute-resolver.xsd
+++ b/idp-schema/src/main/resources/schema/shibboleth-attribute-resolver.xsd
@@ -289,6 +289,15 @@
             <annotation>
                 <documentation>
                     A reference to a predicate to decide whether this plugin is applicable
+                    Mutually exclusive with relyingParties
+                </documentation>
+            </annotation>
+        </attribute>
+        <attribute name="relyingParties" type="string">
+            <annotation>
+                <documentation>
+                    A (space separated) list of entities for which this plugin is to be active
+                    Mutually exclusive with activationConditionRef
                 </documentation>
             </annotation>
         </attribute>

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list