This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 34e909b29557a4b6698c99b46a5f3a3c44bab4c5
Author: Benoit TELLIER <btell...@linagora.com>
AuthorDate: Wed Nov 20 11:42:14 2024 +0100

    JAMES-4090 Endpoint to diconnect all users
---
 core/src/main/java/org/apache/james/core/Disconnector.java       | 5 +++--
 .../scala/org/apache/james/jmap/routes/EventSourceRoutes.scala   | 5 +++--
 .../scala/org/apache/james/jmap/routes/WebSocketRoutes.scala     | 5 +++--
 .../main/java/org/apache/james/imapserver/netty/IMAPServer.java  | 5 +++--
 .../org/apache/james/imapserver/netty/IMAPServerFactory.java     | 3 ++-
 .../java/org/apache/james/imapserver/netty/IMAPServerTest.java   | 2 +-
 .../main/java/org/apache/james/smtpserver/netty/SMTPServer.java  | 5 +++--
 .../org/apache/james/smtpserver/netty/SMTPServerFactory.java     | 3 ++-
 .../apache/james/protocols/webadmin/ProtocolServerRoutes.java    | 9 ++++++++-
 9 files changed, 28 insertions(+), 14 deletions(-)

diff --git a/core/src/main/java/org/apache/james/core/Disconnector.java 
b/core/src/main/java/org/apache/james/core/Disconnector.java
index cd22b01046..e736c243f8 100644
--- a/core/src/main/java/org/apache/james/core/Disconnector.java
+++ b/core/src/main/java/org/apache/james/core/Disconnector.java
@@ -20,6 +20,7 @@
 package org.apache.james.core;
 
 import java.util.Set;
+import java.util.function.Predicate;
 
 import jakarta.inject.Inject;
 
@@ -28,7 +29,7 @@ public interface Disconnector {
 
     };
 
-    void disconnect(Username username);
+    void disconnect(Predicate<Username> username);
 
     class CompositeDisconnector implements Disconnector {
         private final Set<Disconnector> disconnectorSet;
@@ -39,7 +40,7 @@ public interface Disconnector {
         }
 
         @Override
-        public void disconnect(Username username) {
+        public void disconnect(Predicate<Username> username) {
             disconnectorSet.forEach(disconnector -> 
disconnector.disconnect(username));
         }
     }
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/EventSourceRoutes.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/EventSourceRoutes.scala
index 35f0105504..0d530e2f3c 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/EventSourceRoutes.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/EventSourceRoutes.scala
@@ -52,6 +52,7 @@ import reactor.core.scala.publisher.{SFlux, SMono}
 import reactor.core.scheduler.Schedulers
 import reactor.netty.http.server.{HttpServerRequest, HttpServerResponse}
 
+import java.util.function.Predicate
 import scala.concurrent.duration._
 import scala.jdk.CollectionConverters._
 import scala.language.postfixOps
@@ -236,10 +237,10 @@ class EventSourceRoutes@Inject() 
(@Named(InjectionKeys.RFC_8621) val authenticat
         StandardCharsets.UTF_8)
       .`then`)
 
