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 2018/12/05 09:44:43 UTC
[12/14] james-project git commit: MAILBOX-355 SpamAssassinListener
should use SystemMailboxProvider
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 <bt...@linagora.com>
Authored: Tue Dec 4 14:27:35 2018 +0700
Committer: Benoit Tellier <bt...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org