MAILBOX-355 SpamAssassinListener should use SystemMailboxProvider This allow a centralized knowledge of what is a system mailbox - the fact that role is name encoded should not leak out of SystemMailboxProvider
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/a788cf3b Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/a788cf3b Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/a788cf3b Branch: refs/heads/master Commit: a788cf3b3b0c7bde7113494094d3997afae3e75f Parents: 3412083 Author: Benoit Tellier <btell...@linagora.com> Authored: Tue Dec 4 14:27:35 2018 +0700 Committer: Benoit Tellier <btell...@linagora.com> Committed: Wed Dec 5 16:34:25 2018 +0700 ---------------------------------------------------------------------- mailbox/plugin/spamassassin/pom.xml | 12 +++++++ .../spamassassin/SpamAssassinListener.java | 36 ++++++++++---------- .../spamassassin/SpamAssassinListenerTest.java | 20 +++++++---- server/container/guice/mailbox/pom.xml | 4 --- .../org/apache/james/modules/MailboxModule.java | 6 ++++ .../java/org/apache/james/jmap/JMAPModule.java | 4 --- 6 files changed, 49 insertions(+), 33 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/a788cf3b/mailbox/plugin/spamassassin/pom.xml ---------------------------------------------------------------------- diff --git a/mailbox/plugin/spamassassin/pom.xml b/mailbox/plugin/spamassassin/pom.xml index c644ada..6ea92f4 100644 --- a/mailbox/plugin/spamassassin/pom.xml +++ b/mailbox/plugin/spamassassin/pom.xml @@ -39,6 +39,12 @@ <dependency> <groupId>${james.groupId}</groupId> <artifactId>apache-james-mailbox-api</artifactId> + <type>test-jar</type> + <scope>test</scope> + </dependency> + <dependency> + <groupId>${james.groupId}</groupId> + <artifactId>apache-james-mailbox-api</artifactId> <scope>test</scope> <type>test-jar</type> </dependency> @@ -53,6 +59,12 @@ </dependency> <dependency> <groupId>${james.groupId}</groupId> + <artifactId>apache-james-mailbox-memory</artifactId> + <type>test-jar</type> + <scope>test</scope> + </dependency> + <dependency> + <groupId>${james.groupId}</groupId> <artifactId>apache-james-spamassassin</artifactId> </dependency> <dependency> http://git-wip-us.apache.org/repos/asf/james-project/blob/a788cf3b/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java ---------------------------------------------------------------------- diff --git a/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java b/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java index 3f3f73a..04fd6c8 100644 --- a/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java +++ b/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java @@ -25,10 +25,9 @@ import javax.inject.Inject; import org.apache.james.mailbox.Event; import org.apache.james.mailbox.Role; +import org.apache.james.mailbox.SystemMailboxesProvider; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.MailboxId; -import org.apache.james.mailbox.model.MailboxPath; -import org.apache.james.mailbox.store.MailboxSessionMapperFactory; import org.apache.james.mailbox.store.event.EventFactory; import org.apache.james.mailbox.store.event.MessageMoveEvent; import org.apache.james.mailbox.store.event.SpamEventListener; @@ -47,13 +46,13 @@ public class SpamAssassinListener implements SpamEventListener { private static final Logger LOGGER = LoggerFactory.getLogger(SpamAssassinListener.class); private final SpamAssassin spamAssassin; - private final MailboxSessionMapperFactory mapperFactory; + private final SystemMailboxesProvider systemMailboxesProvider; private final ExecutionMode executionMode; @Inject - public SpamAssassinListener(SpamAssassin spamAssassin, MailboxSessionMapperFactory mapperFactory, ExecutionMode executionMode) { + SpamAssassinListener(SpamAssassin spamAssassin, SystemMailboxesProvider systemMailboxesProvider, ExecutionMode executionMode) { this.spamAssassin = spamAssassin; - this.mapperFactory = mapperFactory; + this.systemMailboxesProvider = systemMailboxesProvider; this.executionMode = executionMode; } @@ -83,7 +82,7 @@ public class SpamAssassinListener implements SpamEventListener { } if (event instanceof EventFactory.AddedImpl) { EventFactory.AddedImpl addedEvent = (EventFactory.AddedImpl) event; - if (addedEvent.getMailboxPath().isInbox()) { + if (isAppendedToInbox(addedEvent)) { List<InputStream> contents = addedEvent.getAvailableMessages() .values() .stream() @@ -94,6 +93,16 @@ public class SpamAssassinListener implements SpamEventListener { } } + private boolean isAppendedToInbox(EventFactory.AddedImpl addedEvent) { + try { + return systemMailboxesProvider.findMailbox(Role.INBOX, addedEvent.getSession()) + .getId().equals(addedEvent.getMailboxId()); + } catch (MailboxException e) { + LOGGER.warn("Could not resolve Inbox mailbox", e); + return false; + } + } + public ImmutableList<InputStream> retrieveMessages(MessageMoveEvent messageMoveEvent) { return messageMoveEvent.getMessages() .values() @@ -105,7 +114,7 @@ public class SpamAssassinListener implements SpamEventListener { @VisibleForTesting boolean isMessageMovedToSpamMailbox(MessageMoveEvent event) { try { - MailboxId spamMailboxId = getMailboxId(event, Role.SPAM); + MailboxId spamMailboxId = systemMailboxesProvider.findMailbox(Role.SPAM, event.getSession()).getId(); return event.getMessageMoves().addedMailboxIds().contains(spamMailboxId); } catch (MailboxException e) { @@ -117,8 +126,8 @@ public class SpamAssassinListener implements SpamEventListener { @VisibleForTesting boolean isMessageMovedOutOfSpamMailbox(MessageMoveEvent event) { try { - MailboxId spamMailboxId = getMailboxId(event, Role.SPAM); - MailboxId trashMailboxId = getMailboxId(event, Role.TRASH); + MailboxId spamMailboxId = systemMailboxesProvider.findMailbox(Role.SPAM, event.getSession()).getId(); + MailboxId trashMailboxId = systemMailboxesProvider.findMailbox(Role.TRASH, event.getSession()).getId(); return event.getMessageMoves().removedMailboxIds().contains(spamMailboxId) && !event.getMessageMoves().addedMailboxIds().contains(trashMailboxId); @@ -127,13 +136,4 @@ public class SpamAssassinListener implements SpamEventListener { return false; } } - - private MailboxId getMailboxId(MessageMoveEvent event, Role role) throws MailboxException { - String userName = event.getSession().getUser().getUserName(); - MailboxPath mailboxPath = MailboxPath.forUser(userName, role.getDefaultMailbox()); - - return mapperFactory.getMailboxMapper(event.getSession()) - .findMailboxByPath(mailboxPath) - .getMailboxId(); - } } http://git-wip-us.apache.org/repos/asf/james-project/blob/a788cf3b/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java ---------------------------------------------------------------------- diff --git a/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java b/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java index 3426ecf..37d0162 100644 --- a/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java +++ b/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java @@ -33,14 +33,18 @@ import javax.mail.util.SharedByteArrayInputStream; import org.apache.james.mailbox.DefaultMailboxes; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.MessageUid; +import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver; import org.apache.james.mailbox.exception.MailboxException; -import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory; +import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources; import org.apache.james.mailbox.mock.MockMailboxSession; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.model.MessageMoves; import org.apache.james.mailbox.model.TestMessageId; +import org.apache.james.mailbox.store.MailboxSessionMapperFactory; import org.apache.james.mailbox.store.SimpleMessageMetaData; +import org.apache.james.mailbox.store.StoreMailboxManager; +import org.apache.james.mailbox.store.SystemMailboxesProviderImpl; import org.apache.james.mailbox.store.event.EventFactory; import org.apache.james.mailbox.store.event.EventFactory.AddedImpl; import org.apache.james.mailbox.store.event.MessageMoveEvent; @@ -57,10 +61,9 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSortedMap; public class SpamAssassinListenerTest { - public static final String USER = "user"; - public static final MockMailboxSession MAILBOX_SESSION = new MockMailboxSession(USER); - public static final int UID_VALIDITY = 43; + private static final MockMailboxSession MAILBOX_SESSION = new MockMailboxSession(USER); + private static final int UID_VALIDITY = 43; private SpamAssassin spamAssassin; private SpamAssassinListener listener; private SimpleMailbox inbox; @@ -74,9 +77,12 @@ public class SpamAssassinListenerTest { private MailboxMapper mailboxMapper; @Before - public void setup() throws MailboxException { + public void setup() throws Exception { + StoreMailboxManager mailboxManager = new InMemoryIntegrationResources().createMailboxManager(new SimpleGroupMembershipResolver()); + SystemMailboxesProviderImpl systemMailboxesProvider = new SystemMailboxesProviderImpl(mailboxManager); + spamAssassin = mock(SpamAssassin.class); - InMemoryMailboxSessionMapperFactory mapperFactory = new InMemoryMailboxSessionMapperFactory(); + MailboxSessionMapperFactory mapperFactory = mailboxManager.getMapperFactory(); mailboxMapper = mapperFactory.getMailboxMapper(MAILBOX_SESSION); inbox = new SimpleMailbox(MailboxPath.forUser(USER, DefaultMailboxes.INBOX), UID_VALIDITY); inboxId = mailboxMapper.save(inbox); @@ -87,7 +93,7 @@ public class SpamAssassinListenerTest { spamCapitalMailboxId = mailboxMapper.save(new SimpleMailbox(MailboxPath.forUser(USER, "SPAM"), UID_VALIDITY)); trashMailboxId = mailboxMapper.save(new SimpleMailbox(MailboxPath.forUser(USER, "Trash"), UID_VALIDITY)); - listener = new SpamAssassinListener(spamAssassin, mapperFactory, MailboxListener.ExecutionMode.SYNCHRONOUS); + listener = new SpamAssassinListener(spamAssassin, systemMailboxesProvider, MailboxListener.ExecutionMode.SYNCHRONOUS); } @After http://git-wip-us.apache.org/repos/asf/james-project/blob/a788cf3b/server/container/guice/mailbox/pom.xml ---------------------------------------------------------------------- diff --git a/server/container/guice/mailbox/pom.xml b/server/container/guice/mailbox/pom.xml index bade4e0..51053c1 100644 --- a/server/container/guice/mailbox/pom.xml +++ b/server/container/guice/mailbox/pom.xml @@ -38,10 +38,6 @@ </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>apache-james-mailbox-store</artifactId> - </dependency> - <dependency> - <groupId>${james.groupId}</groupId> <artifactId>james-server-guice-configuration</artifactId> </dependency> <dependency> http://git-wip-us.apache.org/repos/asf/james-project/blob/a788cf3b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxModule.java ---------------------------------------------------------------------- diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxModule.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxModule.java index 674fa56..f95e235 100644 --- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxModule.java +++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxModule.java @@ -18,10 +18,12 @@ ****************************************************************/ package org.apache.james.modules; +import org.apache.james.mailbox.SystemMailboxesProvider; import org.apache.james.mailbox.acl.GroupMembershipResolver; import org.apache.james.mailbox.acl.MailboxACLResolver; import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver; import org.apache.james.mailbox.acl.UnionMailboxACLResolver; +import org.apache.james.mailbox.store.SystemMailboxesProviderImpl; import org.apache.james.utils.GuiceProbe; import com.google.inject.AbstractModule; @@ -42,6 +44,10 @@ public class MailboxModule extends AbstractModule { bind(MailboxACLResolver.class).to(UnionMailboxACLResolver.class); bind(SimpleGroupMembershipResolver.class).in(Scopes.SINGLETON); bind(GroupMembershipResolver.class).to(SimpleGroupMembershipResolver.class); + + + bind(SystemMailboxesProviderImpl.class).in(Scopes.SINGLETON); + bind(SystemMailboxesProvider.class).to(SystemMailboxesProviderImpl.class); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/a788cf3b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java ---------------------------------------------------------------------- diff --git a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java index c15bf7b..c35225b 100644 --- a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java +++ b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java @@ -41,8 +41,6 @@ import org.apache.james.lifecycle.api.Configurable; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxManager.SearchCapabilities; -import org.apache.james.mailbox.SystemMailboxesProvider; -import org.apache.james.mailbox.store.SystemMailboxesProviderImpl; import org.apache.james.modules.server.CamelMailetContainerModule; import org.apache.james.queue.api.MailQueueItemDecoratorFactory; import org.apache.james.server.core.configuration.FileConfigurationProvider; @@ -94,7 +92,6 @@ public class JMAPModule extends AbstractModule { bind(RequestHandler.class).in(Scopes.SINGLETON); bind(UploadHandler.class).in(Scopes.SINGLETON); bind(JsoupHtmlTextExtractor.class).in(Scopes.SINGLETON); - bind(SystemMailboxesProviderImpl.class).in(Scopes.SINGLETON); bind(HtmlTextExtractor.class).to(JsoupHtmlTextExtractor.class); Multibinder.newSetBinder(binder(), ConfigurationPerformer.class).addBinding().to(RequiredCapabilitiesPrecondition.class); @@ -103,7 +100,6 @@ public class JMAPModule extends AbstractModule { transportProcessorChecks.addBinding().toInstance(VACATION_MAILET_CHECK); transportProcessorChecks.addBinding().toInstance(FILTERING_MAILET_CHECK); - bind(SystemMailboxesProvider.class).to(SystemMailboxesProviderImpl.class); bind(MailQueueItemDecoratorFactory.class).to(PostDequeueDecoratorFactory.class).in(Scopes.SINGLETON); Multibinder.newSetBinder(binder(), MailboxListener.class).addBinding().to(PropagateLookupRightListener.class); --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org