You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by rc...@apache.org on 2023/07/21 04:43:23 UTC

[james-project] 02/05: JAMES-3928 Should support fallback to legacy `ldapHost` property

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

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

commit 04cf36a088c006fe6d1d7876b68ea28b443f8ba9
Author: Quan Tran <hq...@linagora.com>
AuthorDate: Wed Jul 19 11:55:40 2023 +0700

    JAMES-3928 Should support fallback to legacy `ldapHost` property
---
 .../user/ldap/LdapRepositoryConfiguration.java     |  7 ++++--
 .../james/user/ldap/ReadOnlyLDAPUsersDAO.java      |  2 +-
 ...nlyUsersLDAPRepositoryWithLDAPFailoverTest.java | 26 +++++++++++++++++-----
 3 files changed, 27 insertions(+), 8 deletions(-)

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 92263b62ce..47a980958f 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
@@ -146,7 +146,9 @@ public class LdapRepositoryConfiguration {
 
     public static LdapRepositoryConfiguration from(HierarchicalConfiguration<ImmutableNode> configuration) throws ConfigurationException {
         List<String> ldapHosts = Splitter.on(",")
-            .splitToList(configuration.getString("[@ldapHost]", ""));
+            .splitToList(Optional.ofNullable(configuration.getString("[@ldapHosts]", null))
+                .orElse(configuration.getString("[@ldapHost]", ""))
+                .trim());
         String principal = configuration.getString("[@principal]", "");
         String credentials = configuration.getString("[@credentials]", "");
         String userBase = configuration.getString("[@userBase]");
@@ -209,7 +211,8 @@ public class LdapRepositoryConfiguration {
      * Note that users are actually authenticated by binding against the LDAP
      * servers using the users &quot;dn&quot; and &quot;credentials&quot;.The
      * value of this field is taken from the value of the configuration
-     * attribute &quot;ldapHost&quot;. URLs are split by the comma  &quot;,&quot; character.
+     * attribute &quot;ldapHosts&quot; and fallback to the legacy attribute &quot;ldapHost&quot;.
+     * URLs are split by the comma  &quot;,&quot; character.
      */
     private final List<String> ldapHosts;
 
diff --git a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyLDAPUsersDAO.java b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyLDAPUsersDAO.java
index 49fcac7d69..37e512cd1a 100644
--- a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyLDAPUsersDAO.java
+++ b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyLDAPUsersDAO.java
@@ -146,7 +146,7 @@ public class ReadOnlyLDAPUsersDAO implements UsersDAO, Configurable {
             .map(Throwing.function(URI::new))
             .collect(ImmutableList.toImmutableList());
 
-        // naive assume SSL configuration is the same for all URIs firstly
+        // Assume SSL configuration is the same for all URIs
         SocketFactory socketFactory = supportLDAPS(uris.get(0));
 
         String[] addresses = uris.stream()
diff --git a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryWithLDAPFailoverTest.java b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryWithLDAPFailoverTest.java
index e09a4913ec..d0e6ed7660 100644
--- a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryWithLDAPFailoverTest.java
+++ b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryWithLDAPFailoverTest.java
@@ -171,21 +171,37 @@ class ReadOnlyUsersLDAPRepositoryWithLDAPFailoverTest {
         assertThat(usersLDAPRepository.countUsers()).isEqualTo(1);
     }
 
+    @Test
+    void shouldSupportBackwardCompatibilityForTheLegacyLdapHostProperty() throws Exception {
+        HierarchicalConfiguration<ImmutableNode> configuration = ldapRepositoryConfigurationWithVirtualHosting(List.of(masterLdap, slaveLdap), "ldapHost");
+
+        usersLDAPRepository = new ReadOnlyUsersLDAPRepository(new SimpleDomainList());
+        usersLDAPRepository.configure(configuration);
+
+        assertThatCode(() -> usersLDAPRepository.init())
+            .doesNotThrowAnyException();
+        assertThat(usersLDAPRepository.countUsers()).isEqualTo(1);
+    }
+
     static HierarchicalConfiguration<ImmutableNode> ldapRepositoryConfigurationWithVirtualHosting(List<LdapGenericContainer> ldapContainers) {
-        return ldapRepositoryConfigurationWithVirtualHosting(ldapContainers, Optional.of(ADMIN));
+        return ldapRepositoryConfigurationWithVirtualHosting(ldapContainers, Optional.of(ADMIN), "ldapHosts");
+    }
+
+    static HierarchicalConfiguration<ImmutableNode> ldapRepositoryConfigurationWithVirtualHosting(List<LdapGenericContainer> ldapContainers, String ldapHostProperty) {
+        return ldapRepositoryConfigurationWithVirtualHosting(ldapContainers, Optional.of(ADMIN), ldapHostProperty);
     }
 
-    static HierarchicalConfiguration<ImmutableNode> ldapRepositoryConfigurationWithVirtualHosting(List<LdapGenericContainer> ldapContainers, Optional<Username> administrator) {
-        PropertyListConfiguration configuration = baseConfiguration(ldapContainers);
+    static HierarchicalConfiguration<ImmutableNode> ldapRepositoryConfigurationWithVirtualHosting(List<LdapGenericContainer> ldapContainers, Optional<Username> administrator, String ldapHostsProperty) {
+        PropertyListConfiguration configuration = baseConfiguration(ldapContainers, ldapHostsProperty);
         configuration.addProperty("[@userIdAttribute]", "mail");
         configuration.addProperty("supportsVirtualHosting", true);
         administrator.ifPresent(username -> configuration.addProperty("[@administratorId]", username.asString()));
         return configuration;
     }
 
-    static PropertyListConfiguration baseConfiguration(List<LdapGenericContainer> ldapContainers) {
+    static PropertyListConfiguration baseConfiguration(List<LdapGenericContainer> ldapContainers, String ldapHostsProperty) {
         PropertyListConfiguration configuration = new PropertyListConfiguration();
-        configuration.addProperty("[@ldapHost]", ldapContainers.stream()
+        configuration.addProperty(String.format("[@%s]", ldapHostsProperty), ldapContainers.stream()
             .map(LdapGenericContainer::getLdapHost)
             .collect(Collectors.joining(",")));
         configuration.addProperty("[@principal]", "cn=admin,dc=james,dc=org");


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org