JAMES-3906 Use an interface dedicated for certificate reload in bindings
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 8de9a48..7b084f4 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 @@
.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 603fdc7..fa478b0 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.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 @@
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 9e198cf..e16e9cf 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.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 @@
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 9f62812..8eb469d 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.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 @@
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 75bfc62..445fb50 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.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 @@
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 b3b8dcd..b4f6b08 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.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 @@
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 ed07df2..42815e5 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 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 bf672d5..62fccd9 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 @@
/**
* 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 @@
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 248de22..7965620 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 028b75f..d78109e 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 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 @@
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 @@
}
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 @@
private boolean noServerEnabled() {
return servers.stream()
- .flatMap(serverFactory -> serverFactory.getServers().stream())
- .filter(AbstractConfigurableAsyncServer::isEnabled).findFirst().isEmpty();
+ .flatMap(CertificateReloadable.Factory::certificatesReloadable)
+ .findFirst()
+ .isEmpty();
}
}