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