Repository: james-project
Updated Branches:
  refs/heads/master 5fbaeba92 -> 9866ac382


JAMES-1854 Conversion User -> MailAddress

This allows containing virtual hosting definition in the UsersRepository
by allowing calling an helper method.


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9866ac38
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9866ac38
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9866ac38

Branch: refs/heads/master
Commit: 9866ac382bd67b6cfd8efbc8e605ffdafdbddeb7
Parents: 34b2f98
Author: benwa <btell...@linagora.com>
Authored: Tue Apr 3 09:41:01 2018 +0700
Committer: Matthieu Baechler <matth...@apache.org>
Committed: Thu Apr 5 15:32:08 2018 +0200

----------------------------------------------------------------------
 .../apache/james/user/api/UsersRepository.java  |  7 +++++
 .../data/data-ldap-integration-testing/pom.xml  |  5 +++
 .../ldap/ReadOnlyUsersLDAPRepositoryTest.java   | 15 +++++----
 server/data/data-ldap/pom.xml                   |  5 +++
 .../user/ldap/ReadOnlyUsersLDAPRepository.java  | 25 ++++++++++++---
 .../ldap/ReadOnlyUsersLDAPRepositoryTest.java   | 17 ++++++++---
 .../james/user/lib/AbstractUsersRepository.java | 12 ++++++++
 .../domainlist/api/mock/SimpleDomainList.java   |  4 +--
 .../user/lib/AbstractUsersRepositoryTest.java   | 32 ++++++++++++++++++--
 9 files changed, 102 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/9866ac38/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java
 
