[java-identity-provider] branch master updated: Add executableSearchBuilderRef to LDAP connector schema.

Scott Cantor cantor.2 at osu.edu
Fri Jun 9 10:53:25 EDT 2017


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

scantor 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=461a5c218590003c3404a23d2eddb980a4a817bd

The following commit(s) were added to refs/heads/master by this push:
       new  461a5c2   Add executableSearchBuilderRef to LDAP connector schema.
461a5c2 is described below

commit 461a5c218590003c3404a23d2eddb980a4a817bd
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Fri Jun 9 10:53:22 2017 -0400

    Add executableSearchBuilderRef to LDAP connector schema.
---
 .../dc/ldap/impl/LDAPDataConnectorParser.java      | 21 +++++++++++--
 .../dc/ldap/LDAPDataConnectorParserTest.java       | 23 +++++++++++++++
 .../ldap-attribute-resolver-spring-context.xml     |  2 +-
 .../ldap-attribute-resolver-v2-flat-hybrid.xml     | 34 ++++++++++++++++++++++
 .../schema/shibboleth-attribute-resolver.xsd       | 11 +++++--
 5 files changed, 86 insertions(+), 5 deletions(-)

diff --git a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParser.java b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParser.java
index e7ed570..1fce93e 100644
--- a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParser.java
+++ b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParser.java
@@ -174,7 +174,15 @@ public class LDAPDataConnectorParser extends AbstractWarningDataConnectorParser
         provider.addPropertyValue("providerConfig", providerConfig.getBeanDefinition());
         connectionFactory.addPropertyValue("provider", provider.getBeanDefinition());
 
-        builder.addPropertyValue("executableSearchBuilder", v2Parser.createTemplatedExecutableSearchFilterBuilder());
+        final String searchBuilderID = v2Parser.getBeanSearchBuilderID();
+        if (searchBuilderID != null) {
+            builder.addPropertyReference("executableSearchBuilder", searchBuilderID);
+        } else {
+            final BeanDefinition def = v2Parser.createTemplateBuilder();
+            if (def != null) {
+                builder.addPropertyValue("executableSearchBuilder", def);
+            }
+        }
 
         final BeanDefinition connectionPool = v2Parser.createConnectionPool(connectionFactory.getBeanDefinition());
         BeanDefinitionBuilder pooledConnectionFactory = null;
@@ -409,11 +417,20 @@ public class LDAPDataConnectorParser extends AbstractWarningDataConnectorParser
         }
 
         /**
+         * Get the bean ID of an externally defined search builder.
+         * 
+         * @return search builder bean ID
+         */
+        @Nullable public String getBeanSearchBuilderID() {
+            return AttributeSupport.getAttributeValue(configElement, null, "executableSearchBuilderRef");
+        }
+        
+        /**
          * Construct the definition of the template driven search builder.
          * 
          * @return the bean definition for the template search builder.
          */
