This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git


The following commit(s) were added to refs/heads/master by this push:
     new d1affd2426 [FIX] LdapRepositoryConfiguration should interoperate with 
UsersRepositoryImpl (#1855)
d1affd2426 is described below

commit d1affd2426bd19709a514d3599b4ae362df10c2f
Author: Benoit TELLIER <[email protected]>
AuthorDate: Fri Dec 15 08:14:14 2023 +0100

    [FIX] LdapRepositoryConfiguration should interoperate with 
UsersRepositoryImpl (#1855)
---
 server/data/data-ldap/pom.xml                      |  4 ++
 .../user/ldap/LdapRepositoryConfiguration.java     |  4 +-
 .../user/ldap/LdapRepositoryConfigurationTest.java | 66 ++++++++++++++++++++++
 .../src/test/resources/usersrepository-default.xml |  8 +++
 .../usersrepository-enableVirtualHosting.xml       |  9 +++
 .../usersrepository-supportsVirtualHosting.xml     |  9 +++
 6 files changed, 99 insertions(+), 1 deletion(-)

diff --git a/server/data/data-ldap/pom.xml b/server/data/data-ldap/pom.xml
index e73cd85777..7bc5740b22 100644
--- a/server/data/data-ldap/pom.xml
+++ b/server/data/data-ldap/pom.xml
@@ -69,6 +69,10 @@
             <groupId>com.unboundid</groupId>
             <artifactId>unboundid-ldapsdk</artifactId>
         </dependency>
+        <dependency>
+            <groupId>commons-beanutils</groupId>
+            <artifactId>commons-beanutils</artifactId>
+        </dependency>
         <dependency>
             <groupId>javax.annotation</groupId>
             <artifactId>javax.annotation-api</artifactId>
diff --git 
a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/LdapRepositoryConfiguration.java
 
b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/LdapRepositoryConfiguration.java
index 2a962790ac..4548d5d01d 100644
--- 
a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/LdapRepositoryConfiguration.java
+++ 
b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/LdapRepositoryConfiguration.java
@@ -39,6 +39,7 @@ import com.google.common.collect.ImmutableMap;
 
 public class LdapRepositoryConfiguration {
     public static final String SUPPORTS_VIRTUAL_HOSTING = 
"supportsVirtualHosting";
+    public static final String SUPPORTS_VIRTUAL_HOSTING_FALLBACK = 
"enableVirtualHosting";
 
     private static final int NO_CONNECTION_TIMEOUT = 0;
     private static final int NO_READ_TIME_OUT = 0;
@@ -183,7 +184,8 @@ public class LdapRepositoryConfiguration {
         // Default is to use connection pooling
         int connectionTimeout = configuration.getInt("[@connectionTimeout]", 
NO_CONNECTION_TIMEOUT);
         int readTimeout = configuration.getInt("[@readTimeout]", 
NO_READ_TIME_OUT);
-        boolean supportsVirtualHosting = 
configuration.getBoolean(SUPPORTS_VIRTUAL_HOSTING, !ENABLE_VIRTUAL_HOSTING);
+        boolean supportsVirtualHostingFallback = 
configuration.getBoolean(SUPPORTS_VIRTUAL_HOSTING_FALLBACK, 
!ENABLE_VIRTUAL_HOSTING);
+        boolean supportsVirtualHosting = 
configuration.getBoolean(SUPPORTS_VIRTUAL_HOSTING, 
supportsVirtualHostingFallback);
 
         HierarchicalConfiguration<ImmutableNode> restrictionConfig = null;
         // Check if we have a restriction we can use
diff --git 
a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/LdapRepositoryConfigurationTest.java
 
b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/LdapRepositoryConfigurationTest.java
new file mode 100644
index 0000000000..4c5e4e4eef
--- /dev/null
+++ 
b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/LdapRepositoryConfigurationTest.java
@@ -0,0 +1,66 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF 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 org.apache.james.user.ldap;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.io.InputStream;
+
+import org.apache.commons.configuration2.XMLConfiguration;
+import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder;
+import org.apache.commons.configuration2.builder.fluent.Parameters;
+import org.apache.commons.configuration2.convert.DisabledListDelimiterHandler;
+import org.apache.commons.configuration2.io.FileHandler;
+import org.apache.james.util.ClassLoaderUtils;
+import org.junit.jupiter.api.Test;
+
+class LdapRepositoryConfigurationTest {
+    public static XMLConfiguration getConfig(String configurationFile) throws 
Exception {
+        InputStream configStream = 
ClassLoaderUtils.getSystemResourceAsSharedStream(configurationFile);
+        FileBasedConfigurationBuilder<XMLConfiguration> builder = new 
FileBasedConfigurationBuilder<>(XMLConfiguration.class)
+            .configure(new Parameters()
+                .xml()
+                .setListDelimiterHandler(new DisabledListDelimiterHandler()));
+        XMLConfiguration xmlConfiguration = builder.getConfiguration();
+        FileHandler fileHandler = new FileHandler(xmlConfiguration);
+        fileHandler.load(configStream);
+        configStream.close();
+
+        return xmlConfiguration;
+    }
+    
+    @Test
+    void shouldNotBeVirtualHostedByDefault() throws Exception {
+        LdapRepositoryConfiguration configuration = 
LdapRepositoryConfiguration.from(getConfig("usersrepository-default.xml"));
+        assertThat(configuration.supportsVirtualHosting()).isFalse();
+    }
+    
+    @Test
+    void shouldSupportFallbackValue() throws Exception {
+        LdapRepositoryConfiguration configuration = 
LdapRepositoryConfiguration.from(getConfig("usersrepository-enableVirtualHosting.xml"));
+        assertThat(configuration.supportsVirtualHosting()).isTrue();
+    }
+    
+    @Test
+    void shouldSupportLDAPSpecificValue() throws Exception {
+        LdapRepositoryConfiguration configuration = 
LdapRepositoryConfiguration.from(getConfig("usersrepository-supportsVirtualHosting.xml"));
+        assertThat(configuration.supportsVirtualHosting()).isTrue();
+    }
+}
\ No newline at end of file
diff --git 
a/server/data/data-ldap/src/test/resources/usersrepository-default.xml 
b/server/data/data-ldap/src/test/resources/usersrepository-default.xml
new file mode 100644
index 0000000000..ac45df46e0
--- /dev/null
+++ b/server/data/data-ldap/src/test/resources/usersrepository-default.xml
@@ -0,0 +1,8 @@
+<usersrepository name="LocalUsers" 
class="org.apache.james.user.ldap.ReadOnlyUsersLDAPRepository"
+                 ldapHost="ldap://myldapserver:389";
+                 principal="uid=ldapUser,ou=system"
+                 credentials="password"
+                 userBase="ou=People,o=myorg.com,ou=system"
+                 userIdAttribute="uid"
+                 userObjectClass="person">
+</usersrepository>
\ No newline at end of file
diff --git 
a/server/data/data-ldap/src/test/resources/usersrepository-enableVirtualHosting.xml
 
b/server/data/data-ldap/src/test/resources/usersrepository-enableVirtualHosting.xml
new file mode 100644
index 0000000000..ed001b8f8c
--- /dev/null
+++ 
b/server/data/data-ldap/src/test/resources/usersrepository-enableVirtualHosting.xml
@@ -0,0 +1,9 @@
+<usersrepository name="LocalUsers" 
class="org.apache.james.user.ldap.ReadOnlyUsersLDAPRepository"
+                 ldapHost="ldap://myldapserver:389";
+                 principal="uid=ldapUser,ou=system"
+                 credentials="password"
+                 userBase="ou=People,o=myorg.com,ou=system"
+                 userIdAttribute="uid"
+                 userObjectClass="person">
+    <enableVirtualHosting>true</enableVirtualHosting>
+</usersrepository>
\ No newline at end of file
diff --git 
a/server/data/data-ldap/src/test/resources/usersrepository-supportsVirtualHosting.xml
 
b/server/data/data-ldap/src/test/resources/usersrepository-supportsVirtualHosting.xml
new file mode 100644
index 0000000000..d4c2cc1023
--- /dev/null
+++ 
b/server/data/data-ldap/src/test/resources/usersrepository-supportsVirtualHosting.xml
@@ -0,0 +1,9 @@
+<usersrepository name="LocalUsers" 
class="org.apache.james.user.ldap.ReadOnlyUsersLDAPRepository"
+                 ldapHost="ldap://myldapserver:389";
+                 principal="uid=ldapUser,ou=system"
+                 credentials="password"
+                 userBase="ou=People,o=myorg.com,ou=system"
+                 userIdAttribute="uid"
+                 userObjectClass="person">
+    <supportsVirtualHosting>true</supportsVirtualHosting>
+</usersrepository>
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to