b/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java
index db8cc3a..cfc9c8f 100644
--- 
a/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java
+++ 
b/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java
@@ -136,6 +136,13 @@ public interface UsersRepository {
      * @throws UsersRepositoryException
      */
     String getUser(MailAddress mailAddress) throws UsersRepositoryException;
+
+    /**
+     * Returns one of the possible mail addresses to be used to send a mail to 
that user
+     *
+     * This makes sense as it handles virtual-hosting logic.
+     */
+    MailAddress getMailAddressFor(org.apache.james.core.User user) throws 
UsersRepositoryException;
     
     /**
      * Return true if the user is an admin for this repository

http://git-wip-us.apache.org/repos/asf/james-project/blob/9866ac38/server/data/data-ldap-integration-testing/pom.xml
----------------------------------------------------------------------
diff --git a/server/data/data-ldap-integration-testing/pom.xml 
b/server/data/data-ldap-integration-testing/pom.xml
index e99bd77..9e037ba 100644
--- a/server/data/data-ldap-integration-testing/pom.xml
+++ b/server/data/data-ldap-integration-testing/pom.xml
@@ -70,6 +70,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>jcl-over-slf4j</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/9866ac38/server/data/data-ldap-integration-testing/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-ldap-integration-testing/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
 
b/server/data/data-ldap-integration-testing/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
index bd8ed52..e78f976 100644
--- 
a/server/data/data-ldap-integration-testing/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
+++ 
b/server/data/data-ldap-integration-testing/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
@@ -19,11 +19,12 @@
 package org.apache.james.user.ldap;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
 
-import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.commons.configuration.plist.PropertyListConfiguration;
 import org.apache.james.core.MailAddress;
+import org.apache.james.domainlist.api.DomainList;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -43,10 +44,12 @@ public class ReadOnlyUsersLDAPRepositoryTest {
 
     private LdapGenericContainer ldapContainer;
     private ReadOnlyUsersLDAPRepository ldapRepository;
+    private DomainList domainList;
 
     @Before
-    public void setup() throws Exception {
+    public void setup() {
         startLdapContainer();
+        domainList = mock(DomainList.class);
     }
 
     private void startLdapContainer() {
@@ -57,13 +60,13 @@ public class ReadOnlyUsersLDAPRepositoryTest {
         ldapContainer.start();
     }
 
-    private void startUsersRepository(HierarchicalConfiguration 
ldapRepositoryConfiguration) throws ConfigurationException, Exception {
-        ldapRepository = new ReadOnlyUsersLDAPRepository();
+    private void startUsersRepository(HierarchicalConfiguration 
ldapRepositoryConfiguration) throws Exception {
+        ldapRepository = new ReadOnlyUsersLDAPRepository(domainList);
         ldapRepository.configure(ldapRepositoryConfiguration);
         ldapRepository.init();
     }
 
-    private HierarchicalConfiguration ldapRepositoryConfiguration() throws 
ConfigurationException {
+    private HierarchicalConfiguration ldapRepositoryConfiguration() {
         PropertyListConfiguration configuration = new 
PropertyListConfiguration();
         configuration.addProperty("[@ldapHost]", ldapContainer.getLdapHost());
         configuration.addProperty("[@principal]", 
"cn=admin\\,dc=james\\,dc=org");
@@ -78,7 +81,7 @@ public class ReadOnlyUsersLDAPRepositoryTest {
         return configuration;
     }
 
-    private HierarchicalConfiguration 
ldapRepositoryConfigurationWithVirtualHosting() throws ConfigurationException {
+    private HierarchicalConfiguration 
ldapRepositoryConfigurationWithVirtualHosting() {
         PropertyListConfiguration configuration = new 
PropertyListConfiguration();
         configuration.addProperty("[@ldapHost]", ldapContainer.getLdapHost());
         configuration.addProperty("[@principal]", 
"cn=admin\\,dc=james\\,dc=org");

http://git-wip-us.apache.org/repos/asf/james-project/blob/9866ac38/server/data/data-ldap/pom.xml
----------------------------------------------------------------------
diff --git a/server/data/data-ldap/pom.xml b/server/data/data-ldap/pom.xml
index cc3c26c..9f39be1 100644
--- a/server/data/data-ldap/pom.xml
+++ b/server/data/data-ldap/pom.xml
@@ -71,6 +71,11 @@
             <artifactId>assertj-core</artifactId>
         </dependency>
         <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>jcl-over-slf4j</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/9866ac38/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
 
b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
index c7e2764..3007d85 100644
--- 
a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
+++ 
b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
@@ -30,6 +30,7 @@ import java.util.Properties;
 import java.util.Set;
 
 import javax.annotation.PostConstruct;
+import javax.inject.Inject;
 import javax.naming.Context;
 import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
@@ -45,6 +46,7 @@ import 
org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.commons.lang.StringUtils;
 import org.apache.directory.api.ldap.model.filter.FilterEncoder;
 import org.apache.james.core.MailAddress;
+import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.lifecycle.api.Configurable;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.api.UsersRepositoryException;
@@ -338,12 +340,12 @@ public class ReadOnlyUsersLDAPRepository implements 
UsersRepository, Configurabl
     // retries.
     private int maxRetries = 0;
 
-    /**
-     * Creates a new instance of ReadOnlyUsersLDAPRepository.
-     *
-     */
-    public ReadOnlyUsersLDAPRepository() {
+    private final DomainList domainList;
+
+    @Inject
+    public ReadOnlyUsersLDAPRepository(DomainList domainList) {
         super();
+        this.domainList = domainList;
     }
 
     /**
@@ -784,4 +786,17 @@ public class ReadOnlyUsersLDAPRepository implements 
UsersRepository, Configurabl
     public boolean isReadOnly() {
         return true;
     }
+
+
+    @Override
+    public MailAddress getMailAddressFor(org.apache.james.core.User user) 
throws UsersRepositoryException {
+        try {
+            if (supportVirtualHosting()) {
+                return new MailAddress(user.asString());
+            }
+            return new MailAddress(user.getLocalPart(), 
domainList.getDefaultDomain());
+        } catch (Exception e) {
+            throw new UsersRepositoryException("Failed to compute mail address 
associated with the user", e);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/9866ac38/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
 
b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
index 517b9b2..f7b7a6b 100644
--- 
a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
+++ 
b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
@@ -20,11 +20,14 @@
 package org.apache.james.user.ldap;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
 
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.ConversionException;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.commons.configuration.plist.PropertyListConfiguration;
+import org.apache.james.domainlist.api.DomainList;
+import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
@@ -33,10 +36,16 @@ public class ReadOnlyUsersLDAPRepositoryTest {
 
     @Rule
     public ExpectedException expectedException = ExpectedException.none();
+    private DomainList domainList;
+
+    @Before
+    public void setUp() {
+        domainList = mock(DomainList.class);
+    }
 
     @Test
     public void supportVirtualHostingShouldReturnFalseByDefault() throws 
Exception {
-        ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository();
+        ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(domainList);
         usersLDAPRepository.configure(ldapRepositoryConfiguration());
 
         assertThat(usersLDAPRepository.supportVirtualHosting()).isFalse();
@@ -47,7 +56,7 @@ public class ReadOnlyUsersLDAPRepositoryTest {
         HierarchicalConfiguration configuration = 
ldapRepositoryConfiguration();
         
configuration.addProperty(ReadOnlyUsersLDAPRepository.SUPPORTS_VIRTUAL_HOSTING, 
"true");
 
-        ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository();
+        ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(domainList);
         usersLDAPRepository.configure(configuration);
 
         assertThat(usersLDAPRepository.supportVirtualHosting()).isTrue();
@@ -58,7 +67,7 @@ public class ReadOnlyUsersLDAPRepositoryTest {
         HierarchicalConfiguration configuration = 
ldapRepositoryConfiguration();
         
configuration.addProperty(ReadOnlyUsersLDAPRepository.SUPPORTS_VIRTUAL_HOSTING, 
"false");
 
-        ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository();
+        ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(domainList);
         usersLDAPRepository.configure(configuration);
 
         assertThat(usersLDAPRepository.supportVirtualHosting()).isFalse();
@@ -69,7 +78,7 @@ public class ReadOnlyUsersLDAPRepositoryTest {
         HierarchicalConfiguration configuration = 
ldapRepositoryConfiguration();
         
configuration.addProperty(ReadOnlyUsersLDAPRepository.SUPPORTS_VIRTUAL_HOSTING, 
"bad");
 
-        ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository();
+        ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(domainList);
 
         expectedException.expect(ConversionException.class);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/9866ac38/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java
 
b/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java
index 895f623..dad5f8d 100644
--- 
a/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java
+++ 
b/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java
@@ -144,4 +144,16 @@ public abstract class AbstractUsersRepository implements 
UsersRepository, Config
     public boolean isReadOnly() {
         return false;
     }
+
+    @Override
+    public MailAddress getMailAddressFor(User user) throws 
UsersRepositoryException {
+        try {
+            if (supportVirtualHosting()) {
+                return new MailAddress(user.asString());
+            }
+            return new MailAddress(user.getLocalPart(), 
domainList.getDefaultDomain());
+        } catch (Exception e) {
+            throw new UsersRepositoryException("Failed to compute mail address 
associated with the user", e);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/9866ac38/server/data/data-library/src/test/java/org/apache/james/domainlist/api/mock/SimpleDomainList.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-library/src/test/java/org/apache/james/domainlist/api/mock/SimpleDomainList.java
 
b/server/data/data-library/src/test/java/org/apache/james/domainlist/api/mock/SimpleDomainList.java
index e48f21c..f754bd3 100644
--- 
a/server/data/data-library/src/test/java/org/apache/james/domainlist/api/mock/SimpleDomainList.java
+++ 
b/server/data/data-library/src/test/java/org/apache/james/domainlist/api/mock/SimpleDomainList.java
@@ -35,12 +35,12 @@ public class SimpleDomainList implements DomainList {
     private final List<Domain> domains = new LinkedList<>();
 
     @Override
-    public boolean containsDomain(Domain domain) throws DomainListException {
+    public boolean containsDomain(Domain domain) {
         return domains.contains(domain);
     }
 
     @Override
-    public List<Domain> getDomains() throws DomainListException {
+    public List<Domain> getDomains() {
         return ImmutableList.copyOf(domains);
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/9866ac38/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java
 
b/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java
index 4f49809..83b1bbc 100644
--- 
a/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java
+++ 
b/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java
@@ -39,7 +39,8 @@ public abstract class AbstractUsersRepositoryTest {
 
     private static final Domain DOMAIN = Domain.of("domain");
 
-    protected AbstractUsersRepository usersRepository; 
+    protected AbstractUsersRepository usersRepository;
+    private SimpleDomainList domainList;
 
     /**
      * Create the repository to be tested.
@@ -56,7 +57,7 @@ public abstract class AbstractUsersRepositoryTest {
     
     public void setUp() throws Exception { 
         this.usersRepository = getUsersRepository();
-        SimpleDomainList domainList = new SimpleDomainList();
+        domainList = new SimpleDomainList();
         domainList.addDomain(DOMAIN);
         usersRepository.setDomainList(domainList);
         user1 = login("username");
@@ -69,7 +70,7 @@ public abstract class AbstractUsersRepositoryTest {
         disposeUsersRepository();
     }
     
-    private String login(String login) throws UsersRepositoryException {
+    private String login(String login) {
         if (usersRepository.supportVirtualHosting()) {
             return login + '@' + DOMAIN.name();
         } else {
@@ -345,4 +346,29 @@ public abstract class AbstractUsersRepositoryTest {
 
         assertThat(usersRepository.isAdministrator(user1)).isFalse();
     }
+
+    @Test
+    public void getMailAddressForShouldBeIdentityWhenVirtualHosting() throws 
Exception {
+        usersRepository.setEnableVirtualHosting(true);
+
+        // Some implementations do not support changing virtual hosting value
+        Assume.assumeTrue(usersRepository.supportVirtualHosting());
+
+        String username = "user@domain";
+        
assertThat(usersRepository.getMailAddressFor(org.apache.james.core.User.fromUsername(username)))
+            .isEqualTo(username);
+    }
+
+    @Test
+    public void 
getMailAddressForShouldAppendDefaultDomainWhenNoVirtualHosting() throws 
Exception {
+        usersRepository.setEnableVirtualHosting(false);
+        usersRepository.setDomainList(domainList);
+
+        // Some implementations do not support changing virtual hosting value
+        Assume.assumeFalse(usersRepository.supportVirtualHosting());
+
+        String username = "user";
+        
assertThat(usersRepository.getMailAddressFor(org.apache.james.core.User.fromUsername(username)))
+            .isEqualTo(new MailAddress(username, 
domainList.getDefaultDomain()));
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to