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 2019/01/30 10:56:18 UTC

[1/8] james-project git commit: JAMES-2654 SMTP protocol module should depend on logback-classic only in tests

Repository: james-project
Updated Branches:
  refs/heads/master d58b9769e -> a4d524d86


JAMES-2654 SMTP protocol module should depend on logback-classic only in tests


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

Branch: refs/heads/master
Commit: 73648336e2e2f595cbf0e6e97c3f0917a5865045
Parents: e655e24
Author: Benoit Tellier <bt...@linagora.com>
Authored: Wed Jan 30 10:39:39 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Jan 30 17:50:20 2019 +0700

----------------------------------------------------------------------
 protocols/smtp/pom.xml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/73648336/protocols/smtp/pom.xml
----------------------------------------------------------------------
diff --git a/protocols/smtp/pom.xml b/protocols/smtp/pom.xml
index 73a79fa..276904a 100644
--- a/protocols/smtp/pom.xml
+++ b/protocols/smtp/pom.xml
@@ -61,7 +61,8 @@
         </dependency>
         <dependency>
             <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-core</artifactId>
+            <artifactId>logback-classic</artifactId>
+            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>com.google.guava</groupId>


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


[6/8] james-project git commit: JAMES-2655 JPA RRT getMapping & getStoredMappings are duplicated

Posted by bt...@apache.org.
JAMES-2655 JPA RRT getMapping & getStoredMappings are duplicated

mapAddress can then call getStoredMappings directly


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

Branch: refs/heads/master
Commit: 12bf59e261ac25bb6c435b249a37a79f080f0d3e
Parents: e839a78
Author: Benoit Tellier <bt...@linagora.com>
Authored: Wed Jan 30 11:58:17 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Jan 30 17:55:18 2019 +0700

----------------------------------------------------------------------
 .../james/rrt/jpa/JPARecipientRewriteTable.java | 31 ++------------------
 1 file changed, 2 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/12bf59e2/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java