-        @Nonnull public BeanDefinition createTemplatedExecutableSearchFilterBuilder() {
+        @Nonnull public BeanDefinition createTemplateBuilder() {
             final BeanDefinitionBuilder templateBuilder =
                     BeanDefinitionBuilder.genericBeanDefinition(TemplatedExecutableSearchFilterBuilder.class);
             templateBuilder.setInitMethodName("initialize");
diff --git a/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/LDAPDataConnectorParserTest.java b/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/LDAPDataConnectorParserTest.java
index b036452..2fb247d 100644
--- a/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/LDAPDataConnectorParserTest.java
+++ b/idp-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/LDAPDataConnectorParserTest.java
@@ -409,6 +409,29 @@ public class LDAPDataConnectorParserTest {
         Assert.assertNotNull(attrs.get("entryDN"));
     }
 
+    @Test public void flatHybridConfig() throws Exception {
+        final LDAPDataConnector dataConnector =
+                getLdapDataConnector(new String[] {
+                        "net/shibboleth/idp/attribute/resolver/spring/dc/ldap/ldap-attribute-resolver-v2-flat-hybrid.xml",
+                        "net/shibboleth/idp/attribute/resolver/spring/dc/ldap/ldap-attribute-resolver-spring-context.xml"});
+        Assert.assertNotNull(dataConnector);
+        doTest(dataConnector);
+
+        dataConnector.initialize();
+        final StringAttributeValueMappingStrategy mappingStrategy =
+                (StringAttributeValueMappingStrategy) dataConnector.getMappingStrategy();
+        Assert.assertEquals(mappingStrategy.getResultRenamingMap().size(), 1);
+        Assert.assertEquals(mappingStrategy.getResultRenamingMap().get("homephone"), "phonenumber");
+        final AttributeResolutionContext context =
+                TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
+                        TestSources.SP_ENTITY_ID);
+        final Map<String, IdPAttribute> attrs = dataConnector.resolve(context);
+        Assert.assertNotNull(attrs);
+        Assert.assertNull(attrs.get("homephone"));
+        Assert.assertNotNull(attrs.get("phonenumber"));
+        Assert.assertNotNull(attrs.get("entryDN"));
+    }
+
     protected LDAPDataConnector getLdapDataConnector(final Resource properties, final String[] beanDefinitions) throws IOException {
         final GenericApplicationContext context = new FilesystemGenericApplicationContext() ;
         setTestContext(context);
diff --git a/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/ldap-attribute-resolver-spring-context.xml b/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/ldap-attribute-resolver-spring-context.xml
index b6b484f..e58fa3d 100644
--- a/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/ldap-attribute-resolver-spring-context.xml
+++ b/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/ldap-attribute-resolver-spring-context.xml
@@ -64,7 +64,7 @@
     </bean>
     <bean class="org.ldaptive.SearchExecutor" p:baseDn="ou=people,dc=shibboleth,dc=net" p:returnAttributes="uid,homephone,mail" p:timeLimit="7000" />
     <bean id="cache" class="com.google.common.cache.Cache" factory-bean="cacheBuilderExternal" factory-method="build" />
-    <bean class="net.shibboleth.idp.attribute.resolver.dc.ldap.impl.TemplatedExecutableSearchFilterBuilder"
+    <bean id="filter" class="net.shibboleth.idp.attribute.resolver.dc.ldap.impl.TemplatedExecutableSearchFilterBuilder"
         p:templateText="(uid=${resolutionContext.principal})" p:velocityEngine-ref="shibboleth.VelocityEngine"
         init-method="initialize" />
     <bean id="mappings" class="net.shibboleth.idp.attribute.resolver.dc.ldap.impl.StringAttributeValueMappingStrategy"
diff --git a/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/ldap-attribute-resolver-v2-flat-hybrid.xml b/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/ldap-attribute-resolver-v2-flat-hybrid.xml
new file mode 100644
index 0000000..7ab6cff
--- /dev/null
+++ b/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/ldap-attribute-resolver-v2-flat-hybrid.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<AttributeResolver xmlns="urn:mace:shibboleth:2.0:resolver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="urn:mace:shibboleth:2.0:resolver http://shibboleth.net/schema/idp/shibboleth-attribute-resolver.xsd">
+
+    <DataConnector id="myLDAP" xsi:type="LDAPDirectory" ldapURL="ldap://localhost:10389"
+        baseDN="ou=people,dc=shibboleth,dc=net" principal="cn=Directory Manager" principalCredential="password"
+        useStartTLS="true" searchTimeLimit="PT7S"
+        executableSearchBuilderRef="filter" mappingStrategyRef="mappings" validatorRef="validator" noRetryDelay="PT5M"
+        connectTimeout="PT2S" responseTimeout="PT4S">
+        <LDAPProperty name="name1" value="value1" />
+        <LDAPProperty name="name2" value="value2" />
+        <StartTLSTrustCredential xsi:type="security:X509Inline" xmlns:security="urn:mace:shibboleth:2.0:security"
+            id="LDAPtoIdPCredential">
+            <security:Certificate>
+                MIICATCCAWoCCQCZy4ovDlQTvDANBgkqhkiG9w0BAQUFADBFMRMwEQYKCZImiZPy
+                LGQBGRYDbmV0MRowGAYKCZImiZPyLGQBGRYKc2hpYmJvbGV0aDESMBAGA1UEAxMJ
+                bG9jYWxob3N0MB4XDTEzMDkyMDA0NDE1OFoXDTIzMDkxODA0NDE1OFowRTETMBEG
+                CgmSJomT8ixkARkWA25ldDEaMBgGCgmSJomT8ixkARkWCnNoaWJib2xldGgxEjAQ
+                BgNVBAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA+Pj+
+                Rk0FosrK8tdNJLASSbfRFEJDf0498bnwtor76PONwkTLjnm7paTMAy7oGIAccuBf
+                n7183mlo/yh22x+7Fdux4ESvdp1FWl7nGlBBWUrLZzXwwGybC0qv3/Cmvfkvm6zh
+                zgY7YyQYlA/RCjTk/pUfrXaIIaKwd+B2miBDrDUCAwEAATANBgkqhkiG9w0BAQUF
+                AAOBgQCKQsndxYjsGIvK3lnlztIuKQmRlj7IHL/T6abBYwmQcyMa5o3hv6/Rx+Ze
+                NSRfyhakPY4v5yUBi1fyIVIGcAbnak+GQIfsO8uDhzZt6DwshzHrnCbHTLQx6NTB
+                4mvLjAdt7riBIl5y5n3tbtrZdpTgFhQxjLWTBpWIO0XKxqtBhw==
+            </security:Certificate>
+        </StartTLSTrustCredential>
+        <ConnectionPool minPoolSize="5" maxPoolSize="10" blockWaitTime="PT5S" expirationTime="PT10M"
+            validatePeriodically="true" validateTimerPeriod="PT15M" validateDN="dc=shibboleth,dc=net" validateFilter="(ou=people)" failFastInitialize="false" />
+        <Column columnName="homephone" attributeID="phonenumber" />
+        <ResultCacheBean>cache</ResultCacheBean>
+    </DataConnector>
+
+</AttributeResolver>
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 b79bc95..2f46dc1 100644
--- a/idp-schema/src/main/resources/schema/shibboleth-attribute-resolver.xsd
+++ b/idp-schema/src/main/resources/schema/shibboleth-attribute-resolver.xsd
@@ -1102,6 +1102,13 @@
                         <documentation>Name of the template engine defined within the application.</documentation>
                     </annotation>
                 </attribute>
+                <attribute name="executableSearchBuilderRef" type="string">
+                    <annotation>
+                        <documentation>
+                            Reference to a Spring bean providing the ExecutableSearchBuilder implementation to use.
+                        </documentation>
+                    </annotation>
+                </attribute>
                 <attribute name="mappingStrategyRef" type="string">
                     <annotation>
                         <documentation>
@@ -1968,7 +1975,7 @@
     
     <complexType name="SAML1StringNameIdentifier">
         <annotation>
-            <documentation>Defines a SAML 1 string encoder for a NameIdentifier.</documentation>
+            <documentation>DEPRECATED: Defines a SAML 1 string encoder for a NameIdentifier.</documentation>
         </annotation>
         <complexContent>
             <extension base="resolver:BaseAttributeEncoderType">
@@ -1988,7 +1995,7 @@
 
     <complexType name="SAML2StringNameID">
         <annotation>
-            <documentation>Defines a SAML 2 string encoder for a NameID.</documentation>
+            <documentation>DEPRECATED: Defines a SAML 2 string encoder for a NameID.</documentation>
         </annotation>
         <complexContent>
             <extension base="resolver:BaseAttributeEncoderType">

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


More information about the commits mailing list