You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/05/10 03:27:06 UTC

[james-project] 05/07: JAMES-2743 Need HeaderCollection to use encoded(raw) value when parsing

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

commit 4b3d611e7c71af3ddc0ce790e5cfa070dc06ba33
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Fri Apr 26 18:54:47 2019 +0700

    JAMES-2743 Need HeaderCollection to use encoded(raw) value when parsing
---
 .../james/mailbox/elasticsearch/json/HeaderCollection.java  | 13 +++++++------
 .../mailbox/elasticsearch/json/HeaderCollectionTest.java    |  2 --
 .../jmap/methods/integration/GetMessageListMethodTest.java  | 10 +++++-----
 .../james/jmap/memory/MemoryGetMessageListMethodTest.java   |  7 +++++++
 4 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/HeaderCollection.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/HeaderCollection.java
index 4782f74..f007e69 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/HeaderCollection.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/HeaderCollection.java
@@ -71,12 +71,13 @@ public class HeaderCollection {
         public Builder add(Field field) {
             Preconditions.checkNotNull(field);
             String headerName = field.getName().toLowerCase(Locale.US);
-            String sanitizedValue = MimeUtil.unscrambleHeaderValue(field.getBody());
+            String rawHeaderValue = field.getBody();
+            String sanitizedValue = MimeUtil.unscrambleHeaderValue(rawHeaderValue);
 
             if (!headerName.contains(".")) {
                 headers.put(headerName, sanitizedValue);
             }
-            handleSpecificHeader(headerName, sanitizedValue);
+            handleSpecificHeader(headerName, sanitizedValue, rawHeaderValue);
             return this;
         }
 
@@ -92,14 +93,14 @@ public class HeaderCollection {
                 sentDate, messageID);
         }
 
-        private void handleSpecificHeader(String headerName, String headerValue) {
+        private void handleSpecificHeader(String headerName, String headerValue, String rawHeaderValue) {
             switch (headerName) {
                 case TO:
                 case FROM:
                 case CC:
                 case BCC:
                 case REPLY_TO:
-                    manageAddressField(headerName, headerValue);
+                    manageAddressField(headerName, rawHeaderValue);
                     break;
                 case SUBJECT:
                     subjectSet.add(headerValue);
@@ -113,9 +114,9 @@ public class HeaderCollection {
             }
         }
 
-        private void manageAddressField(String headerName, String headerValue) {
+        private void manageAddressField(String headerName, String rawHeaderValue) {
             LenientAddressParser.DEFAULT
-                .parseAddressList(headerValue)
+                .parseAddressList(rawHeaderValue)
                 .stream()
                 .flatMap(this::convertAddressToMailboxStream)
                 .map((mailbox) -> new EMailer(SearchUtil.getDisplayAddress(mailbox), mailbox.getAddress()))
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/HeaderCollectionTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/HeaderCollectionTest.java
index db73f08..647bdf8 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/HeaderCollectionTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/HeaderCollectionTest.java
@@ -25,7 +25,6 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import java.time.format.DateTimeFormatter;
 import java.util.stream.Stream;
 
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtensionContext;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -94,7 +93,6 @@ class HeaderCollectionTest {
             .containsOnly(new EMailer("Christophe Hamerling", "chri.hamerling@linagora.com"));
     }
 
-    @Disabled("JAMES-2743 HeaderCollection doesn't support Q encoding")
     @ParameterizedTest
     @ArgumentsSource(UTF8FromHeaderTestSource.class)
     void displayNamesShouldBeRetrievedWhenEncodedWord(String encodedFromHeader, String nameOfFromAddress) {
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
index ce45654..1ac3d65 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
@@ -213,7 +213,7 @@ public abstract class GetMessageListMethodTest {
 
     @Category(BasicFeature.class)
     @Test
-    public void searchByFromFieldDoesntSupportUTF8FromName() throws Exception {
+    public void searchByFromFieldShouldSupportUTF8FromName() throws Exception {
         String toUsername = "username1@" + DOMAIN;
         String password = "password";
         dataProbe.addUser(toUsername, password);
@@ -247,11 +247,11 @@ public abstract class GetMessageListMethodTest {
             .body()
             .path(ARGUMENTS + ".created." + messageCreationId + ".id");
 
-        calmlyAwait.atMost(Duration.TEN_SECONDS)
-            .until(() -> searchFirstMessageByFromField(fromAddress), Matchers.notNullValue());
+        String searchedMessageId = calmlyAwait.atMost(Duration.TEN_SECONDS)
+            .until(() -> searchFirstMessageByFromField(fromName), Matchers.notNullValue());
 
-        assertThat(searchFirstMessageByFromField(fromName))
-            .isNull();
+        assertThat(searchedMessageId)
+            .isEqualTo(messageId);
     }
 
     private String searchFirstMessageByFromField(String from) {
diff --git a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryGetMessageListMethodTest.java b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryGetMessageListMethodTest.java
index 5871e88..589b007 100644
--- a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryGetMessageListMethodTest.java
+++ b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryGetMessageListMethodTest.java
@@ -49,4 +49,11 @@ public class MemoryGetMessageListMethodTest extends GetMessageListMethodTest {
     @Test
     public void getMessageListShouldIncludeMessagesWhenTextFilterMatchesBodyWithStemming() {
     }
+
+    @Override
+    @Ignore("JAMES-2756 Memory James Server uses the SimpleMessageSearchIndex, " +
+        "it doesn't support to search on the encoded header value's names")
+    @Test
+    public void searchByFromFieldShouldSupportUTF8FromName() {
+    }
 }


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