This is an automated email from the ASF dual-hosted git repository. rcordier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit e7a24c98a0ce58d73c4adee0d3ca01c4e1b42448 Author: Benoit TELLIER <[email protected]> AuthorDate: Sat Mar 28 15:58:48 2026 +0100 JAMES-4193 Use dependency injections to inject Encryption.Factory --- protocols/netty/pom.xml | 4 +++ .../apache/james/protocols/netty/Encryption.java | 2 +- .../apache/james/protocols/netty}/SslConfig.java | 2 +- .../james/CassandraRabbitMQJamesServerMain.java | 2 ++ .../james/DistributedPOP3JamesServerMain.java | 2 ++ .../java/org/apache/james/JPAJamesServerMain.java | 2 ++ .../java/org/apache/james/JPAJamesServerMain.java | 2 ++ .../org/apache/james/MemoryJamesServerMain.java | 3 ++ .../org/apache/james/PostgresJamesServerMain.java | 2 ++ .../src/main/java/org/apache/james/Main.java | 2 ++ .../james/ProtocolConfigurationSanitizer.java | 2 +- .../james/modules/LegacyEncryptionModule.java | 37 ++++++++++++++++++++++ .../james/modules/protocols/IMAPServerModule.java | 8 +++-- .../resources/META-INF/spring/loaders-context.xml | 4 +++ .../james/imapserver/netty/IMAPServerFactory.java | 8 +++++ .../imapserver/netty/IMAPHealthCheckTest.java | 3 ++ .../james/imapserver/netty/IMAPServerTest.java | 2 ++ .../protocols/lib/LegacyJavaEncryptionFactory.java | 13 ++++---- .../lib/netty/AbstractConfigurableAsyncServer.java | 13 +++++--- .../lib/AbstractConfigurableAsyncServerTest.java | 1 + .../james/lmtpserver/netty/LMTPServerFactory.java | 8 +++++ .../apache/james/lmtpserver/LmtpServerTest.java | 2 ++ .../netty/ManageSieveServerFactory.java | 8 +++++ .../ManageSieveServerTestSystem.java | 2 ++ .../james/pop3server/netty/POP3ServerFactory.java | 8 +++++ .../apache/james/pop3server/POP3ServerTest.java | 2 ++ .../james/smtpserver/netty/SMTPServerFactory.java | 8 +++++ .../james/smtpserver/SMTPServerTestSystem.java | 2 ++ 28 files changed, 139 insertions(+), 15 deletions(-) diff --git a/protocols/netty/pom.xml b/protocols/netty/pom.xml index b6b51de127..7fc49dcd16 100644 --- a/protocols/netty/pom.xml +++ b/protocols/netty/pom.xml @@ -66,6 +66,10 @@ <groupId>io.projectreactor</groupId> <artifactId>reactor-core</artifactId> </dependency> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-configuration2</artifactId> + </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> diff --git a/protocols/netty/src/main/java/org/apache/james/protocols/netty/Encryption.java b/protocols/netty/src/main/java/org/apache/james/protocols/netty/Encryption.java index 869d0e88dc..b1788b61fe 100644 --- a/protocols/netty/src/main/java/org/apache/james/protocols/netty/Encryption.java +++ b/protocols/netty/src/main/java/org/apache/james/protocols/netty/Encryption.java @@ -35,7 +35,7 @@ import io.netty.handler.ssl.SslHandler; public interface Encryption { interface Factory { - Encryption create() throws Exception; + Encryption create(SslConfig conf) throws Exception; } @VisibleForTesting diff --git a/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/SslConfig.java b/protocols/netty/src/main/java/org/apache/james/protocols/netty/SslConfig.java similarity index 99% rename from server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/SslConfig.java rename to protocols/netty/src/main/java/org/apache/james/protocols/netty/SslConfig.java index 3cd8d505bb..f185f43395 100644 --- a/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/SslConfig.java +++ b/protocols/netty/src/main/java/org/apache/james/protocols/netty/SslConfig.java @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.james.protocols.lib; +package org.apache.james.protocols.netty; import org.apache.commons.configuration2.HierarchicalConfiguration; import org.apache.commons.configuration2.ex.ConfigurationException; diff --git a/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java b/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java index 9d17f58a2d..ce9af6b50f 100644 --- a/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java +++ b/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java @@ -32,6 +32,7 @@ import org.apache.james.modules.BlobExportMechanismModule; import org.apache.james.modules.CassandraConsistencyTaskSerializationModule; import org.apache.james.modules.DistributedTaskManagerModule; import org.apache.james.modules.DistributedTaskSerializationModule; +import org.apache.james.modules.LegacyEncryptionModule; import org.apache.james.modules.MailboxModule; import org.apache.james.modules.MailetProcessingModule; import org.apache.james.modules.RunArgumentsModule; @@ -133,6 +134,7 @@ public class CassandraRabbitMQJamesServerMain implements JamesServerMain { new CassandraJmapModule(), new CassandraVacationModule(), new IMAPServerModule(), + new LegacyEncryptionModule(), new LMTPServerModule(), new ManageSieveServerModule(), new POP3ServerModule(), diff --git a/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesServerMain.java b/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesServerMain.java index e858004f4a..0b799ca7dd 100644 --- a/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesServerMain.java +++ b/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesServerMain.java @@ -39,6 +39,7 @@ import org.apache.james.modules.CassandraConsistencyTaskSerializationModule; import org.apache.james.modules.DistributedPop3Module; import org.apache.james.modules.DistributedTaskManagerModule; import org.apache.james.modules.DistributedTaskSerializationModule; +import org.apache.james.modules.LegacyEncryptionModule; import org.apache.james.modules.MailboxModule; import org.apache.james.modules.MailetProcessingModule; import org.apache.james.modules.Pop3FixInconsistenciesWebAdminModule; @@ -126,6 +127,7 @@ public class DistributedPOP3JamesServerMain implements JamesServerMain { new UserIdentityModule()); public static final Module PROTOCOLS = Modules.combine( + new LegacyEncryptionModule(), new LMTPServerModule(), new JMAPServerModule(), JMAPModule.INSTANCE, diff --git a/server/apps/jpa-app/src/main/java/org/apache/james/JPAJamesServerMain.java b/server/apps/jpa-app/src/main/java/org/apache/james/JPAJamesServerMain.java index b41bd72e62..68ac1be026 100644 --- a/server/apps/jpa-app/src/main/java/org/apache/james/JPAJamesServerMain.java +++ b/server/apps/jpa-app/src/main/java/org/apache/james/JPAJamesServerMain.java @@ -22,6 +22,7 @@ package org.apache.james; import org.apache.james.data.UsersRepositoryModuleChooser; import org.apache.james.mailbox.extractor.TextExtractor; import org.apache.james.mailbox.store.extractor.JsoupTextExtractor; +import org.apache.james.modules.LegacyEncryptionModule; import org.apache.james.modules.MailboxModule; import org.apache.james.modules.MailetProcessingModule; import org.apache.james.modules.RunArgumentsModule; @@ -77,6 +78,7 @@ public class JPAJamesServerMain implements JamesServerMain { private static final Module PROTOCOLS = Modules.combine( new IMAPServerModule(), + new LegacyEncryptionModule(), new LMTPServerModule(), new ManageSieveServerModule(), new POP3ServerModule(), diff --git a/server/apps/jpa-smtp-app/src/main/java/org/apache/james/JPAJamesServerMain.java b/server/apps/jpa-smtp-app/src/main/java/org/apache/james/JPAJamesServerMain.java index 7c517d2cc8..a48faf5fac 100644 --- a/server/apps/jpa-smtp-app/src/main/java/org/apache/james/JPAJamesServerMain.java +++ b/server/apps/jpa-smtp-app/src/main/java/org/apache/james/JPAJamesServerMain.java @@ -20,6 +20,7 @@ package org.apache.james; import org.apache.james.data.UsersRepositoryModuleChooser; +import org.apache.james.modules.LegacyEncryptionModule; import org.apache.james.modules.MailetProcessingModule; import org.apache.james.modules.RunArgumentsModule; import org.apache.james.modules.data.JPAAuthorizatorModule; @@ -46,6 +47,7 @@ import com.google.inject.util.Modules; public class JPAJamesServerMain implements JamesServerMain { private static final Module PROTOCOLS = Modules.combine( + new LegacyEncryptionModule(), new ProtocolHandlerModule(), new SMTPServerModule(), new WebAdminServerModule(), diff --git a/server/apps/memory-app/src/main/java/org/apache/james/MemoryJamesServerMain.java b/server/apps/memory-app/src/main/java/org/apache/james/MemoryJamesServerMain.java index 5adc1ebea1..da3a34aaf5 100644 --- a/server/apps/memory-app/src/main/java/org/apache/james/MemoryJamesServerMain.java +++ b/server/apps/memory-app/src/main/java/org/apache/james/MemoryJamesServerMain.java @@ -29,6 +29,7 @@ import org.apache.james.jmap.memory.pushsubscription.MemoryPushSubscriptionModul import org.apache.james.jwt.JwtConfiguration; import org.apache.james.modules.BlobExportMechanismModule; import org.apache.james.modules.BlobMemoryModule; +import org.apache.james.modules.LegacyEncryptionModule; import org.apache.james.modules.MailboxModule; import org.apache.james.modules.MailetProcessingModule; import org.apache.james.modules.RunArgumentsModule; @@ -111,6 +112,7 @@ public class MemoryJamesServerMain implements JamesServerMain { public static final Module PROTOCOLS = Modules.combine( new IMAPServerModule(), + new LegacyEncryptionModule(), new LMTPServerModule(), new ManageSieveServerModule(), new POP3ServerModule(), @@ -140,6 +142,7 @@ public class MemoryJamesServerMain implements JamesServerMain { public static final Module SMTP_ONLY_MODULE = Modules.combine( MemoryJamesServerMain.IN_MEMORY_SERVER_MODULE, + new LegacyEncryptionModule(), new ProtocolHandlerModule(), new SMTPServerModule(), new RawPostDequeueDecoratorModule(), diff --git a/server/apps/postgres-app/src/main/java/org/apache/james/PostgresJamesServerMain.java b/server/apps/postgres-app/src/main/java/org/apache/james/PostgresJamesServerMain.java index c8c0e8b041..55254401e0 100644 --- a/server/apps/postgres-app/src/main/java/org/apache/james/PostgresJamesServerMain.java +++ b/server/apps/postgres-app/src/main/java/org/apache/james/PostgresJamesServerMain.java @@ -33,6 +33,7 @@ import org.apache.james.json.DTO; import org.apache.james.json.DTOModule; import org.apache.james.modules.BlobExportMechanismModule; import org.apache.james.modules.DistributedTaskSerializationModule; +import org.apache.james.modules.LegacyEncryptionModule; import org.apache.james.modules.MailboxModule; import org.apache.james.modules.MailetProcessingModule; import org.apache.james.modules.RunArgumentsModule; @@ -130,6 +131,7 @@ public class PostgresJamesServerMain implements JamesServerMain { private static final Module PROTOCOLS = Modules.combine( new IMAPServerModule(), + new LegacyEncryptionModule(), new LMTPServerModule(), new ManageSieveServerModule(), new POP3ServerModule(), diff --git a/server/apps/scaling-pulsar-smtp/src/main/java/org/apache/james/Main.java b/server/apps/scaling-pulsar-smtp/src/main/java/org/apache/james/Main.java index 58f6a5319f..7fc3a55792 100644 --- a/server/apps/scaling-pulsar-smtp/src/main/java/org/apache/james/Main.java +++ b/server/apps/scaling-pulsar-smtp/src/main/java/org/apache/james/Main.java @@ -29,6 +29,7 @@ import org.apache.james.mailrepository.api.MailRepositoryFactory; import org.apache.james.mailrepository.api.MailRepositoryUrlStore; import org.apache.james.mailrepository.postgres.PostgresMailRepositoryFactory; import org.apache.james.mailrepository.postgres.PostgresMailRepositoryUrlStore; +import org.apache.james.modules.LegacyEncryptionModule; import org.apache.james.modules.RunArgumentsModule; import org.apache.james.modules.data.MemoryDelegationStoreModule; import org.apache.james.modules.data.PostgresCommonModule; @@ -70,6 +71,7 @@ public class Main implements JamesServerMain { new WebAdminServerModule(), new WebAdminMailOverWebModule()); public static final Module PROTOCOLS = Modules.combine( + new LegacyEncryptionModule(), new SMTPServerModule(), new ProtocolHandlerModule()); private static final Module BLOB_MODULE = Modules.combine( diff --git a/server/container/guice/common/src/main/java/org/apache/james/ProtocolConfigurationSanitizer.java b/server/container/guice/common/src/main/java/org/apache/james/ProtocolConfigurationSanitizer.java index 5f70e9638b..22d3d2031f 100644 --- a/server/container/guice/common/src/main/java/org/apache/james/ProtocolConfigurationSanitizer.java +++ b/server/container/guice/common/src/main/java/org/apache/james/ProtocolConfigurationSanitizer.java @@ -26,7 +26,7 @@ import org.apache.commons.configuration2.HierarchicalConfiguration; import org.apache.commons.configuration2.tree.ImmutableNode; import org.apache.james.filesystem.api.FileSystem; import org.apache.james.lifecycle.api.ConfigurationSanitizer; -import org.apache.james.protocols.lib.SslConfig; +import org.apache.james.protocols.netty.SslConfig; import org.apache.james.server.core.configuration.ConfigurationProvider; import org.apache.james.utils.KeystoreCreator; diff --git a/server/container/guice/common/src/main/java/org/apache/james/modules/LegacyEncryptionModule.java b/server/container/guice/common/src/main/java/org/apache/james/modules/LegacyEncryptionModule.java new file mode 100644 index 0000000000..e9359886cf --- /dev/null +++ b/server/container/guice/common/src/main/java/org/apache/james/modules/LegacyEncryptionModule.java @@ -0,0 +1,37 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.modules; + +import org.apache.james.protocols.lib.LegacyJavaEncryptionFactory; +import org.apache.james.protocols.netty.Encryption; + +import com.google.inject.AbstractModule; +import com.google.inject.Scopes; + +/** + * Default Guice module that binds {@link Encryption.Factory} to {@link LegacyJavaEncryptionFactory}. + * Override this binding to supply a custom SSL strategy. + */ +public class LegacyEncryptionModule extends AbstractModule { + @Override + protected void configure() { + bind(Encryption.Factory.class).to(LegacyJavaEncryptionFactory.class).in(Scopes.SINGLETON); + } +} 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 80a39d5725..3c3fc4ee3d 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 @@ -73,6 +73,7 @@ import org.apache.james.lifecycle.api.ConfigurationSanitizer; import org.apache.james.metrics.api.GaugeRegistry; import org.apache.james.metrics.api.MetricFactory; import org.apache.james.protocols.lib.netty.CertificateReloadable; +import org.apache.james.protocols.netty.Encryption; import org.apache.james.server.core.configuration.ConfigurationProvider; import org.apache.james.utils.ClassName; import org.apache.james.utils.GuiceLoader; @@ -132,8 +133,11 @@ public class IMAPServerModule extends AbstractModule { StatusResponseFactory statusResponseFactory, MetricFactory metricFactory, GaugeRegistry gaugeRegistry, - ConnectionCheckFactory connectionCheckFactory) { - return new IMAPServerFactory(fileSystem, imapSuiteLoader(guiceLoader, statusResponseFactory), metricFactory, gaugeRegistry, connectionCheckFactory); + ConnectionCheckFactory connectionCheckFactory, + Encryption.Factory encryptionFactory) { + IMAPServerFactory factory = new IMAPServerFactory(fileSystem, imapSuiteLoader(guiceLoader, statusResponseFactory), metricFactory, gaugeRegistry, connectionCheckFactory); + factory.setEncryptionFactory(encryptionFactory); + return factory; } DefaultProcessor provideClassImapProcessors(ImapPackage imapPackage, GuiceLoader guiceLoader, StatusResponseFactory statusResponseFactory) { diff --git a/server/container/spring/src/main/resources/META-INF/spring/loaders-context.xml b/server/container/spring/src/main/resources/META-INF/spring/loaders-context.xml index 5fa887305e..55520ebf9d 100644 --- a/server/container/spring/src/main/resources/META-INF/spring/loaders-context.xml +++ b/server/container/spring/src/main/resources/META-INF/spring/loaders-context.xml @@ -121,6 +121,10 @@ <!--<bean id="filesystem" class="org.apache.james.container.spring.filesystem.FileSystemImpl" autowire="byName"/>--> <bean id="filesystem" class="org.apache.james.container.spring.filesystem.ResourceLoaderFileSystem"/> + <bean id="encryptionFactory" class="org.apache.james.protocols.lib.LegacyJavaEncryptionFactory"> + <constructor-arg ref="filesystem"/> + </bean> + <bean id="sieveparser" class="org.apache.james.managesieve.jsieve.Parser"/> </beans> diff --git a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServerFactory.java b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServerFactory.java index ab89490095..9cdcd4e79f 100644 --- a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServerFactory.java +++ b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServerFactory.java @@ -41,6 +41,7 @@ import org.apache.james.metrics.api.GaugeRegistry; import org.apache.james.metrics.api.MetricFactory; import org.apache.james.protocols.lib.netty.AbstractConfigurableAsyncServer; import org.apache.james.protocols.lib.netty.AbstractServerFactory; +import org.apache.james.protocols.netty.Encryption; import com.github.fge.lambdas.functions.ThrowingFunction; @@ -51,6 +52,7 @@ public class IMAPServerFactory extends AbstractServerFactory implements Disconne protected final ImapMetrics imapMetrics; protected final GaugeRegistry gaugeRegistry; protected final ConnectionCheckFactory connectionCheckFactory; + protected Encryption.Factory encryptionFactory; @Inject @Deprecated @@ -72,6 +74,11 @@ public class IMAPServerFactory extends AbstractServerFactory implements Disconne this.connectionCheckFactory = connectionCheckFactory; } + @Inject + public void setEncryptionFactory(Encryption.Factory encryptionFactory) { + this.encryptionFactory = encryptionFactory; + } + protected IMAPServer createServer(HierarchicalConfiguration<ImmutableNode> config) { ImapSuite imapSuite = imapSuiteProvider.apply(config); @@ -86,6 +93,7 @@ public class IMAPServerFactory extends AbstractServerFactory implements Disconne for (HierarchicalConfiguration<ImmutableNode> serverConfig: configs) { IMAPServer server = createServer(serverConfig); server.setFileSystem(fileSystem); + server.setEncryptionFactory(encryptionFactory); server.configure(serverConfig); servers.add(server); } diff --git a/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPHealthCheckTest.java b/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPHealthCheckTest.java index 5915dfe363..a4b1408313 100644 --- a/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPHealthCheckTest.java +++ b/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPHealthCheckTest.java @@ -40,6 +40,7 @@ import org.apache.james.mailbox.store.FakeAuthorizator; import org.apache.james.mailbox.store.StoreSubscriptionManager; import org.apache.james.metrics.api.NoopGaugeRegistry; import org.apache.james.metrics.tests.RecordingMetricFactory; +import org.apache.james.protocols.lib.LegacyJavaEncryptionFactory; import org.apache.james.protocols.lib.mock.ConfigLoader; import org.apache.james.server.core.filesystem.FileSystemImpl; import org.apache.james.util.ClassLoaderUtils; @@ -94,6 +95,8 @@ public class IMAPHealthCheckTest { new NoopGaugeRegistry(), new DefaultConnectionCheckFactory()); + imapServerFactory.setEncryptionFactory(new LegacyJavaEncryptionFactory(FileSystemImpl.forTestingWithConfigurationFromClasspath())); + HierarchicalConfiguration<ImmutableNode> config = ConfigLoader.getConfig(ClassLoaderUtils.getSystemResourceAsSharedStream("imapServerHealthCheck.xml")); imapServerFactory.configure(config); imapServerFactory.init(); diff --git a/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPServerTest.java b/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPServerTest.java index 5c390bf09c..6d8bbe3747 100644 --- a/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPServerTest.java +++ b/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPServerTest.java @@ -103,6 +103,7 @@ import org.apache.james.metrics.tests.RecordingMetricFactory; import org.apache.james.protocols.api.OIDCSASLHelper; import org.apache.james.protocols.api.utils.BogusSslContextFactory; import org.apache.james.protocols.api.utils.BogusTrustManagerFactory; +import org.apache.james.protocols.lib.LegacyJavaEncryptionFactory; import org.apache.james.protocols.lib.mock.ConfigLoader; import org.apache.james.server.core.filesystem.FileSystemImpl; import org.apache.james.util.ClassLoaderUtils; @@ -188,6 +189,7 @@ class IMAPServerTest { FileSystemImpl fileSystem = FileSystemImpl.forTestingWithConfigurationFromClasspath(); imapServer.setFileSystem(fileSystem); + imapServer.setEncryptionFactory(new LegacyJavaEncryptionFactory(fileSystem)); imapServer.configure(config); imapServer.init(); diff --git a/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/LegacyJavaEncryptionFactory.java b/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/LegacyJavaEncryptionFactory.java index fd44959abb..07a2754e2f 100644 --- a/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/LegacyJavaEncryptionFactory.java +++ b/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/LegacyJavaEncryptionFactory.java @@ -31,9 +31,11 @@ import javax.net.ssl.CertPathTrustManagerParameters; import javax.net.ssl.SSLContext; import javax.net.ssl.X509ExtendedKeyManager; +import jakarta.inject.Inject; + import org.apache.james.filesystem.api.FileSystem; -import org.apache.james.protocols.lib.netty.AbstractConfigurableAsyncServer; import org.apache.james.protocols.netty.Encryption; +import org.apache.james.protocols.netty.SslConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,18 +46,17 @@ import nl.altindag.ssl.pem.util.PemUtils; import nl.altindag.ssl.trustmanager.trustoptions.TrustStoreTrustOptions; public class LegacyJavaEncryptionFactory implements Encryption.Factory { - private static final Logger LOGGER = LoggerFactory.getLogger(AbstractConfigurableAsyncServer.class); + private static final Logger LOGGER = LoggerFactory.getLogger(LegacyJavaEncryptionFactory.class); private final FileSystem fileSystem; - private final SslConfig sslConfig; - public LegacyJavaEncryptionFactory(FileSystem fileSystem, SslConfig sslConfig) { + @Inject + public LegacyJavaEncryptionFactory(FileSystem fileSystem) { this.fileSystem = fileSystem; - this.sslConfig = sslConfig; } @Override - public Encryption create() throws Exception { + public Encryption create(SslConfig sslConfig) throws Exception { SSLFactory.Builder sslFactoryBuilder = SSLFactory.builder() .withSslContextAlgorithm("TLS"); if (sslConfig.getKeystore() != null) { diff --git a/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractConfigurableAsyncServer.java b/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractConfigurableAsyncServer.java index cd99ca9b5c..639c418c0e 100644 --- a/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractConfigurableAsyncServer.java +++ b/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractConfigurableAsyncServer.java @@ -41,14 +41,13 @@ import org.apache.commons.configuration2.tree.ImmutableNode; import org.apache.commons.lang3.StringUtils; import org.apache.james.filesystem.api.FileSystem; import org.apache.james.lifecycle.api.Configurable; -import org.apache.james.protocols.lib.LegacyJavaEncryptionFactory; -import org.apache.james.protocols.lib.SslConfig; import org.apache.james.protocols.lib.jmx.ServerMBean; import org.apache.james.protocols.netty.AbstractAsyncServer; import org.apache.james.protocols.netty.AbstractChannelPipelineFactory; import org.apache.james.protocols.netty.AbstractSSLAwareChannelPipelineFactory; import org.apache.james.protocols.netty.ChannelHandlerFactory; import org.apache.james.protocols.netty.Encryption; +import org.apache.james.protocols.netty.SslConfig; import org.apache.james.util.Size; import org.apache.james.util.concurrent.NamedThreadFactory; import org.slf4j.Logger; @@ -96,6 +95,8 @@ public abstract class AbstractConfigurableAsyncServer private FileSystem fileSystem; + private Encryption.Factory encryptionFactory; + private boolean enabled; protected boolean proxyRequired; @@ -123,6 +124,11 @@ public abstract class AbstractConfigurableAsyncServer this.fileSystem = filesystem; } + @Inject + public final void setEncryptionFactory(Encryption.Factory encryptionFactory) { + this.encryptionFactory = encryptionFactory; + } + protected void registerMBean() { try { @@ -387,8 +393,7 @@ public abstract class AbstractConfigurableAsyncServer */ protected void buildSSLContext() throws Exception { if (sslConfig.useSSL() || sslConfig.useStartTLS()) { - encryption = new LegacyJavaEncryptionFactory(fileSystem, sslConfig) - .create(); + encryption = encryptionFactory.create(sslConfig); } } diff --git a/server/protocols/protocols-library/src/test/java/org/apache/james/protocols/lib/AbstractConfigurableAsyncServerTest.java b/server/protocols/protocols-library/src/test/java/org/apache/james/protocols/lib/AbstractConfigurableAsyncServerTest.java index 9f63c241bf..e907fed37e 100644 --- a/server/protocols/protocols-library/src/test/java/org/apache/james/protocols/lib/AbstractConfigurableAsyncServerTest.java +++ b/server/protocols/protocols-library/src/test/java/org/apache/james/protocols/lib/AbstractConfigurableAsyncServerTest.java @@ -134,6 +134,7 @@ class AbstractConfigurableAsyncServerTest { private void initTestServer(String configFile) throws Exception { testServer = new TestableConfigurableAsyncServer(); testServer.setFileSystem(memoryFileSystem); + testServer.setEncryptionFactory(new LegacyJavaEncryptionFactory(memoryFileSystem)); testServer.configure(ConfigLoader.getConfig(ClassLoader.getSystemResourceAsStream(configFile))); } diff --git a/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServerFactory.java b/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServerFactory.java index 20e40817f6..188759f2cf 100644 --- a/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServerFactory.java +++ b/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServerFactory.java @@ -30,12 +30,14 @@ import org.apache.james.metrics.api.MetricFactory; import org.apache.james.protocols.lib.handler.ProtocolHandlerLoader; import org.apache.james.protocols.lib.netty.AbstractConfigurableAsyncServer; import org.apache.james.protocols.lib.netty.AbstractServerFactory; +import org.apache.james.protocols.netty.Encryption; public class LMTPServerFactory extends AbstractServerFactory { private final ProtocolHandlerLoader loader; private final FileSystem fileSystem; protected final LMTPMetricsImpl lmtpMetrics; + private Encryption.Factory encryptionFactory; @Inject public LMTPServerFactory(ProtocolHandlerLoader loader, FileSystem fileSystem, MetricFactory metricFactory) { @@ -44,6 +46,11 @@ public class LMTPServerFactory extends AbstractServerFactory { this.lmtpMetrics = new LMTPMetricsImpl(metricFactory); } + @Inject + public void setEncryptionFactory(Encryption.Factory encryptionFactory) { + this.encryptionFactory = encryptionFactory; + } + protected LMTPServer createServer() { return new LMTPServer(lmtpMetrics); } @@ -56,6 +63,7 @@ public class LMTPServerFactory extends AbstractServerFactory { for (HierarchicalConfiguration<ImmutableNode> serverConfig: configs) { LMTPServer server = createServer(); server.setFileSystem(fileSystem); + server.setEncryptionFactory(encryptionFactory); server.setProtocolHandlerLoader(loader); server.configure(serverConfig); servers.add(server); diff --git a/server/protocols/protocols-lmtp/src/test/java/org/apache/james/lmtpserver/LmtpServerTest.java b/server/protocols/protocols-lmtp/src/test/java/org/apache/james/lmtpserver/LmtpServerTest.java index dd02a3182d..0a1e83d485 100644 --- a/server/protocols/protocols-lmtp/src/test/java/org/apache/james/lmtpserver/LmtpServerTest.java +++ b/server/protocols/protocols-lmtp/src/test/java/org/apache/james/lmtpserver/LmtpServerTest.java @@ -65,6 +65,7 @@ import org.apache.james.mailbox.model.MessageRange; import org.apache.james.mailetcontainer.api.MailProcessor; import org.apache.james.metrics.api.MetricFactory; import org.apache.james.metrics.tests.RecordingMetricFactory; +import org.apache.james.protocols.lib.LegacyJavaEncryptionFactory; import org.apache.james.protocols.lib.mock.ConfigLoader; import org.apache.james.protocols.lib.mock.MockProtocolHandlerLoader; import org.apache.james.rrt.api.AliasReverseResolver; @@ -167,6 +168,7 @@ class LmtpServerTest { private LMTPServerFactory createLMTPServer(MockProtocolHandlerLoader loader, String configuration) throws Exception { LMTPServerFactory lmtpServerFactory = new LMTPServerFactory(loader, fileSystem, new RecordingMetricFactory()); + lmtpServerFactory.setEncryptionFactory(new LegacyJavaEncryptionFactory(fileSystem)); lmtpServerFactory.configure(ConfigLoader.getConfig(ClassLoader.getSystemResourceAsStream(configuration))); lmtpServerFactory.init(); return lmtpServerFactory; diff --git a/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServerFactory.java b/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServerFactory.java index 4aee2ebff8..b345dcaf86 100644 --- a/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServerFactory.java +++ b/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServerFactory.java @@ -34,12 +34,14 @@ import org.apache.james.managesieve.transcode.ArgumentParser; import org.apache.james.managesieve.transcode.ManageSieveProcessor; import org.apache.james.protocols.lib.netty.AbstractConfigurableAsyncServer; import org.apache.james.protocols.lib.netty.AbstractServerFactory; +import org.apache.james.protocols.netty.Encryption; import org.apache.james.sieverepository.api.SieveRepository; import org.apache.james.user.api.UsersRepository; public class ManageSieveServerFactory extends AbstractServerFactory { private FileSystem fileSystem; + private Encryption.Factory encryptionFactory; private ManageSieveProcessor manageSieveProcessor; private SieveRepository sieveRepository; private UsersRepository usersRepository; @@ -50,6 +52,11 @@ public class ManageSieveServerFactory extends AbstractServerFactory { this.fileSystem = fileSystem; } + @Inject + public void setEncryptionFactory(Encryption.Factory encryptionFactory) { + this.encryptionFactory = encryptionFactory; + } + @Inject public void setSieveRepository(SieveRepository sieveRepository) { this.sieveRepository = sieveRepository; @@ -81,6 +88,7 @@ public class ManageSieveServerFactory extends AbstractServerFactory { for (HierarchicalConfiguration<ImmutableNode> serverConfig: configs) { ManageSieveServer server = new ManageSieveServer(8000, manageSieveProcessor); server.setFileSystem(fileSystem); + server.setEncryptionFactory(encryptionFactory); server.configure(serverConfig); servers.add(server); } diff --git a/server/protocols/protocols-managesieve/src/test/java/org/apache/james/managesieveserver/ManageSieveServerTestSystem.java b/server/protocols/protocols-managesieve/src/test/java/org/apache/james/managesieveserver/ManageSieveServerTestSystem.java index 185c40e48e..ef9b8e282e 100644 --- a/server/protocols/protocols-managesieve/src/test/java/org/apache/james/managesieveserver/ManageSieveServerTestSystem.java +++ b/server/protocols/protocols-managesieve/src/test/java/org/apache/james/managesieveserver/ManageSieveServerTestSystem.java @@ -32,6 +32,7 @@ import org.apache.james.managesieve.transcode.ArgumentParser; import org.apache.james.managesieve.transcode.ManageSieveProcessor; import org.apache.james.managesieveserver.netty.ManageSieveServer; import org.apache.james.protocols.api.utils.ProtocolServerUtils; +import org.apache.james.protocols.lib.LegacyJavaEncryptionFactory; import org.apache.james.server.core.configuration.FileConfigurationProvider; import org.apache.james.sieverepository.file.SieveFileRepository; import org.apache.james.user.memory.MemoryUsersRepository; @@ -70,6 +71,7 @@ class ManageSieveServerTestSystem { this.manageSieveProcessor ); this.manageSieveServer.setFileSystem(this.fileSystem); + this.manageSieveServer.setEncryptionFactory(new LegacyJavaEncryptionFactory(this.fileSystem)); this.manageSieveServer.configure(configuration); this.manageSieveServer.init(); } diff --git a/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/netty/POP3ServerFactory.java b/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/netty/POP3ServerFactory.java index d795efaa0a..5b0ae64ee2 100644 --- a/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/netty/POP3ServerFactory.java +++ b/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/netty/POP3ServerFactory.java @@ -30,11 +30,13 @@ import org.apache.james.filesystem.api.FileSystem; import org.apache.james.protocols.lib.handler.ProtocolHandlerLoader; import org.apache.james.protocols.lib.netty.AbstractConfigurableAsyncServer; import org.apache.james.protocols.lib.netty.AbstractServerFactory; +import org.apache.james.protocols.netty.Encryption; public class POP3ServerFactory extends AbstractServerFactory { private ProtocolHandlerLoader loader; private FileSystem fileSystem; + private Encryption.Factory encryptionFactory; @Inject public void setProtocolHandlerLoader(ProtocolHandlerLoader loader) { @@ -46,6 +48,11 @@ public class POP3ServerFactory extends AbstractServerFactory { this.fileSystem = filesystem; } + @Inject + public final void setEncryptionFactory(Encryption.Factory encryptionFactory) { + this.encryptionFactory = encryptionFactory; + } + protected POP3Server createServer() { return new POP3Server(); } @@ -60,6 +67,7 @@ public class POP3ServerFactory extends AbstractServerFactory { POP3Server server = createServer(); server.setProtocolHandlerLoader(loader); server.setFileSystem(fileSystem); + server.setEncryptionFactory(encryptionFactory); server.configure(serverConfig); servers.add(server); } diff --git a/server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java b/server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java index 00f12a6359..9f30037270 100644 --- a/server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java +++ b/server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java @@ -59,6 +59,7 @@ import org.apache.james.pop3server.mailbox.DefaultMailboxAdapterFactory; import org.apache.james.pop3server.mailbox.MailboxAdapterFactory; import org.apache.james.pop3server.netty.POP3Server; import org.apache.james.protocols.api.utils.ProtocolServerUtils; +import org.apache.james.protocols.lib.LegacyJavaEncryptionFactory; import org.apache.james.protocols.lib.POP3BeforeSMTPHelper; import org.apache.james.protocols.lib.mock.ConfigLoader; import org.apache.james.protocols.lib.mock.MockProtocolHandlerLoader; @@ -959,6 +960,7 @@ public class POP3ServerTest { protected void setUpPOP3Server() { pop3Server = createPOP3Server(); pop3Server.setFileSystem(fileSystem); + pop3Server.setEncryptionFactory(new LegacyJavaEncryptionFactory(fileSystem)); pop3Server.setProtocolHandlerLoader(protocolHandlerChain); } diff --git a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServerFactory.java b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServerFactory.java index 831a7d4fa4..5d4bbc08f4 100644 --- a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServerFactory.java +++ b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServerFactory.java @@ -38,6 +38,7 @@ import org.apache.james.metrics.api.MetricFactory; import org.apache.james.protocols.lib.handler.ProtocolHandlerLoader; import org.apache.james.protocols.lib.netty.AbstractConfigurableAsyncServer; import org.apache.james.protocols.lib.netty.AbstractServerFactory; +import org.apache.james.protocols.netty.Encryption; public class SMTPServerFactory extends AbstractServerFactory implements Disconnector, ConnectionDescriptionSupplier { @@ -45,6 +46,7 @@ public class SMTPServerFactory extends AbstractServerFactory implements Disconne protected final ProtocolHandlerLoader loader; protected final FileSystem fileSystem; protected final SmtpMetricsImpl smtpMetrics; + protected Encryption.Factory encryptionFactory; @Inject public SMTPServerFactory(DNSService dns, ProtocolHandlerLoader loader, FileSystem fileSystem, @@ -55,6 +57,11 @@ public class SMTPServerFactory extends AbstractServerFactory implements Disconne this.smtpMetrics = new SmtpMetricsImpl(metricFactory); } + @Inject + public void setEncryptionFactory(Encryption.Factory encryptionFactory) { + this.encryptionFactory = encryptionFactory; + } + protected SMTPServer createServer() { return new SMTPServer(smtpMetrics); } @@ -70,6 +77,7 @@ public class SMTPServerFactory extends AbstractServerFactory implements Disconne server.setDnsService(dns); server.setProtocolHandlerLoader(loader); server.setFileSystem(fileSystem); + server.setEncryptionFactory(encryptionFactory); server.configure(serverConfig); servers.add(server); } diff --git a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTestSystem.java b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTestSystem.java index a72c2521ab..d276912fe2 100644 --- a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTestSystem.java +++ b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTestSystem.java @@ -50,6 +50,7 @@ import org.apache.james.metrics.api.Metric; import org.apache.james.metrics.api.MetricFactory; import org.apache.james.metrics.tests.RecordingMetricFactory; import org.apache.james.protocols.api.utils.ProtocolServerUtils; +import org.apache.james.protocols.lib.LegacyJavaEncryptionFactory; import org.apache.james.protocols.lib.mock.MockProtocolHandlerLoader; import org.apache.james.queue.api.MailQueueFactory; import org.apache.james.queue.api.RawMailQueueItemDecoratorFactory; @@ -147,6 +148,7 @@ class SMTPServerTestSystem { smtpServer = createSMTPServer(smtpMetrics); smtpServer.setDnsService(dnsServer); smtpServer.setFileSystem(fileSystem); + smtpServer.setEncryptionFactory(new LegacyJavaEncryptionFactory(fileSystem)); smtpServer.setProtocolHandlerLoader(chain); } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