----------------------------------------------------------------------
diff --git a/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java b/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java
index 44795ed..2850539 100644
--- a/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java
+++ b/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java
@@ -76,44 +76,17 @@ public class JPARecipientRewriteTable extends AbstractRecipientRewriteTable {
 
     @Override
     protected Mappings mapAddress(String user, Domain domain) throws RecipientRewriteTableException {
-        Mappings userDomainMapping = getMapping(MappingSource.fromUser(user, domain));
+        Mappings userDomainMapping = getStoredMappings(MappingSource.fromUser(user, domain));
         if (userDomainMapping != null && !userDomainMapping.isEmpty()) {
             return userDomainMapping;
         }
-        Mappings domainMapping = getMapping(MappingSource.fromDomain(domain));
+        Mappings domainMapping = getStoredMappings(MappingSource.fromDomain(domain));
         if (domainMapping != null && !domainMapping.isEmpty()) {
             return domainMapping;
         }
         return MappingsImpl.empty();
     }
 
-    private Mappings getMapping(MappingSource mappingSource) throws RecipientRewriteTableException {
-        EntityManager entityManager = entityManagerFactory.createEntityManager();
-        final EntityTransaction transaction = entityManager.getTransaction();
-        try {
-            transaction.begin();
-            @SuppressWarnings("unchecked")
-            List<JPARecipientRewrite> virtualUsers = entityManager
-                .createNamedQuery("selectUserDomainMapping")
-                .setParameter("user", mappingSource.getFixedUser())
-                .setParameter("domain", mappingSource.getFixedDomain())
-                .getResultList();
-            transaction.commit();
-            if (virtualUsers.size() > 0) {
-                return MappingsImpl.fromRawString(virtualUsers.get(0).getTargetAddress());
-            }
-            return MappingsImpl.empty();
-        } catch (PersistenceException e) {
-            LOGGER.debug("Failed to find mapping for source={}", mappingSource, e);
-            if (transaction.isActive()) {
-                transaction.rollback();
-            }
-            throw new RecipientRewriteTableException("Error while retrieve mappings", e);
-        } finally {
-            entityManager.close();
-        }
-    }
-
     @Override
     public Mappings getStoredMappings(MappingSource source) throws RecipientRewriteTableException {
         EntityManager entityManager = entityManagerFactory.createEntityManager();


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


[8/8] james-project git commit: JAMES-2644 Fix the Content-Type parsing fragility

Posted by bt...@apache.org.
JAMES-2644 Fix the Content-Type parsing fragility


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

Branch: refs/heads/master
Commit: a4d524d8609de97ed77f222ac5eada022227a359
Parents: 7329ac6
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Wed Jan 16 14:13:10 2019 +0100
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Jan 30 17:55:50 2019 +0700

----------------------------------------------------------------------
 server/container/core/pom.xml                   |   2 +-
 .../james/server/core/ContentTypeCleaner.java   |  51 +++++++
 .../server/core/ContentTypeCleanerTest.java     |  55 +++++++
 .../core/MimeMessageCopyOnWriteProxyTest.java   |  35 ++++-
 .../james/modules/CommonServicesModule.java     |   1 +
 .../apache/james/modules/MimeMessageModule.java |  33 ++++
 .../apache/james/smtp/SmtpContentTypeTest.java  | 151 +++++++++++++++++++
 7 files changed, 319 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/a4d524d8/server/container/core/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/core/pom.xml b/server/container/core/pom.xml
index d37c834..22991c2 100644
--- a/server/container/core/pom.xml
+++ b/server/container/core/pom.xml
@@ -141,7 +141,7 @@
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
                 <configuration>
-                    <reuseForks>true</reuseForks>
+                    <reuseForks>false</reuseForks>
                     <forkCount>1C</forkCount>
                 </configuration>
             </plugin>

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4d524d8/server/container/core/src/main/java/org/apache/james/server/core/ContentTypeCleaner.java
----------------------------------------------------------------------
diff --git a/server/container/core/src/main/java/org/apache/james/server/core/ContentTypeCleaner.java b/server/container/core/src/main/java/org/apache/james/server/core/ContentTypeCleaner.java
new file mode 100644
index 0000000..5d43314
--- /dev/null
+++ b/server/container/core/src/main/java/org/apache/james/server/core/ContentTypeCleaner.java
@@ -0,0 +1,51 @@
+/****************************************************************
+ * 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.server.core;
+
+import java.util.regex.Pattern;
+
+import javax.mail.internet.MimePart;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Strings;
+
+public class ContentTypeCleaner {
+    private static final Logger LOGGER = LoggerFactory.getLogger(ContentTypeCleaner.class);
+    private static final Pattern REGEX = Pattern.compile("^[\\w\\-]+/[\\w\\-]+");
+    private static final String HANDLER_CLASS_PROPERTY = "mail.mime.contenttypehandler";
+
+    public static void initialize() {
+        System.setProperty(HANDLER_CLASS_PROPERTY, ContentTypeCleaner.class.getName());
+    }
+
+    public static String cleanContentType(MimePart mimePart, String contentType) {
+        if (Strings.isNullOrEmpty(contentType)) {
+            return null;
+        }
+
+        if (REGEX.matcher(contentType).find()) {
+            return contentType;
+        }
+
+        LOGGER.warn("Can not parse Content-Type: " + contentType);
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4d524d8/server/container/core/src/test/java/org/apache/james/server/core/ContentTypeCleanerTest.java
----------------------------------------------------------------------
diff --git a/server/container/core/src/test/java/org/apache/james/server/core/ContentTypeCleanerTest.java b/server/container/core/src/test/java/org/apache/james/server/core/ContentTypeCleanerTest.java
new file mode 100644
index 0000000..c1d1bf1
--- /dev/null
+++ b/server/container/core/src/test/java/org/apache/james/server/core/ContentTypeCleanerTest.java
@@ -0,0 +1,55 @@
+/****************************************************************
+ * 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.server.core;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.junit.jupiter.api.Test;
+
+public class ContentTypeCleanerTest {
+    @Test
+    void nullContentTypeShouldReturnNull() {
+        assertThat(ContentTypeCleaner
+                .cleanContentType(null, null))
+                .isNull();
+    }
+
+    @Test
+    void emptyContentTypeShouldReturnNull() {
+        assertThat(ContentTypeCleaner
+                .cleanContentType(null, ""))
+                .isNull();
+    }
+
+    @Test
+    void invalidContentTypeShouldReturnNull() {
+        assertThat(ContentTypeCleaner
+                .cleanContentType(null, "I'mNotValid"))
+                .isNull();
+    }
+
+    @Test
+    void validContentTypeShouldReturnTheRawInput() {
+        String contentType = "application/pdf";
+        assertThat(ContentTypeCleaner
+                .cleanContentType(null, contentType))
+                .isEqualTo(contentType);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4d524d8/server/container/core/src/test/java/org/apache/james/server/core/MimeMessageCopyOnWriteProxyTest.java
----------------------------------------------------------------------
diff --git a/server/container/core/src/test/java/org/apache/james/server/core/MimeMessageCopyOnWriteProxyTest.java b/server/container/core/src/test/java/org/apache/james/server/core/MimeMessageCopyOnWriteProxyTest.java
index dfa46e5..0d0291c 100644
--- a/server/container/core/src/test/java/org/apache/james/server/core/MimeMessageCopyOnWriteProxyTest.java
+++ b/server/container/core/src/test/java/org/apache/james/server/core/MimeMessageCopyOnWriteProxyTest.java
@@ -31,14 +31,22 @@ import org.apache.james.core.MailAddress;
 import org.apache.james.core.builder.MimeMessageBuilder;
 import org.apache.james.lifecycle.api.LifecycleUtil;
 import org.apache.mailet.Mail;
+import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 
+import com.google.common.collect.ImmutableList;
+
 public class MimeMessageCopyOnWriteProxyTest extends MimeMessageFromStreamTest {
 
     final String content = "Subject: foo\r\nContent-Transfer-Encoding2: plain";
     final String sep = "\r\n\r\n";
     final String body = "bar\r\n.\r\n";
 
+    @BeforeAll
+    static void setUp() {
+        ContentTypeCleaner.initialize();
+    }
+
     @Override
     protected MimeMessage getMessageFromSources(String sources) throws Exception {
         MimeMessageInputStreamSource mmis = new MimeMessageInputStreamSource("test", new SharedByteArrayInputStream(sources.getBytes()));
@@ -46,7 +54,7 @@ public class MimeMessageCopyOnWriteProxyTest extends MimeMessageFromStreamTest {
     }
 
     @Test
-    public void testMessageCloning1() throws Exception {
+    void testMessageCloning1() throws Exception {
         ArrayList<MailAddress> r = new ArrayList<>();
         r.add(new MailAddress("recipient@test.com"));
         MimeMessageCopyOnWriteProxy messageFromSources = (MimeMessageCopyOnWriteProxy) getMessageFromSources(
@@ -72,7 +80,7 @@ public class MimeMessageCopyOnWriteProxyTest extends MimeMessageFromStreamTest {
     }
 
     @Test
-    public void testMessageCloning2() throws Exception {
+    void testMessageCloning2() throws Exception {
         ArrayList<MailAddress> r = new ArrayList<>();
         r.add(new MailAddress("recipient@test.com"));
         MimeMessageCopyOnWriteProxy messageFromSources = (MimeMessageCopyOnWriteProxy) getMessageFromSources(
@@ -122,7 +130,7 @@ public class MimeMessageCopyOnWriteProxyTest extends MimeMessageFromStreamTest {
      * change the second, then it should not clone
      */
     @Test
-    public void testMessageAvoidCloning() throws Exception {
+    void testMessageAvoidCloning() throws Exception {
         ArrayList<MailAddress> r = new ArrayList<>();
         r.add(new MailAddress("recipient@test.com"));
         MimeMessageCopyOnWriteProxy messageFromSources = (MimeMessageCopyOnWriteProxy) getMessageFromSources(
@@ -158,7 +166,7 @@ public class MimeMessageCopyOnWriteProxyTest extends MimeMessageFromStreamTest {
      * should clone the message.
      */
     @Test
-    public void testMessageCloning3() throws Exception {
+    void testMessageCloning3() throws Exception {
         ArrayList<MailAddress> r = new ArrayList<>();
         r.add(new MailAddress("recipient@test.com"));
         MimeMessage mimeMessage = MimeMessageBuilder.mimeMessageBuilder()
@@ -181,7 +189,7 @@ public class MimeMessageCopyOnWriteProxyTest extends MimeMessageFromStreamTest {
     }
 
     @Test
-    public void testMessageDisposing() throws Exception {
+    void testMessageDisposing() throws Exception {
         ArrayList<MailAddress> r = new ArrayList<>();
         r.add(new MailAddress("recipient@test.com"));
         MimeMessageCopyOnWriteProxy messageFromSources = (MimeMessageCopyOnWriteProxy) getMessageFromSources(
@@ -203,7 +211,7 @@ public class MimeMessageCopyOnWriteProxyTest extends MimeMessageFromStreamTest {
     }
 
     @Test
-    public void testNPE1() throws MessagingException, InterruptedException {
+    void testNPE1() throws MessagingException, InterruptedException {
         ArrayList<MailAddress> recipients = new ArrayList<>();
         recipients.add(new MailAddress("recipient@test.com"));
         MimeMessageCopyOnWriteProxy mw = new MimeMessageCopyOnWriteProxy(new MimeMessageInputStreamSource("test",
@@ -225,7 +233,7 @@ public class MimeMessageCopyOnWriteProxyTest extends MimeMessageFromStreamTest {
      * created by a MimeMessageInputStreamSource.
      */
     @Test
-    public void testMessageCloningViaCoW3() throws Exception {
+    void testMessageCloningViaCoW3() throws Exception {
         MimeMessage mmorig = getSimpleMessage();
 
         MimeMessage mm = new MimeMessageCopyOnWriteProxy(mmorig);
@@ -245,6 +253,18 @@ public class MimeMessageCopyOnWriteProxyTest extends MimeMessageFromStreamTest {
         LifecycleUtil.dispose(mm);
     }
 
+    @Test
+    void testMessageWithWrongContentTypeShouldNotThrow() throws Exception {
+        ImmutableList<MailAddress> recipients = ImmutableList.of(new MailAddress("recipient@test.com"));
+        MimeMessageCopyOnWriteProxy messageFromSources = (MimeMessageCopyOnWriteProxy) getMessageFromSources(
+                content + sep + body);
+        MailImpl mail = new MailImpl("test", new MailAddress("test@test.com"), recipients, messageFromSources);
+        mail.getMessage().addHeader("Content-Type", "file;name=\"malformed.pdf\"");
+        mail.getMessage().saveChanges();
+        LifecycleUtil.dispose(mail);
+        LifecycleUtil.dispose(messageFromSources);
+    }
+
     private static String getReferences(MimeMessage m) {
         StringBuilder ref = new StringBuilder("/");
         while (m instanceof MimeMessageCopyOnWriteProxy) {
@@ -268,6 +288,5 @@ public class MimeMessageCopyOnWriteProxyTest extends MimeMessageFromStreamTest {
 
     private static boolean isSameMimeMessage(MimeMessage first, MimeMessage second) {
         return getWrappedMessage(first) == getWrappedMessage(second);
-
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4d524d8/server/container/guice/guice-common/src/main/java/org/apache/james/modules/CommonServicesModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/CommonServicesModule.java b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/CommonServicesModule.java
index f079fa7..3b5739b 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/CommonServicesModule.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/CommonServicesModule.java
@@ -61,6 +61,7 @@ public class CommonServicesModule extends AbstractModule {
         install(new DropWizardMetricsModule());
         install(new TaskManagerModule());
         install(new CleanupTaskModule());
+        install(new MimeMessageModule());
 
         bind(FileSystem.class).toInstance(fileSystem);
         bind(Configuration.class).toInstance(configuration);

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4d524d8/server/container/guice/guice-common/src/main/java/org/apache/james/modules/MimeMessageModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/MimeMessageModule.java b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/MimeMessageModule.java
new file mode 100644
index 0000000..294f230
--- /dev/null
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/MimeMessageModule.java
@@ -0,0 +1,33 @@
+/****************************************************************
+ * 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.modules;
+
+import org.apache.james.server.core.ContentTypeCleaner;
+
+import com.google.inject.AbstractModule;
+
+public class MimeMessageModule extends AbstractModule {
+
+    @Override
+    protected void configure() {
+        ContentTypeCleaner.initialize();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/a4d524d8/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpContentTypeTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpContentTypeTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpContentTypeTest.java
new file mode 100644
index 0000000..d72dbca
--- /dev/null
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpContentTypeTest.java
@@ -0,0 +1,151 @@
+/****************************************************************
+ * 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.smtp;
+
+import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
+import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
+import static org.apache.james.mailets.configuration.Constants.PASSWORD;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasSize;
+import static org.hamcrest.Matchers.not;
+import static org.hamcrest.Matchers.startsWith;
+
+import org.apache.james.MemoryJamesServerMain;
+import org.apache.james.core.builder.MimeMessageBuilder;
+import org.apache.james.mailets.TemporaryJamesServer;
+import org.apache.james.mailets.configuration.CommonProcessors;
+import org.apache.james.mailets.configuration.MailetConfiguration;
+import org.apache.james.mailets.configuration.MailetContainer;
+import org.apache.james.mailets.configuration.ProcessorConfiguration;
+import org.apache.james.mailets.configuration.SmtpConfiguration;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
+import org.apache.james.probe.DataProbe;
+import org.apache.james.server.core.MailImpl;
+import org.apache.james.transport.matchers.SMTPIsAuthNetwork;
+import org.apache.james.utils.DataProbeImpl;
+import org.apache.james.utils.FakeSmtp;
+import org.apache.james.utils.IMAPMessageReader;
+import org.apache.james.utils.SMTPMessageSender;
+import org.apache.mailet.Mail;
+import org.junit.After;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+import javax.mail.MessagingException;
+
+public class SmtpContentTypeTest {
+    private static final String FROM = "fromuser@" + DEFAULT_DOMAIN;
+    private static final String TO = "to@any.com";
+    public static final String SUBJECT = "test";
+
+    @ClassRule
+    public static FakeSmtp fakeSmtp = new FakeSmtp();
+    @Rule
+    public IMAPMessageReader imapMessageReader = new IMAPMessageReader();
+    @Rule
+    public SMTPMessageSender messageSender = new SMTPMessageSender(DEFAULT_DOMAIN);
+    @Rule
+    public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+    private TemporaryJamesServer jamesServer;
+
+    @BeforeClass
+    public static void setup() {
+        fakeSmtp.awaitStarted(awaitAtMostOneMinute);
+    }
+
+    private void createJamesServer(SmtpConfiguration.Builder smtpConfiguration) throws Exception {
+        MailetContainer.Builder mailetContainer = TemporaryJamesServer.SIMPLE_MAILET_CONTAINER_CONFIGURATION
+            .putProcessor(ProcessorConfiguration.transport()
+                .addMailetsFrom(CommonProcessors.deliverOnlyTransport())
+                .addMailet(MailetConfiguration.remoteDeliveryBuilder()
+                    .matcher(SMTPIsAuthNetwork.class)
+                    .addProperty("gateway", fakeSmtp.getContainer().getContainerIp()))
+                .addMailet(MailetConfiguration.TO_BOUNCE));
+
+        jamesServer = TemporaryJamesServer.builder()
+            .withBase(MemoryJamesServerMain.SMTP_AND_IMAP_MODULE)
+            .withSmtpConfiguration(smtpConfiguration)
+            .withMailetContainer(mailetContainer)
+            .build(temporaryFolder);
+
+        DataProbe dataProbe = jamesServer.getProbe(DataProbeImpl.class);
+        dataProbe.addDomain(DEFAULT_DOMAIN);
+        dataProbe.addUser(FROM, PASSWORD);
+    }
+
+    @After
+    public void tearDown() {
+        fakeSmtp.clean();
+        if (jamesServer != null) {
+            jamesServer.shutdown();
+        }
+    }
+
+    @Test
+    public void userShouldBeAbleToReceiveMessagesWithGoodContentType() throws Exception {
+        createJamesServer(SmtpConfiguration.builder()
+            .requireAuthentication()
+            .withAutorizedAddresses("172.0.0.0/8"));
+
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
+            .authenticate(FROM, PASSWORD)
+            .sendMessage(mailWithContentType("text/plain;"));
+
+        awaitAtMostOneMinute
+            .untilAsserted(() -> fakeSmtp.assertEmailReceived(response -> response
+                .body("", hasSize(1))
+                .body("[0].from", equalTo(FROM))
+                .body("[0].subject", equalTo(SUBJECT))
+                .body("[0].headers.content-type", startsWith("text/plain;"))));
+    }
+
+    @Test
+    public void userShouldBeAbleToReceiveMessagesWithBadContentType() throws Exception {
+        createJamesServer(SmtpConfiguration.builder()
+            .requireAuthentication()
+            .withAutorizedAddresses("172.0.0.0/8"));
+
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
+            .authenticate(FROM, PASSWORD)
+            .sendMessage(mailWithContentType("wrong|Content-Type;"));
+
+        awaitAtMostOneMinute
+            .untilAsserted(() -> fakeSmtp.assertEmailReceived(response -> response
+                .body("", hasSize(1))
+                .body("[0].from", equalTo(FROM))
+                .body("[0].subject", equalTo(SUBJECT))
+                .body("[0].headers.content-type", not(startsWith("wrong|Content-Type;")))));
+    }
+
+    private Mail mailWithContentType(String contentType) throws MessagingException {
+        return MailImpl.builder()
+            .sender(FROM)
+            .recipient(TO)
+            .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+                .setSubject(SUBJECT)
+                .setText("content", contentType))
+            .build();
+    }
+}


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


[4/8] james-project git commit: JAMES-2655 Simplify JPA RRT query logic

Posted by bt...@apache.org.
JAMES-2655 Simplify JPA RRT query logic

Previous queries were complex and were syntactically incorrect when run against
MariaDB as reported by Marc Chamberlin.

This lead to portability issue.

Note that simplifying queries is an attempt to solve this.


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

Branch: refs/heads/master
Commit: deb030687108ea45a25a596d9836ebd4cacd593d
Parents: 7364833
Author: Benoit Tellier <bt...@linagora.com>
Authored: Wed Jan 30 11:08:03 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Jan 30 17:55:18 2019 +0700

----------------------------------------------------------------------
 .../james/rrt/jpa/JPARecipientRewriteTable.java      | 15 ++++++++++-----
 .../james/rrt/jpa/model/JPARecipientRewrite.java     | 10 ++++------
 2 files changed, 14 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/deb03068/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java
----------------------------------------------------------------------
diff --git a/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java b/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java
index d653d3d..c5f1e8d 100644
--- a/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java
+++ b/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java
@@ -76,11 +76,16 @@ public class JPARecipientRewriteTable extends AbstractRecipientRewriteTable {
 
     @Override
     protected Mappings mapAddress(String user, Domain domain) throws RecipientRewriteTableException {
-        Mappings mapping = getMapping(user, domain, "selectExactMappings");
-        if (!mapping.isEmpty()) {
-            return mapping;
+        Mappings userDomainMapping = getMapping(user, domain, "selectUserDomainMapping");
+        if (userDomainMapping != null && !userDomainMapping.isEmpty()) {
+            return userDomainMapping;
+        }
+        MappingSource domainSource = MappingSource.fromDomain(domain);
+        Mappings domainMapping = getMapping(domainSource.getFixedUser(), domain, "selectUserDomainMapping");
+        if (domainMapping != null && !domainMapping.isEmpty()) {
+            return domainMapping;
         }
-        return getMapping(user, domain, "selectMappings");
+        return MappingsImpl.empty();
     }
 
     private Mappings getMapping(String user, Domain domain, String queryName) throws RecipientRewriteTableException {
@@ -175,7 +180,7 @@ public class JPARecipientRewriteTable extends AbstractRecipientRewriteTable {
 
     /**
      * Update the mapping for the given user and domain
-     * 
+     *
      * @param user the user
      * @param domain the domain
      * @param mapping the mapping

http://git-wip-us.apache.org/repos/asf/james-project/blob/deb03068/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/model/JPARecipientRewrite.java
----------------------------------------------------------------------
diff --git a/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/model/JPARecipientRewrite.java b/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/model/JPARecipientRewrite.java
index e1f2639..1edebad 100644
--- a/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/model/JPARecipientRewrite.java
+++ b/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/model/JPARecipientRewrite.java
@@ -39,12 +39,10 @@ import com.google.common.base.Objects;
 @Entity(name = "JamesRecipientRewrite")
 @Table(name = JPARecipientRewrite.JAMES_RECIPIENT_REWRITE)
 @NamedQueries({ 
-    @NamedQuery(name = "selectMappings", query = "SELECT rrt FROM JamesRecipientRewrite rrt WHERE (rrt.user LIKE :user OR rrt.user='*') and (rrt.domain like :domain or rrt.domain='*') ORDER BY rrt.domain DESC"),
-    @NamedQuery(name = "selectExactMappings", query = "SELECT rrt FROM JamesRecipientRewrite rrt WHERE (rrt.user LIKE :user) and (rrt.domain like :domain) ORDER BY rrt.domain DESC"),
-        @NamedQuery(name = "selectUserDomainMapping", query = "SELECT rrt FROM JamesRecipientRewrite rrt WHERE rrt.user=:user AND rrt.domain=:domain"), 
-        @NamedQuery(name = "selectAllMappings", query = "SELECT rrt FROM JamesRecipientRewrite rrt"),
-        @NamedQuery(name = "deleteMapping", query = "DELETE FROM JamesRecipientRewrite rrt WHERE rrt.user=:user AND rrt.domain=:domain AND rrt.targetAddress=:targetAddress"),
-        @NamedQuery(name = "updateMapping", query = "UPDATE JamesRecipientRewrite rrt SET rrt.targetAddress=:targetAddress WHERE rrt.user=:user AND rrt.domain=:domain") })
+    @NamedQuery(name = "selectUserDomainMapping", query = "SELECT rrt FROM JamesRecipientRewrite rrt WHERE rrt.user=:user AND rrt.domain=:domain"),
+    @NamedQuery(name = "selectAllMappings", query = "SELECT rrt FROM JamesRecipientRewrite rrt"),
+    @NamedQuery(name = "deleteMapping", query = "DELETE FROM JamesRecipientRewrite rrt WHERE rrt.user=:user AND rrt.domain=:domain AND rrt.targetAddress=:targetAddress"),
+    @NamedQuery(name = "updateMapping", query = "UPDATE JamesRecipientRewrite rrt SET rrt.targetAddress=:targetAddress WHERE rrt.user=:user AND rrt.domain=:domain") })
 @IdClass(JPARecipientRewrite.RecipientRewriteTableId.class)
 public class JPARecipientRewrite {
 


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


[3/8] james-project git commit: JAMES-2655 Simplify JPA RRT javaDoc

Posted by bt...@apache.org.
JAMES-2655 Simplify JPA RRT javaDoc

These details can be infered via java source code analysis. As no description is added, they are useless.

Not to mention that this generated intelliJ warnings/errors


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

Branch: refs/heads/master
Commit: fb43afc2bec1d4e23c35e8220ce9f523c9b5c43d
Parents: 12bf59e
Author: Benoit Tellier <bt...@linagora.com>
Authored: Wed Jan 30 11:56:07 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Jan 30 17:55:18 2019 +0700

----------------------------------------------------------------------
 .../james/rrt/jpa/JPARecipientRewriteTable.java     | 16 ----------------
 1 file changed, 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/fb43afc2/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java
----------------------------------------------------------------------
diff --git a/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java b/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java
index 2850539..0df606d 100644
--- a/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java
+++ b/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java
@@ -54,8 +54,6 @@ public class JPARecipientRewriteTable extends AbstractRecipientRewriteTable {
 
     /**
      * Set the entity manager to use.
-     * 
-     * @param entityManagerFactory
      */
     @Inject
     @PersistenceUnit(unitName = "James")
@@ -153,11 +151,7 @@ public class JPARecipientRewriteTable extends AbstractRecipientRewriteTable {
     /**
      * Update the mapping for the given user and domain
      *
-     * @param user the user
-     * @param domain the domain
-     * @param mapping the mapping
      * @return true if update was successfully
-     * @throws RecipientRewriteTableException
      */
     private boolean doUpdateMapping(MappingSource source, String mapping) throws RecipientRewriteTableException {
         EntityManager entityManager = entityManagerFactory.createEntityManager();
@@ -188,11 +182,6 @@ public class JPARecipientRewriteTable extends AbstractRecipientRewriteTable {
 
     /**
      * Remove a mapping for the given user and domain
-     * 
-     * @param user the user
-     * @param domain the domain
-     * @param mapping the mapping
-     * @throws RecipientRewriteTableException
      */
     private void doRemoveMapping(MappingSource source, String mapping) throws RecipientRewriteTableException {
         EntityManager entityManager = entityManagerFactory.createEntityManager();
@@ -220,11 +209,6 @@ public class JPARecipientRewriteTable extends AbstractRecipientRewriteTable {
 
     /**
      * Add mapping for given user and domain
-     * 
-     * @param user the user
-     * @param domain the domain
-     * @param mapping the mapping
-     * @throws RecipientRewriteTableException
      */
     private void doAddMapping(MappingSource source, String mapping) throws RecipientRewriteTableException {
         EntityManager entityManager = entityManagerFactory.createEntityManager();


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


[7/8] james-project git commit: JAMES-2652 Add Overflow test for POP3 RETR command

Posted by bt...@apache.org.
JAMES-2652 Add Overflow test for POP3 RETR command


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

Branch: refs/heads/master
Commit: 7329ac6e7f7389abb695a73596d99fc62759dac2
Parents: fb43afc
Author: Gautier DI FOLCO <gd...@linagora.com>
Authored: Fri Jan 25 15:34:09 2019 +0100
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Jan 30 17:55:50 2019 +0700

----------------------------------------------------------------------
 protocols/pop3/pom.xml                          | 28 +++++++--
 .../protocols/pop3/core/RetrCmdHandler.java     |  4 +-
 .../protocols/pop3/core/RetrCmdHandlerTest.java | 63 ++++++++++++++++++++
 3 files changed, 90 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/7329ac6e/protocols/pop3/pom.xml
----------------------------------------------------------------------
diff --git a/protocols/pop3/pom.xml b/protocols/pop3/pom.xml
index 2d3479b..4c579ba 100644
--- a/protocols/pop3/pom.xml
+++ b/protocols/pop3/pom.xml
@@ -58,13 +58,33 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.assertj</groupId>
-            <artifactId>assertj-core</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-params</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.vintage</groupId>
+            <artifactId>junit-vintage-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>

http://git-wip-us.apache.org/repos/asf/james-project/blob/7329ac6e/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java
----------------------------------------------------------------------
diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java
index 53b84d7..65bf8e0 100644
--- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java
+++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java
@@ -35,6 +35,7 @@ import org.apache.james.protocols.pop3.POP3Session;
 import org.apache.james.protocols.pop3.POP3StreamResponse;
 import org.apache.james.protocols.pop3.mailbox.MessageMetaData;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableSet;
 
 /**
@@ -43,7 +44,8 @@ import com.google.common.collect.ImmutableSet;
 public class RetrCmdHandler implements CommandHandler<POP3Session> {
 
     private static final Collection<String> COMMANDS = ImmutableSet.of("RETR");
-    private static final Response SYNTAX_ERROR = new POP3Response(POP3Response.ERR_RESPONSE, "Usage: RETR [mail number]").immutable();
+    @VisibleForTesting
+    static final Response SYNTAX_ERROR = new POP3Response(POP3Response.ERR_RESPONSE, "Usage: RETR [mail number]").immutable();
     private static final Response ERROR_MESSAGE_RETRIEVE = new POP3Response(POP3Response.ERR_RESPONSE, "Error while retrieving message.").immutable();
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/7329ac6e/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/RetrCmdHandlerTest.java
----------------------------------------------------------------------
diff --git a/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/RetrCmdHandlerTest.java b/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/RetrCmdHandlerTest.java
new file mode 100644
index 0000000..92d1d6b
--- /dev/null
+++ b/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/RetrCmdHandlerTest.java
@@ -0,0 +1,63 @@
+/****************************************************************
+ * 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.protocols.pop3.core;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.apache.james.protocols.api.Request;
+import org.apache.james.protocols.pop3.POP3Session;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
+
+import java.util.Collections;
+import java.util.stream.Collectors;
+
+class RetrCmdHandlerTest {
+
+    @ParameterizedTest
+    @ValueSource(ints = {8, 16, 32, 64, 128, 256})
+    void onCommandShouldNotThrowOnMessageHexNumberOverflow(int pad) {
+        POP3Session session = mock(POP3Session.class);
+        when(session.getHandlerState()).thenReturn(POP3Session.TRANSACTION);
+
+        Request request = mock(Request.class);
+        String overflowedNumber = Collections.nCopies(pad, "\\xff").stream().collect(Collectors.joining());
+        when(request.getArgument()).thenReturn(overflowedNumber);
+
+        assertThat(new RetrCmdHandler().onCommand(session, request))
+            .isEqualTo(RetrCmdHandler.SYNTAX_ERROR);
+    }
+
+    @Test
+    void onCommandShouldNotThrowOnMessageDecNumberOverflow() {
+        POP3Session session = mock(POP3Session.class);
+        when(session.getHandlerState()).thenReturn(POP3Session.TRANSACTION);
+
+        Request request = mock(Request.class);
+        String overflowedNumber = Long.toString(Long.MAX_VALUE);
+        when(request.getArgument()).thenReturn(overflowedNumber);
+
+        assertThat(new RetrCmdHandler().onCommand(session, request))
+            .isEqualTo(RetrCmdHandler.SYNTAX_ERROR);
+    }
+}


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


[2/8] james-project git commit: JAMES-2654 Exclude logback dependency from CLI

Posted by bt...@apache.org.
JAMES-2654 Exclude logback dependency from CLI


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

Branch: refs/heads/master
Commit: e655e24303d666d858f1b1f6adb1e667178048e1
Parents: d58b976
Author: Benoit Tellier <bt...@linagora.com>
Authored: Wed Jan 30 10:39:04 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Jan 30 17:50:20 2019 +0700

----------------------------------------------------------------------
 server/app/pom.xml | 6 ++++++
 1 file changed, 6 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/e655e243/server/app/pom.xml
----------------------------------------------------------------------
diff --git a/server/app/pom.xml b/server/app/pom.xml
index 1928a67..5d9ed14 100644
--- a/server/app/pom.xml
+++ b/server/app/pom.xml
@@ -122,6 +122,12 @@
         <dependency>
             <groupId>${james.groupId}</groupId>
             <artifactId>james-server-cli</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>ch.qos.logback</groupId>
+                    <artifactId>logback-classic</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>


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


[5/8] james-project git commit: JAMES-2655 Strong typing for JPA RRT getMapping

Posted by bt...@apache.org.
JAMES-2655 Strong typing for JPA RRT getMapping


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

Branch: refs/heads/master
Commit: e839a782a18bb3c03435866d1b22d169a74b71e5
Parents: deb0306
Author: Benoit Tellier <bt...@linagora.com>
Authored: Wed Jan 30 11:54:33 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Jan 30 17:55:18 2019 +0700

----------------------------------------------------------------------
 .../james/rrt/jpa/JPARecipientRewriteTable.java      | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/e839a782/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java
----------------------------------------------------------------------
diff --git a/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java b/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java
index c5f1e8d..44795ed 100644
--- a/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java
+++ b/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java
@@ -76,28 +76,27 @@ public class JPARecipientRewriteTable extends AbstractRecipientRewriteTable {
 
     @Override
     protected Mappings mapAddress(String user, Domain domain) throws RecipientRewriteTableException {
-        Mappings userDomainMapping = getMapping(user, domain, "selectUserDomainMapping");
+        Mappings userDomainMapping = getMapping(MappingSource.fromUser(user, domain));
         if (userDomainMapping != null && !userDomainMapping.isEmpty()) {
             return userDomainMapping;
         }
-        MappingSource domainSource = MappingSource.fromDomain(domain);
-        Mappings domainMapping = getMapping(domainSource.getFixedUser(), domain, "selectUserDomainMapping");
+        Mappings domainMapping = getMapping(MappingSource.fromDomain(domain));
         if (domainMapping != null && !domainMapping.isEmpty()) {
             return domainMapping;
         }
         return MappingsImpl.empty();
     }
 
-    private Mappings getMapping(String user, Domain domain, String queryName) throws RecipientRewriteTableException {
+    private Mappings getMapping(MappingSource mappingSource) throws RecipientRewriteTableException {
         EntityManager entityManager = entityManagerFactory.createEntityManager();
         final EntityTransaction transaction = entityManager.getTransaction();
         try {
             transaction.begin();
             @SuppressWarnings("unchecked")
             List<JPARecipientRewrite> virtualUsers = entityManager
-                .createNamedQuery(queryName)
-                .setParameter("user", user)
-                .setParameter("domain", domain.asString())
+                .createNamedQuery("selectUserDomainMapping")
+                .setParameter("user", mappingSource.getFixedUser())
+                .setParameter("domain", mappingSource.getFixedDomain())
                 .getResultList();
             transaction.commit();
             if (virtualUsers.size() > 0) {
@@ -105,7 +104,7 @@ public class JPARecipientRewriteTable extends AbstractRecipientRewriteTable {
             }
             return MappingsImpl.empty();
         } catch (PersistenceException e) {
-            LOGGER.debug("Failed to find mapping for  user={} and domain={}", user, domain, e);
+            LOGGER.debug("Failed to find mapping for source={}", mappingSource, e);
             if (transaction.isActive()) {
                 transaction.rollback();
             }


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