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 ro...@apache.org on 2016/11/23 13:50:16 UTC

[13/46] james-project git commit: JAMES-1854 Responsibility of handling virtualHosting should be delegated to MailStorer

JAMES-1854 Responsibility of handling virtualHosting should be delegated to MailStorer


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

Branch: refs/heads/master
Commit: 2490351ee8ddd1b4f5014c1e1e1e17160a488443
Parents: 4339c78
Author: Benoit Tellier <bt...@linagora.com>
Authored: Fri Oct 28 20:38:21 2016 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Nov 18 18:46:46 2016 +0700

----------------------------------------------------------------------
 .../mailets/delivery/DeliveryUtils.java         | 14 -------
 .../mailets/delivery/SimpleMailStorer.java      | 16 +++++++-
 .../jsieve/delivery/SieveMailStorer.java        | 41 +++++++++++++-------
 3 files changed, 42 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/2490351e/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/DeliveryUtils.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/DeliveryUtils.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/DeliveryUtils.java
index 72fb609..7da9657 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/DeliveryUtils.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/DeliveryUtils.java
@@ -23,20 +23,6 @@ import org.apache.mailet.MailAddress;
 
 public class DeliveryUtils {
 
-    public static String getUsername(MailAddress m, UsersRepository usersRepository, Log log) {
-        try {
-            if (usersRepository.supportVirtualHosting()) {
-                return m.toString();
-            } else {
-                return m.getLocalPart() + "@localhost";
-            }
-        } catch (UsersRepositoryException e) {
-            log.error("Unable to access UsersRepository", e);
-            return m.getLocalPart() + "@localhost";
-
-        }
-    }
-
     public static String prettyPrint(MailAddress mailAddress) {
         if (mailAddress != null) {
             return  "<" + mailAddress.toString() + ">";

http://git-wip-us.apache.org/repos/asf/james-project/blob/2490351e/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStorer.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStorer.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStorer.java
index 31f3251..c1b4074 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStorer.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStorer.java
@@ -23,6 +23,7 @@ import javax.mail.MessagingException;
 
 import org.apache.commons.logging.Log;
 import org.apache.james.user.api.UsersRepository;
+import org.apache.james.user.api.UsersRepositoryException;
 import org.apache.mailet.Mail;
 import org.apache.mailet.MailAddress;
 
@@ -83,11 +84,24 @@ public class SimpleMailStorer implements MailStorer {
 
     @Override
     public void storeMail(MailAddress sender, MailAddress recipient, Mail mail) throws MessagingException {
-        String username = DeliveryUtils.getUsername(recipient, usersRepository, log);
+        String username = computeUsername(recipient);
 
         mailboxAppender.append(mail.getMessage(), username, folder);
 
         log.info("Local delivered mail " + mail.getName() + " sucessfully from " + DeliveryUtils.prettyPrint(sender)
             + " to " + DeliveryUtils.prettyPrint(recipient) + " in folder " + this.folder);
     }
+
+    private String computeUsername(MailAddress recipient) throws MessagingException {
+        try {
+            if (usersRepository.supportVirtualHosting()) {
+                return recipient.toString();
+            } else {
+                return recipient.getLocalPart();
+            }
+        } catch (UsersRepositoryException e) {
+            log.error("Unable to access UsersRepository", e);
+            return recipient.toString();
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/2490351e/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveMailStorer.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveMailStorer.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveMailStorer.java
index f4c04f2..8b28321 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveMailStorer.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveMailStorer.java
@@ -32,6 +32,7 @@ import org.apache.james.transport.mailets.jsieve.ActionDispatcher;
 import org.apache.james.transport.mailets.jsieve.ResourceLocator;
 import org.apache.james.transport.mailets.jsieve.SieveMailAdapter;
 import org.apache.james.user.api.UsersRepository;
+import org.apache.james.user.api.UsersRepositoryException;
 import org.apache.jsieve.ConfigurationManager;
 import org.apache.jsieve.SieveConfigurationException;
 import org.apache.jsieve.SieveFactory;
@@ -137,9 +138,8 @@ public class SieveMailStorer implements MailStorer {
     }
 
     protected void sieveMessage(MailAddress recipient, Mail aMail, Log log) throws MessagingException {
-        String username = DeliveryUtils.getUsername(recipient, usersRepos, log);
         try {
-            final ResourceLocator.UserSieveInformation userSieveInformation = resourceLocator.get(getScriptUri(recipient, log));
+            ResourceLocator.UserSieveInformation userSieveInformation = resourceLocator.get(getScriptUri(recipient));
             sieveMessageEvaluate(recipient, aMail, userSieveInformation, log);
         } catch (Exception ex) {
             // SIEVE is a mail filtering protocol.
@@ -147,7 +147,7 @@ public class SieveMailStorer implements MailStorer {
             // seems very unfriendly.
             // So just log and store in INBOX
             log.error("Cannot evaluate Sieve script. Storing mail in user INBOX.", ex);
-            storeMessageInbox(username, aMail.getMessage());
+            storeMessageInbox(recipient, aMail.getMessage());
         }
     }
 
@@ -158,29 +158,42 @@ public class SieveMailStorer implements MailStorer {
                 userSieveInformation.getScriptInterpretationDate(), recipient);
             aMailAdapter.setLog(log);
             // This logging operation is potentially costly
-            log.debug("Evaluating " + aMailAdapter.toString() + "against \"" + getScriptUri(recipient, log) + "\"");
+            log.debug("Evaluating " + aMailAdapter.toString() + "against \"" + getScriptUri(recipient) + "\"");
             factory.evaluate(aMailAdapter, factory.parse(userSieveInformation.getScriptContent()));
         } catch (SieveException ex) {
-            handleFailure(recipient, aMail, ex, log);
+            handleFailure(recipient, aMail, ex);
         }
         catch (ParseException ex) {
-            handleFailure(recipient, aMail, ex, log);
+            handleFailure(recipient, aMail, ex);
         }
         catch (TokenMgrError ex) {
-            handleFailure(recipient, aMail, new SieveException(ex), log);
+            handleFailure(recipient, aMail, new SieveException(ex));
         }
     }
 
-    protected String getScriptUri(MailAddress m, Log log) {
-        return "//" + DeliveryUtils.getUsername(m, usersRepos, log) + "/sieve";
+    protected String getScriptUri(MailAddress m) {
+        return "//" + retrieveUserNameUsedForScriptStorage(m) + "/sieve";
     }
 
-    protected void handleFailure(MailAddress recipient, Mail aMail, Exception ex, Log log) throws MessagingException, IOException {
-        String user = DeliveryUtils.getUsername(recipient, usersRepos, log);
-        storeMessageInbox(user, SieveFailureMessageComposer.composeMessage(aMail, ex, user));
+    protected void handleFailure(MailAddress recipient, Mail aMail, Exception ex) throws MessagingException, IOException {
+        storeMessageInbox(recipient, SieveFailureMessageComposer.composeMessage(aMail, ex, recipient.toString()));
     }
 
-    protected void storeMessageInbox(String username, MimeMessage message) throws MessagingException {
-        sievePoster.post("mailbox://" + username + "/", message);
+    protected void storeMessageInbox(MailAddress mailAddress, MimeMessage message) throws MessagingException {
+        sievePoster.post("mailbox://" + mailAddress + "/", message);
+    }
+
+    public String retrieveUserNameUsedForScriptStorage(MailAddress m) {
+        try {
+            if (usersRepos.supportVirtualHosting()) {
+                return m.toString();
+            } else {
+                return m.getLocalPart() + "@localhost";
+            }
+        } catch (UsersRepositoryException e) {
+            log.error("Unable to access UsersRepository", e);
+            return m.getLocalPart() + "@localhost";
+
+        }
     }
 }


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