JAMES-2132 Reporting-UA field is optional, userAgentName is compulsory

https://tools.ietf.org/html/rfc8098#section-3.2.1 states:

   reporting-ua-field = "Reporting-UA" ":" OWS ua-name OWS
                        [ ";" OWS ua-product OWS ]

An MUA SHOULD send a "Reporting-UA" field unless specifically configured
not to do so.


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/860489c3
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/860489c3
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/860489c3

Branch: refs/heads/master
Commit: 860489c35265ab230ae5a32816110313110f9c14
Parents: 1376259
Author: benwa <btell...@linagora.com>
Authored: Mon Aug 28 17:01:56 2017 +0700
Committer: benwa <btell...@linagora.com>
Committed: Thu Aug 31 18:00:19 2017 +0700

----------------------------------------------------------------------
 .../java/org/apache/james/mdn/MDNReport.java    | 19 +++---
 .../james/mdn/fields/ReportingUserAgent.java    | 12 ++--
 .../org/apache/james/mdn/MDNFactoryTest.java    | 65 ++++++--------------
 .../transport/mailets/jsieve/RejectAction.java  |  2 +-
 4 files changed, 36 insertions(+), 62 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/860489c3/mdn/src/main/java/org/apache/james/mdn/MDNReport.java
----------------------------------------------------------------------
diff --git a/mdn/src/main/java/org/apache/james/mdn/MDNReport.java 
b/mdn/src/main/java/org/apache/james/mdn/MDNReport.java
index 966ad06..0b429da 100644
--- a/mdn/src/main/java/org/apache/james/mdn/MDNReport.java
+++ b/mdn/src/main/java/org/apache/james/mdn/MDNReport.java
@@ -69,12 +69,11 @@ public class MDNReport {
         }
 
         public MDNReport build() {
-            Preconditions.checkState(reportingUserAgentField.isPresent());
             Preconditions.checkState(finalRecipientField.isPresent());
             Preconditions.checkState(originalMessageIdField.isPresent());
             Preconditions.checkState(dispositionField.isPresent());
 
-            return new MDNReport(reportingUserAgentField.get(),
+            return new MDNReport(reportingUserAgentField,
                 originalRecipientField,
                 finalRecipientField.get(),
                 originalMessageIdField.get(),
@@ -89,13 +88,13 @@ public class MDNReport {
 
     public static final String LINE_END = "\r\n";
 
-    private final ReportingUserAgent reportingUserAgentField;
+    private final Optional<ReportingUserAgent> reportingUserAgentField;
     private final Optional<OriginalRecipient> originalRecipientField;
     private final FinalRecipient finalRecipientField;
     private final OriginalMessageId originalMessageIdField;
     private final Disposition dispositionField;
 
-    private MDNReport(ReportingUserAgent reportingUserAgentField, 
Optional<OriginalRecipient> originalRecipientField,
+    private MDNReport(Optional<ReportingUserAgent> reportingUserAgentField, 
Optional<OriginalRecipient> originalRecipientField,
                      FinalRecipient finalRecipientField, OriginalMessageId 
originalMessageIdField, Disposition dispositionField) {
         this.reportingUserAgentField = reportingUserAgentField;
         this.originalRecipientField = originalRecipientField;
@@ -104,7 +103,7 @@ public class MDNReport {
         this.dispositionField = dispositionField;
     }
 
-    public ReportingUserAgent getReportingUserAgentField() {
+    public Optional<ReportingUserAgent> getReportingUserAgentField() {
         return reportingUserAgentField;
     }
 
@@ -125,11 +124,11 @@ public class MDNReport {
     }
 
     public String formattedValue() {
-        return reportingUserAgentField.formattedValue() + LINE_END
-            + originalRecipientField.map(value -> value.formattedValue() + 
"\r\n").orElse("")
-            + finalRecipientField.formattedValue() + "\r\n"
-            + originalMessageIdField.formattedValue() + "\r\n"
-            + dispositionField.formattedValue() + "\r\n";
+        return reportingUserAgentField.map(value -> value.formattedValue() + 
LINE_END).orElse("")
+            + originalRecipientField.map(value -> value.formattedValue() + 
LINE_END).orElse("")
+            + finalRecipientField.formattedValue() + LINE_END
+            + originalMessageIdField.formattedValue() + LINE_END
+            + dispositionField.formattedValue() + LINE_END;
 
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/860489c3/mdn/src/main/java/org/apache/james/mdn/fields/ReportingUserAgent.java
----------------------------------------------------------------------
diff --git 
a/mdn/src/main/java/org/apache/james/mdn/fields/ReportingUserAgent.java 
b/mdn/src/main/java/org/apache/james/mdn/fields/ReportingUserAgent.java
index 0072434..9124061 100644
--- a/mdn/src/main/java/org/apache/james/mdn/fields/ReportingUserAgent.java
+++ b/mdn/src/main/java/org/apache/james/mdn/fields/ReportingUserAgent.java
@@ -21,16 +21,20 @@ package org.apache.james.mdn.fields;
 
 import java.util.Optional;
 
+import com.google.common.base.Preconditions;
+
 public class ReportingUserAgent implements Field {
-    private final Optional<String> userAgentName;
+    private final String userAgentName;
     private final Optional<String> userAgentProduct;
 
-    public ReportingUserAgent(Optional<String> userAgentName, Optional<String> 
userAgentProduct) {
+    public ReportingUserAgent(String userAgentName, Optional<String> 
userAgentProduct) {
+        Preconditions.checkNotNull(userAgentName);
+        Preconditions.checkNotNull(userAgentProduct);
         this.userAgentName = userAgentName;
         this.userAgentProduct = userAgentProduct;
     }
 
-    public Optional<String> getUserAgentName() {
+    public String getUserAgentName() {
         return userAgentName;
     }
 
@@ -40,7 +44,7 @@ public class ReportingUserAgent implements Field {
 
     @Override
     public String formattedValue() {
-        return "Reporting-UA: " + userAgentName.orElse("") + "; "
+        return "Reporting-UA: " + userAgentName + "; "
             + userAgentProduct.orElse("");
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/860489c3/mdn/src/test/java/org/apache/james/mdn/MDNFactoryTest.java
----------------------------------------------------------------------
diff --git a/mdn/src/test/java/org/apache/james/mdn/MDNFactoryTest.java 
b/mdn/src/test/java/org/apache/james/mdn/MDNFactoryTest.java
index 0837fdd..41d6c4a 100644
--- a/mdn/src/test/java/org/apache/james/mdn/MDNFactoryTest.java
+++ b/mdn/src/test/java/org/apache/james/mdn/MDNFactoryTest.java
@@ -53,7 +53,7 @@ public class MDNFactoryTest {
 
         String report = MDNReport.builder()
             .reportingUserAgentField(new ReportingUserAgent(
-                Optional.of("UA_name"),
+                "UA_name",
                 Optional.of("UA_product")))
             .finalRecipientField(new 
FinalRecipient(Optional.of("final_recipient")))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
@@ -82,7 +82,7 @@ public class MDNFactoryTest {
 
         String report = MDNReport.builder()
             .reportingUserAgentField(new ReportingUserAgent(
-                Optional.of("UA_name"),
+                "UA_name",
                 Optional.of("UA_product")))
             .finalRecipientField(new 
FinalRecipient(Optional.of("final_recipient")))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
@@ -111,7 +111,7 @@ public class MDNFactoryTest {
 
         String report = MDNReport.builder()
             .reportingUserAgentField(new ReportingUserAgent(
-                Optional.of("UA_name"),
+                "UA_name",
                 Optional.of("UA_product")))
             .finalRecipientField(new 
FinalRecipient(Optional.of("final_recipient")))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
@@ -140,7 +140,7 @@ public class MDNFactoryTest {
 
         String report = MDNReport.builder()
             .reportingUserAgentField(new ReportingUserAgent(
-                Optional.of("UA_name"),
+                "UA_name",
                 Optional.of("UA_product")))
             .finalRecipientField(new 
FinalRecipient(Optional.of("final_recipient")))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
@@ -169,7 +169,7 @@ public class MDNFactoryTest {
 
         String report = MDNReport.builder()
             .reportingUserAgentField(new ReportingUserAgent(
-                Optional.of("UA_name"),
+                "UA_name",
                 Optional.of("UA_product")))
             .finalRecipientField(new 
FinalRecipient(Optional.of("final_recipient")))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
@@ -198,7 +198,7 @@ public class MDNFactoryTest {
 
         String report = MDNReport.builder()
             .reportingUserAgentField(new ReportingUserAgent(
-                Optional.of("UA_name"),
+                "UA_name",
                 Optional.of("UA_product")))
             .finalRecipientField(new 
FinalRecipient(Optional.of("final_recipient")))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
@@ -227,7 +227,7 @@ public class MDNFactoryTest {
 
         String report = MDNReport.builder()
             .reportingUserAgentField(new ReportingUserAgent(
-                Optional.of("UA_name"),
+                "UA_name",
                 Optional.of("UA_product")))
             .finalRecipientField(new 
FinalRecipient(Optional.of("final_recipient")))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
@@ -256,7 +256,7 @@ public class MDNFactoryTest {
 
         String report = MDNReport.builder()
             .reportingUserAgentField(new ReportingUserAgent(
-                Optional.of("UA_name"),
+                "UA_name",
                 Optional.of("UA_product")))
             .finalRecipientField(new 
FinalRecipient(Optional.of("final_recipient")))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
@@ -284,7 +284,7 @@ public class MDNFactoryTest {
 
         String report = MDNReport.builder()
             .reportingUserAgentField(new ReportingUserAgent(
-                Optional.of("UA_name"),
+                "UA_name",
                 Optional.of("UA_product")))
             .finalRecipientField(new 
FinalRecipient(Optional.of("final_recipient")))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
@@ -311,7 +311,7 @@ public class MDNFactoryTest {
 
         String report = MDNReport.builder()
             .reportingUserAgentField(new ReportingUserAgent(
-                Optional.of("UA_name"),
+                "UA_name",
                 Optional.of("UA_product")))
             .finalRecipientField(new 
FinalRecipient(Optional.of("final_recipient")))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
@@ -337,7 +337,7 @@ public class MDNFactoryTest {
 
         String report = MDNReport.builder()
             .reportingUserAgentField(new ReportingUserAgent(
-                Optional.of("UA_name"),
+                "UA_name",
                 Optional.of("UA_product")))
             .finalRecipientField(new 
FinalRecipient(Optional.of("final_recipient")))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
@@ -365,7 +365,7 @@ public class MDNFactoryTest {
 
         String report = MDNReport.builder()
             .reportingUserAgentField(new ReportingUserAgent(
-                Optional.of("UA_name"),
+                "UA_name",
                 Optional.of("UA_product")))
             .finalRecipientField(new 
FinalRecipient(Optional.of("final_recipient")))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
@@ -393,7 +393,7 @@ public class MDNFactoryTest {
 
         String report = MDNReport.builder()
             .reportingUserAgentField(new ReportingUserAgent(
-                Optional.of("UA_name"),
+                "UA_name",
                 Optional.of("UA_product")))
             .finalRecipientField(new 
FinalRecipient(Optional.of("final_recipient")))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
@@ -411,35 +411,6 @@ public class MDNFactoryTest {
     }
 
     @Test
-    public void generateMDNReportShouldFormatNullUserAgentName() {
-        Disposition disposition = Disposition.builder()
-            .actionMode(DispositionActionMode.Manual)
-            .sendingMode(DispositionSendingMode.Automatic)
-            .type(DispositionType.Deleted)
-            .addModifier(DispositionModifier.Error)
-            .addModifier(DispositionModifier.Failed)
-            .build();
-
-        String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                Optional.empty(),
-                Optional.of("UA_product")))
-            .finalRecipientField(new 
FinalRecipient(Optional.of("final_recipient")))
-            .originalRecipientField(new OriginalRecipient("originalRecipient"))
-            .originalMessageIdField(new 
OriginalMessageId(Optional.of("original_message_id")))
-            .dispositionField(disposition)
-            .build()
-            .formattedValue();
-
-        assertThat(report)
-            .isEqualTo("Reporting-UA: ; UA_product\r\n" +
-                "Original-Recipient: rfc822; originalRecipient\r\n" +
-                "Final-Recepient: rfc822; final_recipient\r\n" +
-                "Original-Message-ID: original_message_id\r\n" +
-                "Disposition: 
manual-action/MDN-sent-automatically;deleted/error,failed\r\n");
-    }
-
-    @Test
     public void generateMDNReportShouldFormatNullUserAgentProduct() {
         Disposition disposition = Disposition.builder()
             .actionMode(DispositionActionMode.Manual)
@@ -451,7 +422,7 @@ public class MDNFactoryTest {
 
         String report = MDNReport.builder()
             .reportingUserAgentField(new ReportingUserAgent(
-                Optional.of("UA_name"),
+                "UA_name",
                 Optional.empty()))
             .finalRecipientField(new 
FinalRecipient(Optional.of("final_recipient")))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
@@ -480,7 +451,7 @@ public class MDNFactoryTest {
 
         String report = MDNReport.builder()
             .reportingUserAgentField(new ReportingUserAgent(
-                Optional.of("UA_name"),
+                "UA_name",
                 Optional.of("UA_product")))
             .finalRecipientField(new 
FinalRecipient(Optional.of("final_recipient")))
             .originalMessageIdField(new 
OriginalMessageId(Optional.of("original_message_id")))
@@ -507,7 +478,7 @@ public class MDNFactoryTest {
 
         String report = MDNReport.builder()
             .reportingUserAgentField(new ReportingUserAgent(
-                Optional.of("UA_name"),
+                "UA_name",
                 Optional.of("UA_product")))
             .finalRecipientField(new FinalRecipient(Optional.empty()))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
@@ -536,7 +507,7 @@ public class MDNFactoryTest {
 
         String report = MDNReport.builder()
             .reportingUserAgentField(new ReportingUserAgent(
-                Optional.of("UA_name"),
+                "UA_name",
                 Optional.of("UA_product")))
             .finalRecipientField(new 
FinalRecipient(Optional.of("final_recipient")))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
@@ -560,7 +531,7 @@ public class MDNFactoryTest {
 
         MDNReport.builder()
             .reportingUserAgentField(new ReportingUserAgent(
-                Optional.of("UA_name"),
+                "UA_name",
                 Optional.of("UA_product")))
             .finalRecipientField(new 
FinalRecipient(Optional.of("final_recipient")))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))

http://git-wip-us.apache.org/repos/asf/james-project/blob/860489c3/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RejectAction.java
----------------------------------------------------------------------
diff --git 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RejectAction.java
 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RejectAction.java
index 4f50e12..fb624bb 100644
--- 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RejectAction.java
+++ 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RejectAction.java
@@ -122,7 +122,7 @@ public class RejectAction implements MailAction {
             MDNReport.builder()
                 .reportingUserAgentField(
                     new ReportingUserAgent(
-                        Optional.ofNullable(reporting_UA_name),
+                        reporting_UA_name,
                         Optional.ofNullable(reporting_UA_product)))
                 .finalRecipientField(new 
FinalRecipient(Optional.of(final_recipient)))
                 
.originalRecipientField(Optional.ofNullable(original_recipient).map(OriginalRecipient::new))


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

Reply via email to