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 <[email protected]> Authored: Fri Oct 28 20:38:21 2016 +0200 Committer: Benoit Tellier <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
