This is an automated email from the ASF dual-hosted git repository. quantranhong1999 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit e3bbd0fa3dbcfe952ef63ef8e697bb87a5f95b23 Author: Quan Tran <[email protected]> AuthorDate: Tue Jul 7 09:22:30 2026 +0700 JAMES-4210 Move IMAP auth configuration out of Netty sessions Remove authentication and OIDC configuration from IMAPServer, ImapSession, and NettyImapSession; SASL configuration now belongs to the mechanism factory layer. Adapt default and Spring IMAP processor creation so JPA/Spring and tests still get proper default mechanisms. --- .../apache/james/imap/api/process/ImapSession.java | 24 -------- .../apache/james/imap/encode/FakeImapSession.java | 21 ------- .../main/DefaultImapProcessorFactory.java | 70 +++++++++++++++++++++- .../apache/james/imapserver/netty/IMAPServer.java | 64 -------------------- .../netty/ImapChannelUpstreamHandler.java | 18 +----- .../james/imapserver/netty/NettyImapSession.java | 32 +--------- .../META-INF/spring/imapserver-context.xml | 20 ++++--- .../imapserver/netty/AbstractIMAPServerTest.java | 3 +- 8 files changed, 87 insertions(+), 165 deletions(-) diff --git a/protocols/imap/src/main/java/org/apache/james/imap/api/process/ImapSession.java b/protocols/imap/src/main/java/org/apache/james/imap/api/process/ImapSession.java index ebdce2fdba..791e8ce69a 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/api/process/ImapSession.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/api/process/ImapSession.java @@ -31,7 +31,6 @@ import javax.net.ssl.SSLSession; import org.apache.commons.text.RandomStringGenerator; import org.apache.james.core.Username; import org.apache.james.imap.api.ImapSessionState; -import org.apache.james.jwt.OidcSASLConfiguration; import org.apache.james.mailbox.MailboxSession; import org.apache.james.protocols.api.CommandDetectionSession; import org.apache.james.util.MDCBuilder; @@ -247,19 +246,6 @@ public interface ImapSession extends CommandDetectionSession { */ void popLineHandler(); - /** - * Return true if SSL is required when Authenticating - */ - boolean isSSLRequired(); - - /** - * Return true if the login / authentication via plain username / password is - * enabled - */ - boolean isPlainAuthEnabled(); - - boolean supportsOAuth(); - default void withMDC(Runnable runnable) { try (Closeable c = mdc().build()) { runnable.run(); @@ -280,8 +266,6 @@ public interface ImapSession extends CommandDetectionSession { */ InetSocketAddress getRemoteAddress(); - Optional<OidcSASLConfiguration> oidcSaslConfiguration(); - default void setMailboxSession(MailboxSession mailboxSession) { setAttribute(MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY, mailboxSession); } @@ -296,14 +280,6 @@ public interface ImapSession extends CommandDetectionSession { .orElse(null); } - default boolean isPlainAuthDisallowed() { - return !isPlainAuthEnabled() || isAuthenticatingNonEncryptedWhenRequiredSSL(); - } - - default boolean isAuthenticatingNonEncryptedWhenRequiredSSL() { - return isSSLRequired() && !isTLSActive(); - } - void schedule(Runnable runnable, Duration waitDelay); } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/FakeImapSession.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/FakeImapSession.java index d73af074e1..cd7ad58658 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/FakeImapSession.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/FakeImapSession.java @@ -34,7 +34,6 @@ import org.apache.james.imap.api.ImapSessionState; import org.apache.james.imap.api.process.ImapLineHandler; import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.api.process.SelectedMailbox; -import org.apache.james.jwt.OidcSASLConfiguration; import org.apache.james.util.concurrent.NamedThreadFactory; import reactor.core.publisher.Mono; @@ -166,31 +165,11 @@ public class FakeImapSession implements ImapSession { } - @Override - public boolean isSSLRequired() { - return false; - } - - @Override - public boolean isPlainAuthEnabled() { - return true; - } - - @Override - public boolean supportsOAuth() { - return false; - } - @Override public InetSocketAddress getRemoteAddress() { return null; } - @Override - public Optional<OidcSASLConfiguration> oidcSaslConfiguration() { - return Optional.empty(); - } - @Override public boolean isTLSActive() { return false; diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/main/DefaultImapProcessorFactory.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/main/DefaultImapProcessorFactory.java index 31415b99cf..6edd5724db 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/main/DefaultImapProcessorFactory.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/main/DefaultImapProcessorFactory.java @@ -19,6 +19,9 @@ package org.apache.james.imap.processor.main; +import org.apache.commons.configuration2.HierarchicalConfiguration; +import org.apache.commons.configuration2.ex.ConfigurationException; +import org.apache.commons.configuration2.tree.ImmutableNode; import org.apache.james.events.EventBus; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.DefaultMailboxTyper; @@ -34,6 +37,17 @@ import org.apache.james.mailbox.SubscriptionManager; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; import org.apache.james.metrics.api.MetricFactory; +import org.apache.james.protocols.api.sasl.SaslMechanism; +import org.apache.james.protocols.api.sasl.SaslMechanismFactory; +import org.apache.james.protocols.sasl.BuiltInSaslMechanismFactories; +import org.apache.james.protocols.sasl.JamesSaslAuthenticator; +import org.apache.james.protocols.sasl.OauthBearerSaslMechanismFactory; +import org.apache.james.protocols.sasl.PlainSaslMechanismFactory; +import org.apache.james.protocols.sasl.XOauth2SaslMechanismFactory; +import org.apache.james.protocols.sasl.plain.PlainSaslMechanism; + +import com.github.fge.lambdas.Throwing; +import com.google.common.collect.ImmutableList; public class DefaultImapProcessorFactory { @@ -59,6 +73,7 @@ public class DefaultImapProcessorFactory { } public static ImapProcessor createXListSupportingProcessor(MailboxManager mailboxManager, + JamesSaslAuthenticator saslAuthenticator, EventBus eventBus, SubscriptionManager subscriptionManager, MailboxTyper mailboxTyper, QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MetricFactory metricFactory) { @@ -69,7 +84,60 @@ public class DefaultImapProcessorFactory { return DefaultProcessor.createDefaultProcessor(unknownRequestImapProcessor, mailboxManager, eventBus, subscriptionManager, statusResponseFactory, mailboxTyper, quotaManager, quotaRootResolver, MailboxCounterCorrector.DEFAULT, metricFactory, - FetchProcessor.LocalCacheConfiguration.DEFAULT); + FetchProcessor.LocalCacheConfiguration.DEFAULT, ImmutableList.of(new PlainSaslMechanism()), saslAuthenticator); + } + + public static ImapProcessor createXListSupportingProcessor(MailboxManager mailboxManager, + EventBus eventBus, SubscriptionManager subscriptionManager, + MailboxTyper mailboxTyper, QuotaManager quotaManager, + QuotaRootResolver quotaRootResolver, MetricFactory metricFactory, + FetchProcessor.LocalCacheConfiguration localCacheConfiguration, + HierarchicalConfiguration<ImmutableNode> serverConfiguration) throws ConfigurationException { + + StatusResponseFactory statusResponseFactory = new UnpooledStatusResponseFactory(); + UnknownRequestProcessor unknownRequestImapProcessor = new UnknownRequestProcessor(statusResponseFactory); + + return DefaultProcessor.createDefaultProcessor(unknownRequestImapProcessor, mailboxManager, + eventBus, subscriptionManager, statusResponseFactory, mailboxTyper, quotaManager, quotaRootResolver, + MailboxCounterCorrector.DEFAULT, metricFactory, + localCacheConfiguration, defaultSaslMechanisms(serverConfiguration)); + } + + public static ImapProcessor createXListSupportingProcessor(MailboxManager mailboxManager, + EventBus eventBus, SubscriptionManager subscriptionManager, + MailboxTyper mailboxTyper, QuotaManager quotaManager, + QuotaRootResolver quotaRootResolver, MetricFactory metricFactory, + FetchProcessor.LocalCacheConfiguration localCacheConfiguration, + HierarchicalConfiguration<ImmutableNode> serverConfiguration, + JamesSaslAuthenticator saslAuthenticator) throws ConfigurationException { + + StatusResponseFactory statusResponseFactory = new UnpooledStatusResponseFactory(); + UnknownRequestProcessor unknownRequestImapProcessor = new UnknownRequestProcessor(statusResponseFactory); + + return DefaultProcessor.createDefaultProcessor(unknownRequestImapProcessor, mailboxManager, + eventBus, subscriptionManager, statusResponseFactory, mailboxTyper, quotaManager, quotaRootResolver, + MailboxCounterCorrector.DEFAULT, metricFactory, + localCacheConfiguration, defaultSaslMechanisms(serverConfiguration), saslAuthenticator); + } + + private static ImmutableList<SaslMechanism> defaultSaslMechanisms(HierarchicalConfiguration<ImmutableNode> serverConfiguration) throws ConfigurationException { + ImmutableList<SaslMechanismFactory> factories = BuiltInSaslMechanismFactories.enabledForServer( + ImmutableList.of( + new PlainSaslMechanismFactory(), + new OauthBearerSaslMechanismFactory(), + new XOauth2SaslMechanismFactory()), + serverConfiguration); + + try { + return factories.stream() + .map(Throwing.function(factory -> factory.create(serverConfiguration))) + .collect(ImmutableList.toImmutableList()); + } catch (RuntimeException e) { + if (e.getCause() instanceof ConfigurationException configurationException) { + throw configurationException; + } + throw e; + } } } diff --git a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServer.java b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServer.java index d0b43c0ff0..9d4cdc492f 100644 --- a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServer.java +++ b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServer.java @@ -21,9 +21,7 @@ package org.apache.james.imapserver.netty; import static org.apache.james.imapserver.netty.HAProxyMessageHandler.PROXY_INFO; import java.net.InetSocketAddress; -import java.net.MalformedURLException; import java.net.SocketAddress; -import java.net.URISyntaxException; import java.time.Clock; import java.time.Duration; import java.time.Instant; @@ -50,7 +48,6 @@ import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.api.process.SelectedMailbox; import org.apache.james.imap.decode.ImapDecoder; import org.apache.james.imap.encode.ImapEncoder; -import org.apache.james.jwt.OidcSASLConfiguration; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.metrics.api.GaugeRegistry; @@ -94,64 +91,6 @@ public class IMAPServer extends AbstractConfigurableAsyncServer implements ImapC private static final Logger LOG = LoggerFactory.getLogger(IMAPServer.class); public static final AttributeKey<Instant> CONNECTION_DATE = AttributeKey.newInstance("connectionDate"); - public static class AuthenticationConfiguration { - private static final boolean PLAIN_AUTH_DISALLOWED_DEFAULT = true; - private static final boolean PLAIN_AUTH_ENABLED_DEFAULT = true; - private static final String OIDC_PATH = "auth.oidc"; - - public static AuthenticationConfiguration parse(HierarchicalConfiguration<ImmutableNode> configuration) throws ConfigurationException { - boolean isRequireSSL = configuration.getBoolean("auth.requireSSL", fallback(configuration)); - boolean isPlainAuthEnabled = configuration.getBoolean("auth.plainAuthEnabled", PLAIN_AUTH_ENABLED_DEFAULT); - - if (configuration.immutableConfigurationsAt(OIDC_PATH).isEmpty()) { - return new AuthenticationConfiguration( - isRequireSSL, - isPlainAuthEnabled); - } else { - try { - return new AuthenticationConfiguration( - isRequireSSL, - isPlainAuthEnabled, - OidcSASLConfiguration.parse(configuration.configurationAt(OIDC_PATH))); - } catch (MalformedURLException | NullPointerException | URISyntaxException exception) { - throw new ConfigurationException("Failed to retrieve oauth component", exception); - } - } - } - - private static boolean fallback(HierarchicalConfiguration<ImmutableNode> configuration) { - return configuration.getBoolean("plainAuthDisallowed", PLAIN_AUTH_DISALLOWED_DEFAULT); - } - - private final boolean isSSLRequired; - private final boolean plainAuthEnabled; - private final Optional<OidcSASLConfiguration> oidcSASLConfiguration; - - public AuthenticationConfiguration(boolean isSSLRequired, boolean plainAuthEnabled) { - this.isSSLRequired = isSSLRequired; - this.plainAuthEnabled = plainAuthEnabled; - this.oidcSASLConfiguration = Optional.empty(); - } - - public AuthenticationConfiguration(boolean isSSLRequired, boolean plainAuthEnabled, OidcSASLConfiguration oidcSASLConfiguration) { - this.isSSLRequired = isSSLRequired; - this.plainAuthEnabled = plainAuthEnabled; - this.oidcSASLConfiguration = Optional.of(oidcSASLConfiguration); - } - - public boolean isSSLRequired() { - return isSSLRequired; - } - - public boolean isPlainAuthEnabled() { - return plainAuthEnabled; - } - - public Optional<OidcSASLConfiguration> getOidcSASLConfiguration() { - return oidcSASLConfiguration; - } - } - private static final String SOFTWARE_TYPE = "JAMES " + VERSION + " Server "; private static final String DEFAULT_TIME_UNIT = "SECONDS"; private static final String CAPABILITY_SEPARATOR = "|"; @@ -174,7 +113,6 @@ public class IMAPServer extends AbstractConfigurableAsyncServer implements ImapC private int inMemorySizeLimit; private int timeout; private int literalSizeLimit; - private AuthenticationConfiguration authenticationConfiguration; private Optional<TrafficShapingConfiguration> trafficShaping = Optional.empty(); private Optional<ConnectionLimitUpstreamHandler> connectionLimitUpstreamHandler = Optional.empty(); private Optional<ConnectionPerIpLimitUpstreamHandler> connectionPerIpLimitUpstreamHandler = Optional.empty(); @@ -212,7 +150,6 @@ public class IMAPServer extends AbstractConfigurableAsyncServer implements ImapC if (timeout < DEFAULT_TIMEOUT) { throw new ConfigurationException("Minimum timeout of 30 minutes required. See rfc2060 5.4 for details"); } - authenticationConfiguration = AuthenticationConfiguration.parse(configuration); connectionLimitUpstreamHandler = ConnectionLimitUpstreamHandler.forCount(connectionLimit); connectionPerIpLimitUpstreamHandler = ConnectionPerIpLimitUpstreamHandler.forCount(connPerIP); ignoreIDLEUponProcessing = configuration.getBoolean("ignoreIDLEUponProcessing", true); @@ -368,7 +305,6 @@ public class IMAPServer extends AbstractConfigurableAsyncServer implements ImapC .processor(processor) .encoder(encoder) .compress(compress) - .authenticationConfiguration(authenticationConfiguration) .connectionChecks(connectionChecks) .secure(secure) .imapMetrics(imapMetrics) diff --git a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapChannelUpstreamHandler.java b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapChannelUpstreamHandler.java index 0af14212a6..800fecc6a8 100644 --- a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapChannelUpstreamHandler.java +++ b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapChannelUpstreamHandler.java @@ -19,7 +19,6 @@ package org.apache.james.imapserver.netty; import static org.apache.james.imap.api.process.ImapSession.MDC_KEY; -import static org.apache.james.imapserver.netty.IMAPServer.AuthenticationConfiguration; import java.io.Closeable; import java.io.IOException; @@ -88,7 +87,6 @@ public class ImapChannelUpstreamHandler extends ChannelInboundHandlerAdapter imp private boolean compress; private ImapProcessor processor; private ImapEncoder encoder; - private IMAPServer.AuthenticationConfiguration authenticationConfiguration; private ImapMetrics imapMetrics; private boolean ignoreIDLEUponProcessing; private Duration heartbeatInterval; @@ -127,11 +125,6 @@ public class ImapChannelUpstreamHandler extends ChannelInboundHandlerAdapter imp return this; } - public ImapChannelUpstreamHandlerBuilder authenticationConfiguration(IMAPServer.AuthenticationConfiguration authenticationConfiguration) { - this.authenticationConfiguration = authenticationConfiguration; - return this; - } - public ImapChannelUpstreamHandlerBuilder connectionChecks(Set<ConnectionCheck> connectionChecks) { this.connectionChecks = connectionChecks; return this; @@ -163,7 +156,7 @@ public class ImapChannelUpstreamHandler extends ChannelInboundHandlerAdapter imp } public ImapChannelUpstreamHandler build() { - return new ImapChannelUpstreamHandler(hello, processor, encoder, compress, secure, imapMetrics, authenticationConfiguration, ignoreIDLEUponProcessing, (int) heartbeatInterval.toSeconds(), reactiveThrottler, connectionChecks, proxyRequired, imapChannelGroup); + return new ImapChannelUpstreamHandler(hello, processor, encoder, compress, secure, imapMetrics, ignoreIDLEUponProcessing, (int) heartbeatInterval.toSeconds(), reactiveThrottler, connectionChecks, proxyRequired, imapChannelGroup); } } @@ -182,7 +175,6 @@ public class ImapChannelUpstreamHandler extends ChannelInboundHandlerAdapter imp private final ImapProcessor processor; private final ImapEncoder encoder; private final ImapHeartbeatHandler heartbeatHandler; - private final AuthenticationConfiguration authenticationConfiguration; private final Metric imapConnectionsMetric; private final Metric imapCommandsMetric; private final boolean ignoreIDLEUponProcessing; @@ -192,15 +184,13 @@ public class ImapChannelUpstreamHandler extends ChannelInboundHandlerAdapter imp private final ChannelGroup imapChannelGroup; public ImapChannelUpstreamHandler(String hello, ImapProcessor processor, ImapEncoder encoder, boolean compress, - Encryption secure, ImapMetrics imapMetrics, AuthenticationConfiguration authenticationConfiguration, - boolean ignoreIDLEUponProcessing, int heartbeatIntervalSeconds, ReactiveThrottler reactiveThrottler, + Encryption secure, ImapMetrics imapMetrics, boolean ignoreIDLEUponProcessing, int heartbeatIntervalSeconds, ReactiveThrottler reactiveThrottler, Set<ConnectionCheck> connectionChecks, boolean proxyRequired, ChannelGroup imapChannelGroup) { this.hello = hello; this.processor = processor; this.encoder = encoder; this.secure = secure; this.compress = compress; - this.authenticationConfiguration = authenticationConfiguration; this.imapConnectionsMetric = imapMetrics.getConnectionsMetric(); this.imapCommandsMetric = imapMetrics.getCommandsMetric(); this.ignoreIDLEUponProcessing = ignoreIDLEUponProcessing; @@ -215,9 +205,7 @@ public class ImapChannelUpstreamHandler extends ChannelInboundHandlerAdapter imp public void channelActive(ChannelHandlerContext ctx) { imapChannelGroup.add(ctx.channel()); SessionId sessionId = SessionId.generate(); - ImapSession imapsession = new NettyImapSession(ctx.channel(), secure, compress, authenticationConfiguration.isSSLRequired(), - authenticationConfiguration.isPlainAuthEnabled(), sessionId, - authenticationConfiguration.getOidcSASLConfiguration()); + ImapSession imapsession = new NettyImapSession(ctx.channel(), secure, compress, sessionId); ctx.channel().attr(IMAP_SESSION_ATTRIBUTE_KEY).set(imapsession); ctx.channel().attr(REQUEST_COUNTER).set(new AtomicLong()); ctx.channel().attr(LINEARIZER_ATTRIBUTE_KEY).set(new ImapLinerarizer()); diff --git a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/NettyImapSession.java b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/NettyImapSession.java index 9a10733e64..866ea6d579 100644 --- a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/NettyImapSession.java +++ b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/NettyImapSession.java @@ -39,7 +39,6 @@ import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.api.process.SelectedMailbox; import org.apache.james.imap.encode.ImapResponseWriter; import org.apache.james.imap.message.Literal; -import org.apache.james.jwt.OidcSASLConfiguration; import org.apache.james.mailbox.MailboxSession; import org.apache.james.protocols.netty.Encryption; import org.apache.james.protocols.netty.LineHandlerAware; @@ -61,28 +60,19 @@ public class NettyImapSession implements ImapSession, NettyConstants { private final Encryption secure; private final boolean compress; private final Channel channel; - private final boolean requiredSSL; - private final boolean plainAuthEnabled; private final SessionId sessionId; - private final boolean supportsOAuth; - private final Optional<OidcSASLConfiguration> oidcSASLConfiguration; private volatile ImapSessionState state = ImapSessionState.NON_AUTHENTICATED; private final AtomicReference<SelectedMailbox> selectedMailbox = new AtomicReference<>(); private volatile boolean needsCommandInjectionDetection; private volatile MailboxSession mailboxSession = null; - public NettyImapSession(Channel channel, Encryption secure, boolean compress, boolean requiredSSL, boolean plainAuthEnabled, SessionId sessionId, - Optional<OidcSASLConfiguration> oidcSASLConfiguration) { + public NettyImapSession(Channel channel, Encryption secure, boolean compress, SessionId sessionId) { this.channel = channel; this.secure = secure; this.compress = compress; - this.requiredSSL = requiredSSL; - this.plainAuthEnabled = plainAuthEnabled; this.sessionId = sessionId; this.needsCommandInjectionDetection = true; - this.oidcSASLConfiguration = oidcSASLConfiguration; - this.supportsOAuth = oidcSASLConfiguration.isPresent(); } @Override @@ -311,31 +301,11 @@ public class NettyImapSession implements ImapSession, NettyConstants { handler.popLineHandler(); } - @Override - public boolean isSSLRequired() { - return requiredSSL; - } - - @Override - public boolean isPlainAuthEnabled() { - return plainAuthEnabled; - } - - @Override - public boolean supportsOAuth() { - return supportsOAuth; - } - @Override public InetSocketAddress getRemoteAddress() { return (InetSocketAddress) channel.remoteAddress(); } - @Override - public Optional<OidcSASLConfiguration> oidcSaslConfiguration() { - return oidcSASLConfiguration; - } - @Override public boolean isTLSActive() { return channel.pipeline().get(SSL_HANDLER) != null; diff --git a/server/protocols/protocols-imap4/src/main/resources/META-INF/spring/imapserver-context.xml b/server/protocols/protocols-imap4/src/main/resources/META-INF/spring/imapserver-context.xml index 117f0baaa8..2d3e4e5184 100644 --- a/server/protocols/protocols-imap4/src/main/resources/META-INF/spring/imapserver-context.xml +++ b/server/protocols/protocols-imap4/src/main/resources/META-INF/spring/imapserver-context.xml @@ -29,17 +29,21 @@ <constructor-arg index="6" ref="connectionCheckFactory" /> </bean> - <!-- The imapProcessor configuration will be reviewed when IMAP will be integrated into Protocols project --> - <!-- Temporary configuration - see IMAP-357 --> <bean id="imapProcessor" class="org.apache.james.imap.processor.main.DefaultImapProcessorFactory" factory-method="createXListSupportingProcessor"> <constructor-arg index="0" ref="mailboxmanager"/> - <constructor-arg index="1" ref="event-bus"/> - <constructor-arg index="2" ref="subscriptionManager"/> - <constructor-arg index="3" ref="mailboxTyper"/> - <constructor-arg index="4" ref="quotaManager"/> - <constructor-arg index="5" ref="quotaRootResolver"/> - <constructor-arg index="6" ref="timeMetricFactory"/> + <constructor-arg index="1" ref="jamesSaslAuthenticator"/> + <constructor-arg index="2" ref="event-bus"/> + <constructor-arg index="3" ref="subscriptionManager"/> + <constructor-arg index="4" ref="mailboxTyper"/> + <constructor-arg index="5" ref="quotaManager"/> + <constructor-arg index="6" ref="quotaRootResolver"/> + <constructor-arg index="7" ref="timeMetricFactory"/> + </bean> + + <bean id="jamesSaslAuthenticator" class="org.apache.james.protocols.sasl.JamesSaslAuthenticator"> + <constructor-arg index="0" ref="authenticator"/> + <constructor-arg index="1" ref="authorizator"/> </bean> <bean id="mailboxTyper" class="org.apache.james.imap.api.process.DefaultMailboxTyper"/> diff --git a/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/AbstractIMAPServerTest.java b/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/AbstractIMAPServerTest.java index 7eb0eb22cc..a4c6471f4c 100644 --- a/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/AbstractIMAPServerTest.java +++ b/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/AbstractIMAPServerTest.java @@ -120,7 +120,8 @@ abstract class AbstractIMAPServerTest { memoryIntegrationResources.getQuotaManager(), memoryIntegrationResources.getQuotaRootResolver(), metricFactory, - localCacheConfiguration), + localCacheConfiguration, + config), new ImapMetrics(metricFactory), new NoopGaugeRegistry(), connectionChecks); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
