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/20 02:12:58 UTC

[13/24] james-project git commit: JAMES-2366 Improve AbstractRRT::getFixedUser

JAMES-2366 Improve AbstractRRT::getFixedUser


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

Branch: refs/heads/master
Commit: e4bc90382a284b0956d6ab61d6bd8629dbf56d52
Parents: 7222968
Author: benwa <bt...@linagora.com>
Authored: Fri Apr 6 10:38:41 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Apr 19 11:13:59 2018 +0700

----------------------------------------------------------------------
 .../java/org/apache/james/rrt/lib/Mapping.java  |  7 ++++
 .../rrt/lib/AbstractRecipientRewriteTable.java  | 37 ++++++++------------
 .../org/apache/james/rrt/lib/MappingImpl.java   | 20 +++++++++--
 .../apache/james/rrt/lib/MappingImplTest.java   | 34 ++++++++++++++++--
 .../mailets/RecipientRewriteTableProcessor.java |  3 +-
 5 files changed, 71 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/e4bc9038/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 95c0599..1c7d3a6 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
@@ -25,6 +25,7 @@ import java.util.function.Supplier;
 
 import org.apache.james.core.Domain;
 import org.apache.james.core.MailAddress;
+import org.apache.james.rrt.api.RecipientRewriteTableException;
 
 import com.google.common.base.Preconditions;
 
