You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2018/04/03 10:03:04 UTC

[18/24] james-project git commit: JAMES-2366 Mapping should allow appending a domain if none

JAMES-2366 Mapping should allow appending a domain if none

This simplifies logic in RRT processor without impact on other classes.

Furthermore addresses like "a@b@domain.com" makes no sens.


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

Branch: refs/heads/master
Commit: 982c4535a404b7a82405f89edf7762604f8f90f6
Parents: 66596d6
Author: benwa <bt...@linagora.com>
Authored: Fri Mar 30 11:20:38 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Apr 3 17:00:23 2018 +0700

----------------------------------------------------------------------
 .../java/org/apache/james/rrt/lib/Mapping.java  |  4 +-
 .../org/apache/james/rrt/lib/MappingImpl.java   |  8 +++-
 .../apache/james/rrt/lib/MappingImplTest.java   | 12 +++---
 .../mailets/RecipientRewriteTableProcessor.java | 43 ++++++--------------
 .../RecipientRewriteTableProcessorTest.java     |  2 +-
 5 files changed, 29 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/982c4535/server/data/data-api/src/main/java/org/apache/james/rrt/lib/Mapping.java
----------------------------------------------------------------------
diff --git a/server/data/data-api/src/main/java/org/apache/james/rrt/lib/Mapping.java b/server/data/data-api/src/main/java/org/apache/james/rrt/lib/Mapping.java
index 231dd3b..4bbf11f 100644
--- a/server/data/data-api/src/main/java/org/apache/james/rrt/lib/Mapping.java
+++ b/server/data/data-api/src/main/java/org/apache/james/rrt/lib/Mapping.java
@@ -20,6 +20,8 @@
 
 package org.apache.james.rrt.lib;
 
+import java.util.function.Supplier;
+
 import org.apache.james.core.Domain;
 
 import com.google.common.base.Preconditions;
