Arsnael commented on code in PR #1824:
URL: https://github.com/apache/james-project/pull/1824#discussion_r1442626214


##########
third-party/crowdsec/src/test/java/org/apache/james/CrowdsecIntegrationTest.java:
##########
@@ -87,5 +99,55 @@ void 
ipShouldBeBannedByCrowdSecWhenFailingToImapLoginThreeTimes(GuiceJamesServer
             .untilAsserted(() -> assertThatThrownBy(() -> 
testIMAPClient.connect("127.0.0.1", 
server.getProbe(ImapGuiceProbe.class).getImapPort()))
                 .isInstanceOf(EOFException.class)
                 .hasMessage("Connection closed without indication."));
+
+    }
+
+    @Test
+    void 
ipConnectViaProxyShouldBeBannedByCrowdSecWhenFailingToImapLoginThreeTimes(GuiceJamesServer
 server) throws IOException, InterruptedException {
+        // GIVEN an IP failed to log in 3 consecutive times in a short period
+        String CLIENT_IP = "127.0.0.1";
+        
haProxyExtension.getHaproxyContainer().execInContainer(createCommandHAProxyConfig(server));
+        clientConnection = SocketChannel.open();
+
+        clientConnection.connect(new 
InetSocketAddress(haProxyExtension.getHaproxyContainer().getHost(), 
haProxyExtension.getHaproxyContainer().getMappedPort(IMAPS_PORT)));
+        IntStream.range(0, 3)
+            .forEach(any -> {
+                try {
+                    clientConnection.write(ByteBuffer.wrap(String.format("a0 
LOGIN %s %s\r\n",
+                        "TCP4", CLIENT_IP, 
haProxyExtension.getHaproxyContainer().getHost(), 65535, 
haProxyExtension.getHaproxyContainer().getMappedPort(IMAPS_PORT),
+                        BOB, BAD_PASSWORD).getBytes(StandardCharsets.UTF_8)));
+                    assertThat(new String(readBytes(clientConnection), 
StandardCharsets.UTF_8))
+                        .doesNotStartWith("a0 OK");
+                } catch (IOException e) {
+                    throw new RuntimeException(e);
+                }});
+        clientConnection.finishConnect();
+        // THEN connection from the IP would be blocked. CrowdSec takes time 
to processing the ban decision therefore the await below.
+        CALMLY_AWAIT.atMost(Durations.TEN_SECONDS)
+            .untilAsserted(() -> assertThatThrownBy(() ->  
clientConnection.connect(new 
InetSocketAddress(haProxyExtension.getHaproxyContainer().getHost(), 
haProxyExtension.getHaproxyContainer().getMappedPort(IMAPS_PORT))))
+                .isInstanceOf(EOFException.class)
+                .hasMessage("Connection closed without indication."));
+
+    }
+

Review Comment:
   Can we have a test as well for proxy where like above you have an IP that 
attempts to login through the proxy 3 times with wrong creds. Then an other IP 
tries to login via the same proxy with right creds and it should succeed. Just 
to make sure the ip banned is the one from the client and not the proxy? :) 
Should be similar to test above with an extra step, easy enough :)



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to