-  override def disconnect(username: Username): Unit = {
+  override def disconnect(username: Predicate[Username]): Unit = {
     val contexts = connectedUsers.values()
       .stream()
-      .filter(context => username.equals(context.session.getUser))
+      .filter(context => username.test(context.session.getUser))
       .toList
 
     contexts
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/WebSocketRoutes.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/WebSocketRoutes.scala
index bd35b6f7c3..f2c9e7ee9d 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/WebSocketRoutes.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/WebSocketRoutes.scala
@@ -51,6 +51,7 @@ import reactor.core.scheduler.Schedulers
 import reactor.netty.http.server.{HttpServerRequest, HttpServerResponse}
 import reactor.netty.http.websocket.{WebsocketInbound, WebsocketOutbound}
 
+import java.util.function.Predicate
 import scala.jdk.CollectionConverters._
 
 object WebSocketRoutes {
@@ -195,10 +196,10 @@ class WebSocketRoutes @Inject() 
(@Named(InjectionKeys.RFC_8621) val authenticato
         StandardCharsets.UTF_8)
       .`then`)
 
-  override def disconnect(username: Username): Unit = {
+  override def disconnect(username: Predicate[Username]): Unit = {
     val contexts = connectedUsers.values()
       .stream()
-      .filter(context => username.equals(context.session.getUser))
+      .filter(context => username.test(context.session.getUser))
       .toList
 
     contexts
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 01b0ec4b6f..f2e08114a6 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
@@ -25,6 +25,7 @@ import java.util.LinkedHashMap;
 import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
+import java.util.function.Predicate;
 
 import org.apache.commons.configuration2.HierarchicalConfiguration;
 import org.apache.commons.configuration2.ex.ConfigurationException;
@@ -199,11 +200,11 @@ public class IMAPServer extends 
AbstractConfigurableAsyncServer implements ImapC
     }
 
     @Override
-    public void disconnect(Username user) {
+    public void disconnect(Predicate<Username> user) {
         imapChannelGroup.stream()
             .filter(channel -> 
Optional.ofNullable(channel.attr(IMAP_SESSION_ATTRIBUTE_KEY).get())
                 .flatMap(session -> Optional.ofNullable(session.getUserName()))
-                .map(user::equals)
+                .map(user::test)
                 .orElse(false))
             .forEach(channel -> 
channel.writeAndFlush(Unpooled.EMPTY_BUFFER).addListener(ChannelFutureListener.CLOSE));
     }
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 7880a634e9..9ddcdb30b0 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
@@ -20,6 +20,7 @@ package org.apache.james.imapserver.netty;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Predicate;
 
 import jakarta.inject.Inject;
 
@@ -98,7 +99,7 @@ public class IMAPServerFactory extends AbstractServerFactory 
implements Disconne
     }
 
     @Override
-    public void disconnect(Username username) {
+    public void disconnect(Predicate<Username> username) {
         getServers()
             .stream()
             .map(server -> (IMAPServer) server)
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 d467988fbd..54a76fdb86 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
@@ -253,7 +253,7 @@ class IMAPServerTest {
             testIMAPClient.connect("127.0.0.1", port)
                 .login(USER.asString(), USER_PASS);
 
-            imapServer.disconnect(USER);
+            imapServer.disconnect(USER::equals);
 
             assertThatThrownBy(() -> testIMAPClient
                 .append("INBOX", SMALL_MESSAGE));
diff --git 
a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java
 
b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java
index b56c28f904..8ead90f36a 100644
--- 
a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java
+++ 
b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java
@@ -27,6 +27,7 @@ import java.net.URISyntaxException;
 import java.util.Locale;
 import java.util.Optional;
 import java.util.Set;
+import java.util.function.Predicate;
 
 import jakarta.inject.Inject;
 
@@ -426,11 +427,11 @@ public class SMTPServer extends 
AbstractProtocolAsyncServer implements SMTPServe
     }
 
     @Override
-    public void disconnect(Username user) {
+    public void disconnect(Predicate<Username> user) {
         smtpChannelGroup.stream()
             .filter(channel -> {
                 if (channel.attr(SESSION_ATTRIBUTE_KEY).get() instanceof 
SMTPSession smtpSession) {
-                    return user.equals(smtpSession.getUsername());
+                    return user.test(smtpSession.getUsername());
                 }
                 return false;
             })
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 644ae1acc4..17b6197660 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
@@ -21,6 +21,7 @@ package org.apache.james.smtpserver.netty;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Predicate;
 
 import jakarta.inject.Inject;
 
@@ -74,7 +75,7 @@ public class SMTPServerFactory extends AbstractServerFactory 
implements Disconne
     }
 
     @Override
-    public void disconnect(Username username) {
+    public void disconnect(Predicate<Username> username) {
         getServers()
             .stream()
             .map(server -> (SMTPServer) server)
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 b21d58e481..9211ade17e 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
@@ -80,7 +80,14 @@ public class ProtocolServerRoutes implements Routes {
         });
 
         service.delete(SERVERS + "/users/:user", (request, response) -> {
-            disconnector.disconnect(Username.of(request.params("user")));
+            Username username = Username.of(request.params("user"));
+            disconnector.disconnect(username::equals);
+
+            return Responses.returnNoContent(response);
+        });
+
+        service.delete(SERVERS + "/users", (request, response) -> {
+            disconnector.disconnect(any -> true);
 
             return Responses.returnNoContent(response);
         });


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org
For additional commands, e-mail: notifications-h...@james.apache.org

Reply via email to