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]