You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2023/01/19 03:21:56 UTC
[james-project] 03/03: JAMES-3867 Fix Capability/Enable injection
This is an automated email from the ASF dual-hosted git repository.
btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 2dc84e79b393dcdfc6e8c610df44c00d815c0b7d
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Jan 18 23:12:08 2023 +0700
JAMES-3867 Fix Capability/Enable injection
---
.../org/apache/james/examples/imap/PingProcessor.java | 12 +++++++++++-
.../james/examples/imap/ImapCustomPackagesTest.java | 8 ++++++++
.../james/modules/protocols/IMAPServerModule.java | 19 +++++++++++--------
3 files changed, 30 insertions(+), 9 deletions(-)
diff --git a/examples/custom-imap/src/main/java/org/apache/james/examples/imap/PingProcessor.java b/examples/custom-imap/src/main/java/org/apache/james/examples/imap/PingProcessor.java
index fe26a5c6a3..c7ec4687ea 100644
--- a/examples/custom-imap/src/main/java/org/apache/james/examples/imap/PingProcessor.java
+++ b/examples/custom-imap/src/main/java/org/apache/james/examples/imap/PingProcessor.java
@@ -19,20 +19,25 @@
package org.apache.james.examples.imap;
+import java.util.List;
import java.util.Properties;
import javax.inject.Inject;
import org.apache.james.imap.api.ImapConfiguration;
import org.apache.james.imap.api.display.HumanReadableText;
+import org.apache.james.imap.api.message.Capability;
import org.apache.james.imap.api.message.response.StatusResponseFactory;
import org.apache.james.imap.api.process.ImapSession;
+import org.apache.james.imap.processor.CapabilityImplementingProcessor;
import org.apache.james.imap.processor.base.AbstractProcessor;
import org.apache.james.util.MDCBuilder;
+import com.google.common.collect.ImmutableList;
+
import reactor.core.publisher.Mono;
-public class PingProcessor extends AbstractProcessor<PingImapPackages.PingRequest> {
+public class PingProcessor extends AbstractProcessor<PingImapPackages.PingRequest> implements CapabilityImplementingProcessor {
private final StatusResponseFactory factory;
private String pongResponse;
@@ -42,6 +47,11 @@ public class PingProcessor extends AbstractProcessor<PingImapPackages.PingReques
this.factory = factory;
}
+ @Override
+ public List<Capability> getImplementedCapabilities(ImapSession session) {
+ return ImmutableList.of(Capability.of("PING"));
+ }
+
@Override
public void configure(ImapConfiguration imapConfiguration) {
Properties customProperties = imapConfiguration.getCustomProperties();
diff --git a/examples/custom-imap/src/test/java/org/apache/james/examples/imap/ImapCustomPackagesTest.java b/examples/custom-imap/src/test/java/org/apache/james/examples/imap/ImapCustomPackagesTest.java
index 922227ee91..9450570f34 100644
--- a/examples/custom-imap/src/test/java/org/apache/james/examples/imap/ImapCustomPackagesTest.java
+++ b/examples/custom-imap/src/test/java/org/apache/james/examples/imap/ImapCustomPackagesTest.java
@@ -66,6 +66,14 @@ class ImapCustomPackagesTest {
.contains("PONG");
}
+ @Test
+ void imapServerShouldSupportModularCapability(GuiceJamesServer server) throws IOException {
+ assertThat(new TestIMAPClient().connect("127.0.0.1", server.getProbe(ImapGuiceProbe.class).getImapPort())
+ .login(BOB, BOB_PASSWORD)
+ .sendCommand("CAPABILITY"))
+ .contains("PING");
+ }
+
@Test
void imapServerShouldSupportCustomConfigurationValues(GuiceJamesServer server) throws IOException {
assertThat(new TestIMAPClient().connect("127.0.0.1", server.getProbe(ImapGuiceProbe.class).getImapPort())
diff --git a/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java b/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java
index 536aee23ac..bafd667fc8 100644
--- a/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java
+++ b/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java
@@ -93,8 +93,13 @@ public class IMAPServerModule extends AbstractModule {
}
@Provides
- ImapProcessor provideImapProcessor(ImapPackage imapPackage, GuiceGenericLoader loader, StatusResponseFactory statusResponseFactory) {
- ImmutableMap<Class, ImapProcessor> processorMap = imapPackage.processors()
+ ImapProcessor provideImapProcessor(ImmutableMap<Class, ImapProcessor> processorMap, StatusResponseFactory statusResponseFactory) {
+ return new DefaultProcessor(processorMap, new UnknownRequestProcessor(statusResponseFactory));
+ }
+
+ @Provides
+ ImmutableMap<Class, ImapProcessor> provideClassImapProcessors(ImapPackage imapPackage, GuiceGenericLoader loader) {
+ return imapPackage.processors()
.stream()
.map(Throwing.function(loader::instantiate))
.map(AbstractProcessor.class::cast)
@@ -102,8 +107,6 @@ public class IMAPServerModule extends AbstractModule {
.collect(ImmutableMap.toImmutableMap(
Pair::getLeft,
Pair::getRight));
-
- return new DefaultProcessor(processorMap, new UnknownRequestProcessor(statusResponseFactory));
}
@Provides
@@ -158,22 +161,22 @@ public class IMAPServerModule extends AbstractModule {
}
@ProvidesIntoSet
- InitializationOperation configureEnable(EnableProcessor enableProcessor, ImapPackage imapPackage) {
+ InitializationOperation configureEnable(EnableProcessor enableProcessor, ImmutableMap<Class, ImapProcessor> processorMap) {
return InitilizationOperationBuilder
.forClass(IMAPServerFactory.class)
.init(() ->
- imapPackage.processors().stream()
+ processorMap.values().stream()
.filter(PermitEnableCapabilityProcessor.class::isInstance)
.map(PermitEnableCapabilityProcessor.class::cast)
.forEach(enableProcessor::addProcessor));
}
@ProvidesIntoSet
- InitializationOperation configureCapability(CapabilityProcessor capabilityProcessor, ImapPackage imapPackage) {
+ InitializationOperation configureCapability(CapabilityProcessor capabilityProcessor, ImmutableMap<Class, ImapProcessor> processorMap) {
return InitilizationOperationBuilder
.forClass(IMAPServerFactory.class)
.init(() ->
- imapPackage.processors().stream()
+ processorMap.values().stream()
.filter(CapabilityImplementingProcessor.class::isInstance)
.map(CapabilityImplementingProcessor.class::cast)
.forEach(capabilityProcessor::addProcessor));
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org