@@ -90,6 +91,12 @@ public interface Mapping {
 
     boolean hasDomain();
 
+    interface ThrowingDomainSupplier {
+        Domain get() throws RecipientRewriteTableException;
+    }
+
+    Mapping appendDomainFromThrowingSupplierIfNone(ThrowingDomainSupplier supplier) throws RecipientRewriteTableException;
+
     Mapping appendDomainIfNone(Supplier<Domain> domainSupplier);
 
     String getErrorMessage();

http://git-wip-us.apache.org/repos/asf/james-project/blob/e4bc9038/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
index 6058f81..c9c54b1 100644
--- a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
+++ b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
@@ -20,7 +20,6 @@ package org.apache.james.rrt.lib;
 
 import java.util.Map;
 import java.util.Optional;
-import java.util.function.Supplier;
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
 
@@ -40,7 +39,7 @@ import org.apache.james.rrt.lib.Mapping.Type;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.github.fge.lambdas.Throwing;
+import com.google.common.base.Preconditions;
 
 public abstract class AbstractRecipientRewriteTable implements RecipientRewriteTable, Configurable {
     private static final Logger LOGGER = LoggerFactory.getLogger(AbstractRecipientRewriteTable.class);
@@ -206,7 +205,7 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT
     @Override
     public void addAddressMapping(String user, Domain domain, String address) throws RecipientRewriteTableException {
         Mapping mapping = MappingImpl.address(address)
-            .appendDomainIfNone(defaultDomainSupplier());
+            .appendDomainFromThrowingSupplierIfNone(this::defaultDomain);
 
         checkHasValidAddress(mapping);
         checkMapping(user, domain, mapping);
@@ -215,14 +214,12 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT
         addMapping(user, domain, mapping);
     }
 
-    private Supplier<Domain> defaultDomainSupplier() throws RecipientRewriteTableException {
-        return Throwing.supplier(() -> {
-            try {
-                return domainList.getDefaultDomain();
-            } catch (DomainListException e) {
-                throw new RecipientRewriteTableException("Unable to retrieve default domain", e);
-            }
-        }).sneakyThrow();
+    private Domain defaultDomain() throws RecipientRewriteTableException {
+        try {
+            return domainList.getDefaultDomain();
+        } catch (DomainListException e) {
+            throw new RecipientRewriteTableException("Unable to retrieve default domain", e);
+        }
     }
 
     private void checkHasValidAddress(Mapping mapping) throws RecipientRewriteTableException {
@@ -234,7 +231,7 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT
     @Override
     public void removeAddressMapping(String user, Domain domain, String address) throws RecipientRewriteTableException {
         Mapping mapping = MappingImpl.address(address)
-            .appendDomainIfNone(defaultDomainSupplier());
+            .appendDomainFromThrowingSupplierIfNone(this::defaultDomain);
 
         LOGGER.info("Remove address mapping => {} for user: {} domain: {}", mapping, user, domain.name());
         removeMapping(user, domain, mapping);
@@ -279,7 +276,7 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT
     @Override
     public void addForwardMapping(String user, Domain domain, String address) throws RecipientRewriteTableException {
         Mapping mapping = MappingImpl.forward(address)
-            .appendDomainIfNone(defaultDomainSupplier());
+            .appendDomainFromThrowingSupplierIfNone(this::defaultDomain);
 
         checkHasValidAddress(mapping);
         checkMapping(user, domain, mapping);
@@ -291,7 +288,7 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT
     @Override
     public void removeForwardMapping(String user, Domain domain, String address) throws RecipientRewriteTableException {
         Mapping mapping = MappingImpl.forward(address)
-            .appendDomainIfNone(defaultDomainSupplier());
+            .appendDomainFromThrowingSupplierIfNone(this::defaultDomain);
 
         LOGGER.info("Remove forward mapping => {} for user: {} domain: {}", mapping, user, domain.name());
         removeMapping(user, domain, mapping);
@@ -326,15 +323,9 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT
      * @return fixedUser the fixed user String
      */
     protected String getFixedUser(String user) {
-        if (user != null) {
-            if (user.equals(WILDCARD) || !user.contains("@")) {
-                return user;
-            } else {
-                throw new IllegalArgumentException("Invalid user: " + user);
-            }
-        } else {
-            return WILDCARD;
-        }
+        String sanitizedUser = Optional.ofNullable(user).orElse(WILDCARD);
+        Preconditions.checkArgument(sanitizedUser.equals(WILDCARD) || !sanitizedUser.contains("@"));
+        return sanitizedUser;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/e4bc9038/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 48ed54b..04ca426 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
@@ -28,6 +28,7 @@ import javax.mail.internet.AddressException;
 
 import org.apache.james.core.Domain;
 import org.apache.james.core.MailAddress;
+import org.apache.james.rrt.api.RecipientRewriteTableException;
 
 import com.google.common.base.Objects;
 import com.google.common.base.Preconditions;
@@ -85,16 +86,29 @@ public class MappingImpl implements Mapping, Serializable {
     public boolean hasDomain() {
         return mapping.contains("@");
     }
-    
+
+    @Override
+    public Mapping appendDomainFromThrowingSupplierIfNone(ThrowingDomainSupplier supplier) throws RecipientRewriteTableException {
+        Preconditions.checkNotNull(supplier);
+        if (hasDomain()) {
+            return this;
+        }
+        return appendDomain(supplier.get());
+    }
+
     @Override
     public Mapping appendDomainIfNone(Supplier<Domain> domain) {
         Preconditions.checkNotNull(domain);
         if (hasDomain()) {
             return this;
         }
-        return new MappingImpl(type, mapping + "@" + domain.get().asString());
+        return appendDomain(domain.get());
     }
-    
+
+    private MappingImpl appendDomain(Domain domain) {
+        return new MappingImpl(type, mapping + "@" + domain.asString());
+    }
+
     @Override
     public Type getType() {
         return type;

http://git-wip-us.apache.org/repos/asf/james-project/blob/e4bc9038/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 ab1e8d3..72c6439 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
@@ -25,6 +25,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import org.apache.james.core.Domain;
 import org.apache.james.core.MailAddress;
+import org.apache.james.rrt.api.RecipientRewriteTableException;
 import org.junit.Test;
 
 import nl.jqno.equalsverifier.EqualsVerifier;
@@ -97,11 +98,38 @@ public class MappingImplTest {
         assertThat(MappingImpl.address("abc@d").appendDomainIfNone(() -> Domain.of("domain"))).isEqualTo(MappingImpl.address("abc@d"));
     }
     
-    @Test(expected = NullPointerException.class)
+    @Test
     public void appendDomainShouldThrowWhenNullDomain() {
-        MappingImpl.address("abc@d").appendDomainIfNone(null);
+        assertThatThrownBy(() -> MappingImpl.address("abc@d").appendDomainIfNone(null)).isInstanceOf(NullPointerException.class);
     }
-    
+
+    @Test
+    public void appendDomainFromThrowingSupplierIfNoneShouldWorkOnValidDomain() throws RecipientRewriteTableException {
+        assertThat(MappingImpl.address("abc").appendDomainFromThrowingSupplierIfNone(() -> Domain.of("domain")))
+            .isEqualTo(MappingImpl.address("abc@domain"));
+    }
+
+    @Test
+    public void appendDomainFromThrowingSupplierIfNoneShouldNotAddDomainWhenMappingAlreadyContainsDomains() throws RecipientRewriteTableException {
+        assertThat(MappingImpl.address("abc@d").appendDomainFromThrowingSupplierIfNone(() -> Domain.of("domain")))
+            .isEqualTo(MappingImpl.address("abc@d"));
+    }
+
+    @Test
+    public void appendDomainFromThrowingSupplierIfNoneShouldThrowWhenNullDomain() {
+        assertThatThrownBy(() -> MappingImpl.address("abc@d").appendDomainFromThrowingSupplierIfNone(null))
+            .isInstanceOf(NullPointerException.class);
+    }
+
+    @Test
+    public void appendDomainFromThrowingSupplierIfNoneShouldNotCatchRecipientRewriteTableException() {
+        Mapping.ThrowingDomainSupplier supplier = () -> {
+            throw new RecipientRewriteTableException("message");
+        };
+        assertThatThrownBy(() -> MappingImpl.address("abc").appendDomainFromThrowingSupplierIfNone(supplier))
+            .isInstanceOf(RecipientRewriteTableException.class);
+    }
+
     @Test
     public void getTypeShouldReturnAddressWhenNoPrefix() {
         assertThat(MappingImpl.address("abc").getType()).isEqualTo(Mapping.Type.Address);

http://git-wip-us.apache.org/repos/asf/james-project/blob/e4bc9038/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 7a30cef..d015f54 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
@@ -33,6 +33,7 @@ import org.apache.james.domainlist.api.DomainListException;
 import org.apache.james.rrt.api.RecipientRewriteTable;
 import org.apache.james.rrt.api.RecipientRewriteTable.ErrorMappingException;
 import org.apache.james.rrt.api.RecipientRewriteTableException;
+import org.apache.james.rrt.lib.Mapping;
 import org.apache.james.rrt.lib.Mappings;
 import org.apache.james.util.MemoizedSupplier;
 import org.apache.james.util.OptionalUtils;
@@ -162,7 +163,7 @@ public class RecipientRewriteTableProcessor {
     List<MailAddress> handleMappings(Mappings mappings, MailAddress sender, MailAddress recipient, MimeMessage message) throws MessagingException {
         ImmutableList<MailAddress> mailAddresses = mappings.asStream()
             .map(mapping -> mapping.appendDomainIfNone(defaultDomainSupplier))
-            .map(mapping -> mapping.asMailAddress())
+            .map(Mapping::asMailAddress)
             .flatMap(OptionalUtils::toStream)
             .collect(Guavate.toImmutableList());
 


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