@@ -75,7 +77,7 @@ public interface Mapping {
 
     boolean hasDomain();
 
-    Mapping appendDomain(Domain domain);
+    Mapping appendDomainIfNone(Supplier<Domain> domainSupplier);
 
     String getErrorMessage();
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/982c4535/server/data/data-library/src/main/java/org/apache/james/rrt/lib/MappingImpl.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/MappingImpl.java b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/MappingImpl.java
index 8e0040e..fcd6572 100644
--- a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/MappingImpl.java
+++ b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/MappingImpl.java
@@ -21,6 +21,7 @@
 package org.apache.james.rrt.lib;
 
 import java.io.Serializable;
+import java.util.function.Supplier;
 
 import org.apache.james.core.Domain;
 
@@ -74,9 +75,12 @@ public class MappingImpl implements Mapping, Serializable {
     }
     
     @Override
-    public Mapping appendDomain(Domain domain) {
+    public Mapping appendDomainIfNone(Supplier<Domain> domain) {
         Preconditions.checkNotNull(domain);
-        return new MappingImpl(type, mapping + "@" + domain.asString());
+        if (hasDomain()) {
+            return this;
+        }
+        return new MappingImpl(type, mapping + "@" + domain.get().asString());
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/982c4535/server/data/data-library/src/test/java/org/apache/james/rrt/lib/MappingImplTest.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/test/java/org/apache/james/rrt/lib/MappingImplTest.java b/server/data/data-library/src/test/java/org/apache/james/rrt/lib/MappingImplTest.java
index cd353a8..8810d83 100644
--- a/server/data/data-library/src/test/java/org/apache/james/rrt/lib/MappingImplTest.java
+++ b/server/data/data-library/src/test/java/org/apache/james/rrt/lib/MappingImplTest.java
@@ -73,23 +73,23 @@ public class MappingImplTest {
     }
 
     @Test
-    public void hasDomainshouldReturnFalseWhenMappingDoesntContainAtMark() {
+    public void hasDefaultDomainShouldReturnFalseWhenMappingDoesntContainAtMark() {
         assertThat(MappingImpl.address("abc").hasDomain()).isFalse();
     }
     
     @Test
-    public void appendDomainShouldWorkOnValidDomain() {
-        assertThat(MappingImpl.address("abc").appendDomain(Domain.of("domain"))).isEqualTo(MappingImpl.address("abc@domain"));
+    public void appendDefaultDomainShouldWorkOnValidDomain() {
+        assertThat(MappingImpl.address("abc").appendDomainIfNone(() -> Domain.of("domain"))).isEqualTo(MappingImpl.address("abc@domain"));
     }
     
     @Test
-    public void appendDomainShouldWorkWhenMappingAlreadyContainsDomains() {
-        assertThat(MappingImpl.address("abc@d").appendDomain(Domain.of("domain"))).isEqualTo(MappingImpl.address("abc@d@domain"));
+    public void appendDefaultDomainShouldNotAddDomainWhenMappingAlreadyContainsDomains() {
+        assertThat(MappingImpl.address("abc@d").appendDomainIfNone(() -> Domain.of("domain"))).isEqualTo(MappingImpl.address("abc@d"));
     }
     
     @Test(expected = NullPointerException.class)
     public void appendDomainShouldThrowWhenNullDomain() {
-        MappingImpl.address("abc@d").appendDomain(null);
+        MappingImpl.address("abc@d").appendDomainIfNone(null);
     }
     
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/982c4535/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
index b3bb847..76961e4 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
@@ -23,7 +23,6 @@ import java.util.List;
 import java.util.Optional;
 import java.util.function.Function;
 import java.util.function.Supplier;
-import java.util.stream.Stream;
 
 import javax.mail.MessagingException;
 import javax.mail.internet.AddressException;
@@ -102,8 +101,8 @@ public class RecipientRewriteTableProcessor {
     }
 
     private final RecipientRewriteTable virtualTableStore;
-    private final DomainList domainList;
     private final MailetContext mailetContext;
+    private final Supplier<Domain> defaultDomainSupplier;
 
     private static final Function<Mapping, Optional<MailAddress>> mailAddressFromMapping =
         addressMapping -> {
@@ -116,8 +115,17 @@ public class RecipientRewriteTableProcessor {
 
     public RecipientRewriteTableProcessor(RecipientRewriteTable virtualTableStore, DomainList domainList, MailetContext mailetContext) {
         this.virtualTableStore = virtualTableStore;
-        this.domainList = domainList;
         this.mailetContext = mailetContext;
+        this.defaultDomainSupplier = MemoizedSupplier.of(
+            Throwing.supplier(() -> getDefaultDomain(domainList)).sneakyThrow());
+    }
+
+    private Domain getDefaultDomain(DomainList domainList) throws MessagingException {
+        try {
+            return domainList.getDefaultDomain();
+        } catch (DomainListException e) {
+            throw new MessagingException("Unable to access DomainList", e);
+        }
     }
 
     public void processMail(Mail mail) throws MessagingException {
@@ -164,7 +172,8 @@ public class RecipientRewriteTableProcessor {
 
     @VisibleForTesting
     List<MailAddress> handleMappings(Mappings mappings, MailAddress sender, MailAddress recipient, MimeMessage message) throws MessagingException {
-        ImmutableList<MailAddress> mailAddresses = sanitizedMappings(mappings)
+        ImmutableList<MailAddress> mailAddresses = mappings.asStream()
+            .map(mapping -> mapping.appendDomainIfNone(defaultDomainSupplier))
             .map(mailAddressFromMapping)
             .flatMap(OptionalUtils::toStream)
             .collect(Guavate.toImmutableList());
@@ -174,30 +183,12 @@ public class RecipientRewriteTableProcessor {
         return getLocalAddresses(mailAddresses);
     }
 
-    private Stream<Mapping> sanitizedMappings(Mappings mappings) throws MessagingException {
-        ImmutableList<Mapping> sanitizedMappings = sanitizeMappingsWithNoDomain(mappings, domainList);
-
-        return Stream.concat(
-            mappings.asStream().filter(Mapping::hasDomain),
-            sanitizedMappings.stream());
-    }
-
     private ImmutableList<MailAddress> getLocalAddresses(ImmutableList<MailAddress> mailAddresses) {
         return mailAddresses.stream()
             .filter(mailAddress -> mailetContext.isLocalServer(mailAddress.getDomain()))
             .collect(Guavate.toImmutableList());
     }
 
-    private ImmutableList<Mapping> sanitizeMappingsWithNoDomain(Mappings mappings, DomainList domainList) throws MessagingException {
-        Supplier<Domain> defaultDomainSupplier = MemoizedSupplier.of(
-            Throwing.supplier(() -> getDefaultDomain(domainList)).sneakyThrow());
-
-        return mappings.asStream()
-            .filter(mapping -> !mapping.hasDomain())
-            .map(mapping -> mapping.appendDomain(defaultDomainSupplier.get()))
-            .collect(Guavate.toImmutableList());
-    }
-
     private void forwardToRemoteAddress(MailAddress sender, MailAddress recipient, MimeMessage message, ImmutableList<MailAddress> mailAddresses) {
         ImmutableList<MailAddress> remoteAddresses = mailAddresses.stream()
             .filter(mailAddress -> !mailetContext.isLocalServer(mailAddress.getDomain()))
@@ -213,12 +204,4 @@ public class RecipientRewriteTableProcessor {
         }
     }
 
-    private Domain getDefaultDomain(DomainList domainList) throws MessagingException {
-        try {
-            return domainList.getDefaultDomain();
-        } catch (DomainListException e) {
-            throw new MessagingException("Unable to access DomainList", e);
-        }
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/982c4535/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessorTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessorTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessorTest.java
index 5caf722..41eafac 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessorTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessorTest.java
@@ -52,7 +52,6 @@ public class RecipientRewriteTableProcessorTest {
     private static final String NONEDOMAIN = "nonedomain";
     private static final String INVALID_MAIL_ADDRESS = "server-dev@";
 
-
     private FakeMail mail;
     private MimeMessage message;
     private MappingsImpl mappings;
@@ -328,6 +327,7 @@ public class RecipientRewriteTableProcessorTest {
     @Test
     public void processShouldResetMailStateToGhostWhenCanNotBuildNewRecipient() throws Exception {
         when(virtualTableStore.getMappings(any(String.class), any(Domain.class))).thenReturn(mappings);
+        when(domainList.getDefaultDomain()).thenReturn(Domain.of(MailAddressFixture.JAMES_LOCAL));
 
         mail = FakeMail.builder()
             .mimeMessage(message)


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