This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch 3.8.x in repository https://gitbox.apache.org/repos/asf/james-project.git
commit c283255d68b3e4c14a47a71eeeb33f822d86ff62 Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Tue May 30 08:51:00 2023 +0700 JAMES-3906 Use an interface dedicated for certificate reload in bindings --- .../java/org/apache/james/CertificateReloadTest.java | 2 +- .../james/modules/protocols/IMAPServerModule.java | 4 ++-- .../james/modules/protocols/LMTPServerModule.java | 4 ++-- .../modules/protocols/ManageSieveServerModule.java | 4 ++-- .../james/modules/protocols/POP3ServerModule.java | 4 ++-- .../james/modules/protocols/SMTPServerModule.java | 4 ++-- .../james/modules/protocols/SmtpGuiceProbe.java | 5 +---- .../protocols/lib/netty/AbstractServerFactory.java | 10 ++++++++-- .../protocols/lib/netty/CertificateReloadable.java | 7 +++++++ .../protocols/webadmin/ProtocolServerRoutes.java | 19 +++++++++---------- 10 files changed, 36 insertions(+), 27 deletions(-) diff --git a/server/apps/memory-app/src/test/java/org/apache/james/CertificateReloadTest.java b/server/apps/memory-app/src/test/java/org/apache/james/CertificateReloadTest.java index 8de9a48892..7b084f45d7 100644 --- a/server/apps/memory-app/src/test/java/org/apache/james/CertificateReloadTest.java +++ b/server/apps/memory-app/src/test/java/org/apache/james/CertificateReloadTest.java @@ -203,7 +203,7 @@ class CertificateReloadTest { .then() .statusCode(204); - System.out.println(readBytes(channel)); + readBytes(channel); channel.getOutputStream().write("EHLO toto.com\r\n".getBytes(StandardCharsets.UTF_8)); assertThat(readBytes(channel)) .contains("250 8BITMIME"); 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 603fdc7a15..fa478b0b6a 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 @@ -60,7 +60,7 @@ import org.apache.james.imapserver.netty.IMAPServerFactory; 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.AbstractServerFactory; +import org.apache.james.protocols.lib.netty.CertificateReloadable; import org.apache.james.server.core.configuration.ConfigurationProvider; import org.apache.james.utils.ClassName; import org.apache.james.utils.GuiceGenericLoader; @@ -101,7 +101,7 @@ public class IMAPServerModule extends AbstractModule { Multibinder.newSetBinder(binder(), GuiceProbe.class).addBinding().to(ImapGuiceProbe.class); - Multibinder.newSetBinder(binder(), AbstractServerFactory.class).addBinding().to(IMAPServerFactory.class); + Multibinder.newSetBinder(binder(), CertificateReloadable.Factory.class).addBinding().to(IMAPServerFactory.class); } @Provides diff --git a/server/container/guice/protocols/lmtp/src/main/java/org/apache/james/modules/protocols/LMTPServerModule.java b/server/container/guice/protocols/lmtp/src/main/java/org/apache/james/modules/protocols/LMTPServerModule.java index 9e198cf843..e16e9cf945 100644 --- a/server/container/guice/protocols/lmtp/src/main/java/org/apache/james/modules/protocols/LMTPServerModule.java +++ b/server/container/guice/protocols/lmtp/src/main/java/org/apache/james/modules/protocols/LMTPServerModule.java @@ -24,7 +24,7 @@ import org.apache.james.RunArguments; import org.apache.james.filesystem.api.FileSystem; import org.apache.james.lifecycle.api.ConfigurationSanitizer; import org.apache.james.lmtpserver.netty.LMTPServerFactory; -import org.apache.james.protocols.lib.netty.AbstractServerFactory; +import org.apache.james.protocols.lib.netty.CertificateReloadable; import org.apache.james.server.core.configuration.ConfigurationProvider; import org.apache.james.util.LoggingLevel; import org.apache.james.utils.GuiceProbe; @@ -44,7 +44,7 @@ public class LMTPServerModule extends AbstractModule { Multibinder.newSetBinder(binder(), GuiceProbe.class).addBinding().to(LmtpGuiceProbe.class); - Multibinder.newSetBinder(binder(), AbstractServerFactory.class).addBinding().to(LMTPServerFactory.class); + Multibinder.newSetBinder(binder(), CertificateReloadable.Factory.class).addBinding().to(LMTPServerFactory.class); } @ProvidesIntoSet diff --git a/server/container/guice/protocols/managedsieve/src/main/java/org/apache/james/modules/protocols/ManageSieveServerModule.java b/server/container/guice/protocols/managedsieve/src/main/java/org/apache/james/modules/protocols/ManageSieveServerModule.java index 9f62812d45..8eb469d48a 100644 --- a/server/container/guice/protocols/managedsieve/src/main/java/org/apache/james/modules/protocols/ManageSieveServerModule.java +++ b/server/container/guice/protocols/managedsieve/src/main/java/org/apache/james/modules/protocols/ManageSieveServerModule.java @@ -25,7 +25,7 @@ import org.apache.james.lifecycle.api.ConfigurationSanitizer; import org.apache.james.managesieve.api.commands.CoreCommands; import org.apache.james.managesieve.core.CoreProcessor; import org.apache.james.managesieveserver.netty.ManageSieveServerFactory; -import org.apache.james.protocols.lib.netty.AbstractServerFactory; +import org.apache.james.protocols.lib.netty.CertificateReloadable; import org.apache.james.server.core.configuration.ConfigurationProvider; import org.apache.james.util.LoggingLevel; import org.apache.james.utils.GuiceProbe; @@ -47,7 +47,7 @@ public class ManageSieveServerModule extends AbstractModule { bind(CoreCommands.class).to(CoreProcessor.class); Multibinder.newSetBinder(binder(), GuiceProbe.class).addBinding().to(SieveProbeImpl.class); - Multibinder.newSetBinder(binder(), AbstractServerFactory.class).addBinding().to(ManageSieveServerFactory.class); + Multibinder.newSetBinder(binder(), CertificateReloadable.Factory.class).addBinding().to(ManageSieveServerFactory.class); } @ProvidesIntoSet diff --git a/server/container/guice/protocols/pop/src/main/java/org/apache/james/modules/protocols/POP3ServerModule.java b/server/container/guice/protocols/pop/src/main/java/org/apache/james/modules/protocols/POP3ServerModule.java index 75bfc62949..445fb50b03 100644 --- a/server/container/guice/protocols/pop/src/main/java/org/apache/james/modules/protocols/POP3ServerModule.java +++ b/server/container/guice/protocols/pop/src/main/java/org/apache/james/modules/protocols/POP3ServerModule.java @@ -26,7 +26,7 @@ import org.apache.james.lifecycle.api.ConfigurationSanitizer; import org.apache.james.pop3server.mailbox.DefaultMailboxAdapterFactory; import org.apache.james.pop3server.mailbox.MailboxAdapterFactory; import org.apache.james.pop3server.netty.POP3ServerFactory; -import org.apache.james.protocols.lib.netty.AbstractServerFactory; +import org.apache.james.protocols.lib.netty.CertificateReloadable; import org.apache.james.server.core.configuration.ConfigurationProvider; import org.apache.james.utils.GuiceProbe; import org.apache.james.utils.InitializationOperation; @@ -48,7 +48,7 @@ public class POP3ServerModule extends AbstractModule { Multibinder.newSetBinder(binder(), GuiceProbe.class).addBinding().to(Pop3GuiceProbe.class); - Multibinder.newSetBinder(binder(), AbstractServerFactory.class).addBinding().to(POP3ServerFactory.class); + Multibinder.newSetBinder(binder(), CertificateReloadable.Factory.class).addBinding().to(POP3ServerFactory.class); } @ProvidesIntoSet diff --git a/server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SMTPServerModule.java b/server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SMTPServerModule.java index b3b8dcd3b2..b4f6b08e3c 100644 --- a/server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SMTPServerModule.java +++ b/server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SMTPServerModule.java @@ -23,7 +23,7 @@ import org.apache.james.ProtocolConfigurationSanitizer; import org.apache.james.RunArguments; import org.apache.james.filesystem.api.FileSystem; import org.apache.james.lifecycle.api.ConfigurationSanitizer; -import org.apache.james.protocols.lib.netty.AbstractServerFactory; +import org.apache.james.protocols.lib.netty.CertificateReloadable; import org.apache.james.server.core.configuration.ConfigurationProvider; import org.apache.james.smtpserver.SendMailHandler; import org.apache.james.smtpserver.netty.SMTPServerFactory; @@ -45,7 +45,7 @@ public class SMTPServerModule extends AbstractModule { Multibinder.newSetBinder(binder(), GuiceProbe.class).addBinding().to(SmtpGuiceProbe.class); - Multibinder.newSetBinder(binder(), AbstractServerFactory.class).addBinding().to(SMTPServerFactory.class); + Multibinder.newSetBinder(binder(), CertificateReloadable.Factory.class).addBinding().to(SMTPServerFactory.class); } @ProvidesIntoSet diff --git a/server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SmtpGuiceProbe.java b/server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SmtpGuiceProbe.java index ed07df2af4..42815e52b3 100644 --- a/server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SmtpGuiceProbe.java +++ b/server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SmtpGuiceProbe.java @@ -65,10 +65,7 @@ public class SmtpGuiceProbe implements GuiceProbe { } public Port getSmtpSslPort() { - return getPort(server -> { - System.out.println(server.getServiceType()); - return server.getSocketType().equals("secure"); - }); + return getPort(server -> server.getSocketType().equals("secure")); } public Port getSmtpAuthRequiredPort() { diff --git a/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractServerFactory.java b/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractServerFactory.java index bf672d5efa..62fccd9ecd 100644 --- a/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractServerFactory.java +++ b/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractServerFactory.java @@ -20,6 +20,7 @@ package org.apache.james.protocols.lib.netty; import java.util.List; +import java.util.stream.Stream; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; @@ -31,7 +32,7 @@ import org.apache.james.lifecycle.api.Configurable; /** * Abstract base class for Factories that need to create {@link AbstractConfigurableAsyncServer}'s via configuration files */ -public abstract class AbstractServerFactory implements Configurable { +public abstract class AbstractServerFactory implements Configurable, CertificateReloadable.Factory { private List<AbstractConfigurableAsyncServer> servers; private HierarchicalConfiguration<ImmutableNode> config; @@ -69,5 +70,10 @@ public abstract class AbstractServerFactory implements Configurable { server.destroy(); } } - + + @Override + public Stream<AbstractConfigurableAsyncServer> certificatesReloadable() { + return getServers().stream() + .filter(AbstractConfigurableAsyncServer::isEnabled); + } } diff --git a/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/CertificateReloadable.java b/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/CertificateReloadable.java index 248de22857..79656203f5 100644 --- a/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/CertificateReloadable.java +++ b/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/CertificateReloadable.java @@ -18,7 +18,14 @@ ****************************************************************/ package org.apache.james.protocols.lib.netty; +import java.util.stream.Stream; + public interface CertificateReloadable { + interface Factory { + Stream<? extends CertificateReloadable> certificatesReloadable(); + } void reloadSSLCertificate() throws Exception; + + int getPort(); } diff --git a/server/protocols/webadmin/webadmin-protocols/src/main/java/org/apache/james/protocols/webadmin/ProtocolServerRoutes.java b/server/protocols/webadmin/webadmin-protocols/src/main/java/org/apache/james/protocols/webadmin/ProtocolServerRoutes.java index 028b75f3e1..d78109e518 100644 --- a/server/protocols/webadmin/webadmin-protocols/src/main/java/org/apache/james/protocols/webadmin/ProtocolServerRoutes.java +++ b/server/protocols/webadmin/webadmin-protocols/src/main/java/org/apache/james/protocols/webadmin/ProtocolServerRoutes.java @@ -24,8 +24,7 @@ import java.util.Set; import javax.inject.Inject; -import org.apache.james.protocols.lib.netty.AbstractConfigurableAsyncServer; -import org.apache.james.protocols.lib.netty.AbstractServerFactory; +import org.apache.james.protocols.lib.netty.CertificateReloadable; import org.apache.james.util.Port; import org.apache.james.webadmin.Routes; import org.apache.james.webadmin.utils.ErrorResponder; @@ -42,10 +41,10 @@ import spark.Service; public class ProtocolServerRoutes implements Routes { public static final String SERVERS = "servers"; - private final Set<AbstractServerFactory> servers; + private final Set<CertificateReloadable.Factory> servers; @Inject - public ProtocolServerRoutes(Set<AbstractServerFactory> servers) { + public ProtocolServerRoutes(Set<CertificateReloadable.Factory> servers) { this.servers = servers; } @@ -69,16 +68,15 @@ public class ProtocolServerRoutes implements Routes { } servers.stream() - .flatMap(serverFactory -> serverFactory.getServers().stream()) - .filter(AbstractConfigurableAsyncServer::isEnabled) + .flatMap(CertificateReloadable.Factory::certificatesReloadable) .filter(filters(request)) - .forEach(Throwing.consumer(AbstractConfigurableAsyncServer::reloadSSLCertificate)); + .forEach(Throwing.consumer(CertificateReloadable::reloadSSLCertificate)); return Responses.returnNoContent(response); }); } - private Predicate<AbstractConfigurableAsyncServer> filters(Request request) { + private Predicate<CertificateReloadable> filters(Request request) { Optional<Port> port = Optional.ofNullable(request.queryParams("port")).map(Integer::parseUnsignedInt).map(Port::of); return server -> port.map(p -> server.getPort() == p.getValue()).orElse(true); @@ -86,7 +84,8 @@ public class ProtocolServerRoutes implements Routes { private boolean noServerEnabled() { return servers.stream() - .flatMap(serverFactory -> serverFactory.getServers().stream()) - .filter(AbstractConfigurableAsyncServer::isEnabled).findFirst().isEmpty(); + .flatMap(CertificateReloadable.Factory::certificatesReloadable) + .findFirst() + .isEmpty(); } } --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org