JAMES-1854 VirtualHosting should be managed by UsersRepository
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/b4a31c76 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/b4a31c76 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/b4a31c76 Branch: refs/heads/master Commit: b4a31c76418d05559112a3ba523432de15aac698 Parents: f719e2f Author: Benoit Tellier <[email protected]> Authored: Thu Nov 10 08:33:43 2016 +0700 Committer: Benoit Tellier <[email protected]> Committed: Fri Nov 18 18:46:46 2016 +0700 ---------------------------------------------------------------------- .../apache/james/user/api/UsersRepository.java | 10 +++++++++ .../user/ldap/ReadOnlyUsersLDAPRepository.java | 6 +++++ .../james/user/lib/AbstractUsersRepository.java | 10 +++++++++ .../user/lib/AbstractUsersRepositoryTest.java | 23 ++++++++++++++++++++ .../impl/JamesMailetContext.java | 7 +----- .../james/transport/mailets/ToSenderFolder.java | 20 ++++++++--------- .../mailets/delivery/MailboxAppender.java | 13 ++++++----- .../mailets/delivery/SimpleMailStorer.java | 6 +---- .../jsieve/delivery/SieveMailStorer.java | 11 +++++----- .../mailets/jsieve/delivery/SievePoster.java | 6 ++--- .../matchers/AbstractStorageQuota.java | 7 +----- .../mailets/delivery/LocalDeliveryTest.java | 7 +++++- .../mailets/delivery/SieveIntegrationTest.java | 3 +++ .../mailets/delivery/SimpleMailStorerTest.java | 11 ++++------ .../mailets/delivery/ToRecipientFolderTest.java | 4 ++++ .../james/fetchmail/MessageProcessor.java | 16 +++++--------- 16 files changed, 98 insertions(+), 62 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java ---------------------------------------------------------------------- diff --git a/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java b/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java index b8da1eb..666fdd7 100644 --- a/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java +++ b/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java @@ -22,6 +22,7 @@ package org.apache.james.user.api; import java.util.Iterator; import org.apache.james.user.api.model.User; +import org.apache.mailet.MailAddress; /** * Interface for a repository of users. A repository represents a logical @@ -127,4 +128,13 @@ public interface UsersRepository { */ boolean supportVirtualHosting() throws UsersRepositoryException; + /** + * Returns username to be used for a given MailAddress + * + * @param mailAddress + * @return Username used by James for this mailAddress + * @throws UsersRepositoryException + */ + String getUser(MailAddress mailAddress) throws UsersRepositoryException; + } http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java ---------------------------------------------------------------------- diff --git a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java index b7aca3c..056aa8b 100644 --- a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java +++ b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java @@ -51,6 +51,7 @@ import org.apache.james.user.ldap.api.LdapConstants; import org.apache.james.util.retry.DoublingRetrySchedule; import org.apache.james.util.retry.api.RetrySchedule; import org.apache.james.util.retry.naming.ldap.RetryingLdapContext; +import org.apache.mailet.MailAddress; import org.slf4j.Logger; /** @@ -761,4 +762,9 @@ public class ReadOnlyUsersLDAPRepository implements UsersRepository, Configurabl return false; } + + @Override + public String getUser(MailAddress mailAddress) throws UsersRepositoryException { + return mailAddress.getLocalPart(); + } } http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java ---------------------------------------------------------------------- diff --git a/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java b/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java index 3f57dba..87a4373 100644 --- a/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java +++ b/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java @@ -30,6 +30,7 @@ import org.apache.james.lifecycle.api.LogEnabled; import org.apache.james.user.api.AlreadyExistInUsersRepositoryException; import org.apache.james.user.api.UsersRepository; import org.apache.james.user.api.UsersRepositoryException; +import org.apache.mailet.MailAddress; import org.slf4j.Logger; public abstract class AbstractUsersRepository implements UsersRepository, LogEnabled, Configurable { @@ -132,4 +133,13 @@ public abstract class AbstractUsersRepository implements UsersRepository, LogEna * If an error occurred */ protected abstract void doAddUser(String username, String password) throws UsersRepositoryException; + + @Override + public String getUser(MailAddress mailAddress) throws UsersRepositoryException { + if (supportVirtualHosting()) { + return mailAddress.print(); + } else { + return mailAddress.getLocalPart(); + } + } } http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java ---------------------------------------------------------------------- diff --git a/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java b/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java index 830aa4e..0a4e28b 100644 --- a/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java +++ b/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java @@ -23,12 +23,16 @@ import static org.assertj.core.api.Assertions.assertThat; import java.util.ArrayList; import java.util.Iterator; +import org.apache.commons.lang.NotImplementedException; import org.apache.james.domainlist.api.mock.SimpleDomainList; import org.apache.james.lifecycle.api.LifecycleUtil; import org.apache.james.user.api.AlreadyExistInUsersRepositoryException; +import org.apache.james.user.api.UsersRepository; import org.apache.james.user.api.UsersRepositoryException; import org.apache.james.user.api.model.User; +import org.apache.mailet.MailAddress; import org.junit.After; +import org.junit.Assume; import org.junit.Before; import org.junit.Test; @@ -299,6 +303,25 @@ public abstract class AbstractUsersRepositoryTest { usersRepository.updateUser(user); } + @Test + public void virtualHostedUsersRepositoryShouldUseFullMailAddressAsUsername() throws Exception { + usersRepository.setEnableVirtualHosting(true); + + // Some implementations do not support changing virtual hosting value + Assume.assumeTrue(usersRepository.supportVirtualHosting()); + + assertThat(usersRepository.getUser(new MailAddress("local@domain"))).isEqualTo("local@domain"); + } + + @Test + public void nonVirtualHostedUsersRepositoryShouldUseLocalPartAsUsername() throws Exception { + usersRepository.setEnableVirtualHosting(false); + + // Some implementations do not support changing virtual hosting value + Assume.assumeFalse(usersRepository.supportVirtualHosting()); + + assertThat(usersRepository.getUser(new MailAddress("local@domain"))).isEqualTo("local"); + } protected void disposeUsersRepository() throws UsersRepositoryException { LifecycleUtil.dispose(this.usersRepository); http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java index 26f7d9f..983317a 100644 --- a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java +++ b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java @@ -258,16 +258,11 @@ public class JamesMailetContext implements MailetContext, LogEnabled, Configurab @Override public boolean isLocalEmail(MailAddress mailAddress) { if (mailAddress != null) { - String userName = mailAddress.toString().toLowerCase(); if (!isLocalServer(mailAddress.getDomain().toLowerCase())) { return false; } try { - if (!localusers.supportVirtualHosting()) { - userName = mailAddress.getLocalPart().toLowerCase(); - } - return localusers.contains(userName); - + return localusers.contains(localusers.getUser(mailAddress)); } catch (UsersRepositoryException e) { log("Unable to access UsersRepository", e); } http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java index 222c9cf..ccaa94c 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java @@ -84,17 +84,7 @@ public class ToSenderFolder extends GenericMailet { private void doService(Mail mail) throws MessagingException { final MailAddress sender = mail.getSender(); - String username; - try { - if (usersRepository.supportVirtualHosting()) { - username = sender.toString(); - } - else { - username = sender.getLocalPart(); - } - } catch (UsersRepositoryException e) { - throw new MessagingException(e.getMessage()); - } + String username = retrieveUser(sender); final MailboxSession session; try { @@ -140,6 +130,14 @@ public class ToSenderFolder extends GenericMailet { } + private String retrieveUser(MailAddress sender) throws MessagingException { + try { + return usersRepository.getUser(sender); + } catch (UsersRepositoryException e) { + throw new MessagingException(e.getMessage()); + } + } + /* (non-Javadoc) * @see org.apache.mailet.base.GenericMailet#init() */ http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppender.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppender.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppender.java index 9c08f46..4b17263 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppender.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppender.java @@ -79,11 +79,14 @@ public class MailboxAppender { } finally { session.close(); try { - mailboxManager.logout(session, true); - } catch (MailboxException e) { - throw new MessagingException("Can logout from mailbox", e); + try { + mailboxManager.logout(session, true); + } catch (MailboxException e) { + throw new MessagingException("Can logout from mailbox", e); + } + } finally { + mailboxManager.endProcessingRequest(session); } - mailboxManager.endProcessingRequest(session); } } @@ -93,7 +96,7 @@ public class MailboxAppender { } final MessageManager mailbox = mailboxManager.getMailbox(path, session); if (mailbox == null) { - throw new MessagingException("Mailbox for user " + session.getUser().getUserName() + " was not found on this server."); + throw new MessagingException("Mailbox " + path + " for user " + session.getUser().getUserName() + " was not found on this server."); } mailbox.appendMessage(new MimeMessageInputStream(mail), new Date(), session, IS_RECENT, FLAGS); } http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/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 bad7aa8..902edfd 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 @@ -94,11 +94,7 @@ public class SimpleMailStorer implements MailStorer { private String computeUsername(MailAddress recipient) throws MessagingException { try { - if (usersRepository.supportVirtualHosting()) { - return recipient.toString(); - } else { - return recipient.getLocalPart(); - } + return usersRepository.getUser(recipient); } catch (UsersRepositoryException e) { log.error("Unable to access UsersRepository", e); return recipient.toString(); http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/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 8b28321..1ec3489 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 @@ -180,20 +180,19 @@ public class SieveMailStorer implements MailStorer { } protected void storeMessageInbox(MailAddress mailAddress, MimeMessage message) throws MessagingException { - sievePoster.post("mailbox://" + mailAddress + "/", message); + sievePoster.post("mailbox://" + retrieveUserNameUsedForScriptStorage(mailAddress) + "/", message); } - public String retrieveUserNameUsedForScriptStorage(MailAddress m) { + public String retrieveUserNameUsedForScriptStorage(MailAddress mailAddress) { try { if (usersRepos.supportVirtualHosting()) { - return m.toString(); + return mailAddress.print(); } else { - return m.getLocalPart() + "@localhost"; + return mailAddress.getLocalPart() + "@localhost"; } } catch (UsersRepositoryException e) { log.error("Unable to access UsersRepository", e); - return m.getLocalPart() + "@localhost"; - + return mailAddress.getLocalPart() + "@localhost"; } } } http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SievePoster.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SievePoster.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SievePoster.java index 3caae1f..7a71930 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SievePoster.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SievePoster.java @@ -26,6 +26,7 @@ import org.apache.james.transport.mailets.delivery.MailboxAppender; import org.apache.james.transport.mailets.jsieve.Poster; import org.apache.james.user.api.UsersRepository; import org.apache.james.user.api.UsersRepositoryException; +import org.apache.mailet.MailAddress; public class SievePoster implements Poster { @@ -86,10 +87,7 @@ public class SievePoster implements Poster { String user = url.substring(startOfUser, endOfUser).toLowerCase(); // Check if we should use the full email address as username try { - if (usersRepos.supportVirtualHosting()) { - return user + "@" + host; - } - return user; + return usersRepos.getUser(new MailAddress(user, host)); } catch (UsersRepositoryException e) { throw new MessagingException("Unable to accessUsersRepository", e); } http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AbstractStorageQuota.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AbstractStorageQuota.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AbstractStorageQuota.java index 6ea1350..62ae3ad 100755 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AbstractStorageQuota.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AbstractStorageQuota.java @@ -112,12 +112,7 @@ abstract public class AbstractStorageQuota extends AbstractQuotaMatcher { try { // see if we need use the full email address as username or not. // See JAMES-1197 - if (localUsers.supportVirtualHosting()) { - username = recipient.toString().toLowerCase(Locale.US); - } - else { - username = recipient.getLocalPart().toLowerCase(Locale.US); - } + username = localUsers.getUser(recipient).toLowerCase(Locale.US); } catch (UsersRepositoryException e) { throw new MessagingException("Unable to access UsersRepository", e); http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java index 89a89a2..cebf75d 100644 --- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java +++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java @@ -72,6 +72,8 @@ import com.google.common.collect.ImmutableList; @RunWith(Parameterized.class) public class LocalDeliveryTest { + public static final String RECEIVER_DOMAIN_COM = "[email protected]"; + public static class Parameter { private final UsersRepository usersRepository; private final MailboxManager mailboxManager; @@ -163,6 +165,7 @@ public class LocalDeliveryTest { MessageManager messageManager = mock(MessageManager.class); when(parameter.getUsersRepository().supportVirtualHosting()).thenReturn(true); + when(parameter.getUsersRepository().getUser(new MailAddress(username))).thenReturn(username); doThrow(new ScriptNotFoundException()).when(parameter.getSieveRepository()).getActive(username); when(parameter.getMailboxManager().getMailbox(eq(inbox), any(MailboxSession.class))).thenReturn(messageManager); when(parameter.getUser().getUserName()).thenReturn(username); @@ -183,6 +186,8 @@ public class LocalDeliveryTest { MailboxPath inbox = new MailboxPath("#private", username, "INBOX"); MessageManager messageManager = mock(MessageManager.class); when(parameter.getUsersRepository().supportVirtualHosting()).thenReturn(false); + when(parameter.getUsersRepository().getUser(new MailAddress("receiver@localhost"))).thenReturn(username); + when(parameter.getUsersRepository().getUser(new MailAddress(RECEIVER_DOMAIN_COM))).thenReturn(username); doThrow(new ScriptNotFoundException()).when(parameter.getSieveRepository()).getActive(username); when(parameter.getMailboxManager().getMailbox(eq(inbox), any(MailboxSession.class))).thenReturn(messageManager); when(parameter.getUser().getUserName()).thenReturn(username); @@ -200,7 +205,7 @@ public class LocalDeliveryTest { MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties())); message.setSubject("Subject"); message.setSender(new InternetAddress("[email protected]")); - message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress("[email protected]")); + message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(RECEIVER_DOMAIN_COM)); MimeMultipart multipart = new MimeMultipart(); MimeBodyPart scriptPart = new MimeBodyPart(); scriptPart.setDataHandler( http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java index 3b88303..3aaaf68 100644 --- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java +++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java @@ -118,6 +118,7 @@ public class SieveIntegrationTest { @Test public void mailShouldBeWellDeliveredByDefaultToUserWhenVirtualHostingIsTurnedOn() throws Exception { when(usersRepository.supportVirtualHosting()).thenReturn(true); + when(usersRepository.getUser(new MailAddress(RECEIVER_DOMAIN_COM))).thenReturn(RECEIVER_DOMAIN_COM); when(resourceLocator.get(RECEIVER_DOMAIN_COM)).thenThrow(new ScriptNotFoundException()); final MessageManager messageManager = prepareMessageManagerOn(new MailboxPath("#private", RECEIVER_DOMAIN_COM, "INBOX")); @@ -129,6 +130,7 @@ public class SieveIntegrationTest { @Test public void mailShouldBeWellDeliveredByDefaultToUserWhenvirtualHostingIsTurnedOff() throws Exception { when(usersRepository.supportVirtualHosting()).thenReturn(false); + when(usersRepository.getUser(new MailAddress("receiver@localhost"))).thenReturn("receiver"); when(resourceLocator.get("receiver")).thenThrow(new ScriptNotFoundException()); final MessageManager messageManager = prepareMessageManagerOn(INBOX); @@ -964,6 +966,7 @@ public class SieveIntegrationTest { private void prepareTestUsingScriptAndDates(String script, DateTime scriptCreationDate, DateTime scriptExecutionDate) throws Exception { when(usersRepository.supportVirtualHosting()).thenReturn(false); + when(usersRepository.getUser(new MailAddress("receiver@localhost"))).thenReturn("receiver"); when(resourceLocator.get("//receiver@localhost/sieve")).thenReturn(new ResourceLocator.UserSieveInformation(scriptCreationDate, scriptExecutionDate, ClassLoader.getSystemResourceAsStream(script))); http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStorerTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStorerTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStorerTest.java index 1f25190..42e831a 100644 --- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStorerTest.java +++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStorerTest.java @@ -79,24 +79,22 @@ public class SimpleMailStorerTest { @Test public void storeMailShouldUseFullMailAddressWhenSupportsVirtualHosting() throws Exception { - when(usersRepository.supportVirtualHosting()).thenReturn(true); - MailAddress sender = MailAddressFixture.ANY_AT_JAMES; MailAddress recipient = MailAddressFixture.OTHER_AT_JAMES; + when(usersRepository.getUser(recipient)).thenReturn(recipient.print()); FakeMail mail = FakeMail.builder() .mimeMessage(mimeMessage) .build(); testee.storeMail(sender, recipient, mail); - verify(mailboxAppender).append(any(MimeMessage.class), eq(recipient.toString()), eq(FOLDER)); + verify(mailboxAppender).append(any(MimeMessage.class), eq(recipient.print()), eq(FOLDER)); } @Test public void storeMailShouldUseLocalPartWhenSupportsVirtualHosting() throws Exception { - when(usersRepository.supportVirtualHosting()).thenReturn(false); - MailAddress sender = MailAddressFixture.ANY_AT_JAMES; MailAddress recipient = MailAddressFixture.OTHER_AT_JAMES; + when(usersRepository.getUser(recipient)).thenReturn(recipient.getLocalPart()); FakeMail mail = FakeMail.builder() .mimeMessage(mimeMessage) .build(); @@ -107,10 +105,9 @@ public class SimpleMailStorerTest { @Test public void storeMailShouldUseFullMailAddressWhenErrorReadingUsersRepository() throws Exception { - when(usersRepository.supportVirtualHosting()).thenThrow(new UsersRepositoryException("Any message")); - MailAddress sender = MailAddressFixture.ANY_AT_JAMES; MailAddress recipient = MailAddressFixture.OTHER_AT_JAMES; + when(usersRepository.getUser(recipient)).thenThrow(new UsersRepositoryException("Any message")); FakeMail mail = FakeMail.builder() .mimeMessage(mimeMessage) .build(); http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java index e2f3d27..7d67292 100644 --- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java +++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java @@ -187,6 +187,7 @@ public class ToRecipientFolderTest { @Test public void folderParameterShouldIndicateDestinationFolder() throws Exception { when(parameter.getUsersRepository().supportVirtualHosting()).thenReturn(true); + when(parameter.getUsersRepository().getUser(new MailAddress(USER))).thenReturn(USER); when(parameter.getMailboxManager().getMailbox(eq(JUNK_VIRTUAL_HOSTING), any(MailboxSession.class))).thenReturn(messageManager); when(parameter.getUser().getUserName()).thenReturn(USER); @@ -200,6 +201,7 @@ public class ToRecipientFolderTest { @Test public void folderParameterShouldBeInboxByDefault() throws Exception { when(parameter.getUsersRepository().supportVirtualHosting()).thenReturn(true); + when(parameter.getUsersRepository().getUser(new MailAddress(USER))).thenReturn(USER); when(parameter.getMailboxManager().getMailbox(eq(INBOX), any(MailboxSession.class))).thenReturn(messageManager); when(parameter.getUser().getUserName()).thenReturn(USER); @@ -212,6 +214,8 @@ public class ToRecipientFolderTest { @Test public void folderParameterShouldWorkWhenVirtualHostingIsTurnedOff() throws Exception { when(parameter.getUsersRepository().supportVirtualHosting()).thenReturn(false); + when(parameter.getUsersRepository().getUser(new MailAddress(USER_LOCAL_PART + "@localhost"))).thenReturn(USER_LOCAL_PART); + when(parameter.getUsersRepository().getUser(new MailAddress(USER))).thenReturn(USER_LOCAL_PART); when(parameter.getMailboxManager().getMailbox(eq(JUNK), any(MailboxSession.class))).thenReturn(messageManager); when(parameter.getUser().getUserName()).thenReturn(USER_LOCAL_PART); http://git-wip-us.apache.org/repos/asf/james-project/blob/b4a31c76/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/MessageProcessor.java ---------------------------------------------------------------------- diff --git a/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/MessageProcessor.java b/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/MessageProcessor.java index 2d2134d..c272284 100644 --- a/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/MessageProcessor.java +++ b/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/MessageProcessor.java @@ -832,17 +832,11 @@ public class MessageProcessor extends ProcessorAbstract { * @throws UsersRepositoryException */ protected boolean isLocalRecipient(MailAddress recipient) throws UsersRepositoryException { - if (isLocalServer(recipient)) { - // check if we use virtualhosting or not and use the right part of - // the recipient in respect of this - // See JAMES-1135 - if (getConfiguration().getLocalUsers().supportVirtualHosting()) { - return getLocalUsers().contains(recipient.toString()); - } else { - return getLocalUsers().contains(recipient.getLocalPart()); - } - } - return false; + // check if we use virtualhosting or not and use the right part of + // the recipient in respect of this + // See JAMES-1135 + return isLocalServer(recipient) + && getLocalUsers().contains(getLocalUsers().getUser(recipient)); } /** --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
