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


The following commit(s) were added to refs/heads/master by this push:
     new 8b17f1da28 JAMES-3775 RSpamD mailet should support rewrite subject 
(#1106)
8b17f1da28 is described below

commit 8b17f1da285cfce420476e7496c81f480b73745f
Author: Trần Hồng Quân <[email protected]>
AuthorDate: Tue Aug 16 09:43:40 2022 +0700

    JAMES-3775 RSpamD mailet should support rewrite subject (#1106)
---
 third-party/rspamd/pom.xml                         |   5 +
 .../org/apache/james/rspamd/RSpamDScanner.java     |  12 +++
 .../org/apache/james/rspamd/RSpamDScannerTest.java | 107 ++++++++++++++++++++-
 3 files changed, 121 insertions(+), 3 deletions(-)

diff --git a/third-party/rspamd/pom.xml b/third-party/rspamd/pom.xml
index 3b9faea8a5..70138a57f9 100644
--- a/third-party/rspamd/pom.xml
+++ b/third-party/rspamd/pom.xml
@@ -150,6 +150,11 @@
             <artifactId>mockito-core</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.testcontainers</groupId>
             <artifactId>testcontainers</artifactId>
diff --git 
a/third-party/rspamd/src/main/java/org/apache/james/rspamd/RSpamDScanner.java 
b/third-party/rspamd/src/main/java/org/apache/james/rspamd/RSpamDScanner.java
index 4f25e8f497..f21c89abd0 100644
--- 
a/third-party/rspamd/src/main/java/org/apache/james/rspamd/RSpamDScanner.java
+++ 
b/third-party/rspamd/src/main/java/org/apache/james/rspamd/RSpamDScanner.java
@@ -36,6 +36,7 @@ import org.apache.mailet.Mail;
 import org.apache.mailet.PerRecipientHeaders;
 import org.apache.mailet.base.GenericMailet;
 
+import com.github.fge.lambdas.Throwing;
 import com.google.common.collect.ImmutableList;
 
 public class RSpamDScanner extends GenericMailet {
@@ -43,18 +44,29 @@ public class RSpamDScanner extends GenericMailet {
     public static final AttributeName STATUS_MAIL = 
AttributeName.of("org.apache.james.rspamd.status");
 
     private final RSpamDHttpClient rSpamDHttpClient;
+    private boolean rewriteSubject;
 
     @Inject
     public RSpamDScanner(RSpamDHttpClient rSpamDHttpClient) {
         this.rSpamDHttpClient = rSpamDHttpClient;
     }
 
+    @Override
+    public void init() {
+        rewriteSubject = 
getBooleanParameter(getInitParameter("rewriteSubject"), false);
+    }
+
     @Override
     public void service(Mail mail) throws MessagingException {
         AnalysisResult rSpamDResult = rSpamDHttpClient.checkV2(new 
MimeMessageInputStream(mail.getMessage())).block();
 
         mail.getRecipients()
             .forEach(recipient -> appendRSpamDResultHeader(mail, recipient, 
rSpamDResult));
+
+        if (rewriteSubject) {
+            rSpamDResult.getDesiredRewriteSubject()
+                .ifPresent(Throwing.consumer(desiredRewriteSubject -> 
mail.getMessage().setSubject(desiredRewriteSubject)));
+        }
     }
 
     private void appendRSpamDResultHeader(Mail mail, MailAddress recipient, 
AnalysisResult rSpamDResult) {
diff --git 
a/third-party/rspamd/src/test/java/org/apache/james/rspamd/RSpamDScannerTest.java
 
b/third-party/rspamd/src/test/java/org/apache/james/rspamd/RSpamDScannerTest.java
index 3079a84116..31518c26c1 100644
--- 
a/third-party/rspamd/src/test/java/org/apache/james/rspamd/RSpamDScannerTest.java
+++ 
b/third-party/rspamd/src/test/java/org/apache/james/rspamd/RSpamDScannerTest.java
@@ -19,8 +19,11 @@
 
 package org.apache.james.rspamd;
 
-
+import static org.apache.james.rspamd.DockerRSpamD.PASSWORD;
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import java.util.Collection;
 import java.util.Optional;
@@ -31,10 +34,12 @@ import org.apache.james.core.MailAddress;
 import org.apache.james.core.builder.MimeMessageBuilder;
 import org.apache.james.rspamd.client.RSpamDClientConfiguration;
 import org.apache.james.rspamd.client.RSpamDHttpClient;
+import org.apache.james.rspamd.model.AnalysisResult;
 import org.apache.james.util.MimeMessageUtil;
 import org.apache.mailet.Mail;
 import org.apache.mailet.PerRecipientHeaders;
 import org.apache.mailet.base.test.FakeMail;
+import org.apache.mailet.base.test.FakeMailetConfig;
 import org.assertj.core.api.SoftAssertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -42,17 +47,20 @@ import org.junit.jupiter.api.extension.RegisterExtension;
 
 import com.google.common.collect.ImmutableList;
 
+import reactor.core.publisher.Mono;
+
 class RSpamDScannerTest {
 
     @RegisterExtension
     static DockerRSpamDExtension rSpamDExtension = new DockerRSpamDExtension();
-    static final String rSpamDPassword = "admin";
+    static final String INIT_SUBJECT = "initial subject";
+    static final String REWRITE_SUBJECT = "rewrite subject";
 
     private RSpamDScanner mailet;
 
     @BeforeEach
     void setup() {
-        RSpamDClientConfiguration configuration = new 
RSpamDClientConfiguration(rSpamDExtension.getBaseUrl(), rSpamDPassword, 
Optional.empty());
+        RSpamDClientConfiguration configuration = new 
RSpamDClientConfiguration(rSpamDExtension.getBaseUrl(), PASSWORD, 
Optional.empty());
         RSpamDHttpClient client = new RSpamDHttpClient(configuration);
         mailet = new RSpamDScanner(client);
     }
@@ -148,4 +156,97 @@ class RSpamDScannerTest {
 
         });
     }
+
+    @Test
+    void 
shouldRewriteSubjectWhenRewriteSubjectIsTrueAndAnalysisResultHasDesiredRewriteSubject()
 throws Exception {
+        RSpamDHttpClient rSpamDHttpClient = mock(RSpamDHttpClient.class);
+        
when(rSpamDHttpClient.checkV2(any())).thenReturn(Mono.just(AnalysisResult.builder()
+                .action(AnalysisResult.Action.REWRITE_SUBJECT)
+                .score(12.1F)
+                .requiredScore(14F)
+                .desiredRewriteSubject(REWRITE_SUBJECT)
+            .build()));
+
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+            .setProperty("rewriteSubject", "true")
+            .build();
+
+        mailet = new RSpamDScanner(rSpamDHttpClient);
+
+        Mail mail = FakeMail.builder()
+            .name("name")
+            .recipient("[email protected]")
+            .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+                .addToRecipient("[email protected]")
+                .addFrom("[email protected]")
+                .setSubject(INIT_SUBJECT)
+                .setText("Please!")
+                .build())
+            .build();
+
+        mailet.init(mailetConfig);
+        mailet.service(mail);
+
+        assertThat(mail.getMessage().getSubject()).isEqualTo(REWRITE_SUBJECT);
+    }
+
+    @Test
+    void 
shouldNotRewriteSubjectWhenRewriteSubjectIsFalseByDefaultAndAnalysisResultHasDesiredRewriteSubject()
 throws Exception {
+        RSpamDHttpClient rSpamDHttpClient = mock(RSpamDHttpClient.class);
+        
when(rSpamDHttpClient.checkV2(any())).thenReturn(Mono.just(AnalysisResult.builder()
+            .action(AnalysisResult.Action.REWRITE_SUBJECT)
+            .score(12.1F)
+            .requiredScore(14F)
+            .desiredRewriteSubject(REWRITE_SUBJECT)
+            .build()));
+
+        mailet = new RSpamDScanner(rSpamDHttpClient);
+
+        Mail mail = FakeMail.builder()
+            .name("name")
+            .recipient("[email protected]")
+            .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+                .addToRecipient("[email protected]")
+                .addFrom("[email protected]")
+                .setSubject(INIT_SUBJECT)
+                .setText("Please!")
+                .build())
+            .build();
+
+        mailet.service(mail);
+
+        assertThat(mail.getMessage().getSubject()).isEqualTo(INIT_SUBJECT);
+    }
+
+    @Test
+    void 
shouldNotRewriteSubjectWhenRewriteSubjectIsTrueAndAnalysisResultDoesNotHaveDesiredRewriteSubject()
 throws Exception {
+        RSpamDHttpClient rSpamDHttpClient = mock(RSpamDHttpClient.class);
+        
when(rSpamDHttpClient.checkV2(any())).thenReturn(Mono.just(AnalysisResult.builder()
+            .action(AnalysisResult.Action.NO_ACTION)
+            .score(0.99F)
+            .requiredScore(14F)
+            .build()));
+
+        FakeMailetConfig mailetConfig = FakeMailetConfig.builder()
+            .setProperty("rewriteSubject", "true")
+            .build();
+
+        mailet = new RSpamDScanner(rSpamDHttpClient);
+
+        Mail mail = FakeMail.builder()
+            .name("name")
+            .recipient("[email protected]")
+            .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+                .addToRecipient("[email protected]")
+                .addFrom("[email protected]")
+                .setSubject(INIT_SUBJECT)
+                .setText("Please!")
+                .build())
+            .build();
+
+        mailet.init(mailetConfig);
+        mailet.service(mail);
+
+        assertThat(mail.getMessage().getSubject()).isEqualTo(INIT_SUBJECT);
+    }
 }
\ No newline at end of file


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

Reply via email to