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

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

commit ce2f0b716122dc49ae3e1f124b6a2ec5e949136d
Author: Benoit Tellier <btell...@linagora.com>
AuthorDate: Tue Jul 4 00:23:06 2023 +0700

    JAMES-3920 Switch tu synchronous SPF executor
---
 .../org/apache/james/transport/mailets/SPF.java    | 25 +++++++++++++++++++---
 .../apache/james/transport/mailets/SPFTest.java    | 14 ++++++------
 2 files changed, 29 insertions(+), 10 deletions(-)

diff --git 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SPF.java
 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SPF.java
index 1bda369912..d215a73591 100644
--- 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SPF.java
+++ 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SPF.java
@@ -27,8 +27,16 @@ import javax.mail.internet.MimeMessage;
 
 import org.apache.james.dnsservice.api.DNSService;
 import org.apache.james.dnsservice.library.netmatcher.NetMatcher;
+import org.apache.james.jspf.core.DNSServiceEnabled;
+import org.apache.james.jspf.core.MacroExpand;
+import org.apache.james.jspf.core.MacroExpandEnabled;
+import org.apache.james.jspf.core.SPFCheckEnabled;
 import org.apache.james.jspf.executor.SPFResult;
-import org.apache.james.jspf.impl.DefaultSPF;
+import org.apache.james.jspf.executor.SynchronousSPFExecutor;
+import org.apache.james.jspf.impl.DNSServiceXBillImpl;
+import org.apache.james.jspf.impl.DefaultTermsFactory;
+import org.apache.james.jspf.parser.RFC4408SPF1Parser;
+import org.apache.james.jspf.wiring.WiringServiceTable;
 import org.apache.mailet.Attribute;
 import org.apache.mailet.AttributeName;
 import org.apache.mailet.AttributeUtils;
@@ -95,9 +103,9 @@ public class SPF extends GenericMailet {
         addHeader = Boolean.parseBoolean(getInitParameter("checkLocalIps", 
"false"));
 
         if (spfDnsService == null) {
-            spf = new DefaultSPF();
+            createSPF(new DNSServiceXBillImpl());
         } else {
-            spf = new org.apache.james.jspf.impl.SPF(spfDnsService);
+            createSPF(spfDnsService);
         }
 
         Collection<String> ignoredNetworks = Splitter.on(',')
@@ -109,6 +117,17 @@ public class SPF extends GenericMailet {
         LOGGER.info("SPF addHeader={} debug={} ignoredNetworks={}", addHeader, 
debug, ignoredNetworks);
     }
 
+    private void createSPF(org.apache.james.jspf.core.DNSService dnsProbe) {
+        WiringServiceTable wiringService = new WiringServiceTable();
+        wiringService.put(DNSServiceEnabled.class, dnsProbe);
+        MacroExpand macroExpand = new MacroExpand(dnsProbe);
+        wiringService.put(MacroExpandEnabled.class, macroExpand);
+        RFC4408SPF1Parser parser = new RFC4408SPF1Parser(new 
DefaultTermsFactory(wiringService));
+        SynchronousSPFExecutor executor = new SynchronousSPFExecutor(dnsProbe);
+        spf = new org.apache.james.jspf.impl.SPF(dnsProbe, parser, 
macroExpand,executor );
+        wiringService.put(SPFCheckEnabled.class, spf);
+    }
+
     @Override
     public void service(Mail mail) throws MessagingException {
         String remoteAddr = mail.getRemoteAddr();
diff --git 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SPFTest.java
 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SPFTest.java
index c7e378d731..688ac35187 100644
--- 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SPFTest.java
+++ 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SPFTest.java
@@ -60,7 +60,7 @@ public class SPFTest {
     @BeforeAll
     public static void setupMockedSPFDNSService() throws TimeoutException {
         mockedSPFDNSService = 
mock(org.apache.james.jspf.core.DNSService.class);
-        when(mockedSPFDNSService.getRecordsAsync(any(DNSRequest.class)))
+        when(mockedSPFDNSService.getRecords(any(DNSRequest.class)))
             .thenAnswer(invocation -> {
                 DNSRequest req = invocation.getArgument(0);
                 switch (req.getRecordType()) {
@@ -69,26 +69,26 @@ public class SPFTest {
                         List<String> l = new ArrayList<>();
                         switch (req.getHostname()) {
                             case "some.host.local":
-                                return CompletableFuture.completedFuture(l);
+                                return l;
                             case "spf1.james.apache.org":
                                 // pass
                                 l.add("v=spf1 +all");
-                                return CompletableFuture.completedFuture(l);
+                                return l;
                             case "spf2.james.apache.org":
                                 // fail
                                 l.add("v=spf1 -all");
-                                return CompletableFuture.completedFuture(l);
+                                return l;
                             case "spf3.james.apache.org":
                                 // softfail
                                 l.add("v=spf1 ~all");
-                                return CompletableFuture.completedFuture(l);
+                                return l;
                             case "spf4.james.apache.org":
                                 // permerror
                                 l.add("v=spf1 badcontent!");
-                                return CompletableFuture.completedFuture(l);
+                                return l;
                             case "spf5.james.apache.org":
                                 // temperror
-                                return CompletableFuture.failedFuture(new 
TimeoutException("TIMEOUT"));
+                                 throw new TimeoutException("TIMEOUT");
                             default:
                                 throw new RuntimeException("Unknown record " + 
req.getHostname());
                         }


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

Reply via email to