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 9fcb8880812098f09e8e37131b06fb892a213000
Author: Quan Tran <hqt...@linagora.com>
AuthorDate: Wed Aug 23 15:33:05 2023 +0700

    JAMES-3936 Forward + Alias + Group + Address Mapping Routes should not 
decode URL path two times
    
    We already have Spark handle URL decoding once, no need one more time 
within MailAddressParser.
---
 .../james/webadmin/routes/MailAddressParser.java       | 15 +--------------
 .../webadmin/routes/AddressMappingRoutesTest.java      | 18 +++++++++++++++---
 .../apache/james/webadmin/routes/AliasRoutesTest.java  |  1 +
 .../james/webadmin/routes/ForwardRoutesTest.java       | 14 ++++++++++++++
 .../apache/james/webadmin/routes/GroupsRoutesTest.java |  1 +
 5 files changed, 32 insertions(+), 17 deletions(-)

diff --git 
a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/MailAddressParser.java
 
b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/MailAddressParser.java
index 0f7b03b41d..666cd1ab9a 100644
--- 
a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/MailAddressParser.java
+++ 
b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/MailAddressParser.java
@@ -19,10 +19,6 @@
 
 package org.apache.james.webadmin.routes;
 
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.nio.charset.StandardCharsets;
-
 import javax.mail.internet.AddressException;
 
 import org.apache.james.core.MailAddress;
@@ -37,8 +33,7 @@ class MailAddressParser {
 
     static MailAddress parseMailAddress(String address, String addressType) {
         try {
-            String decodedAddress = URLDecoder.decode(address, 
StandardCharsets.UTF_8.displayName());
-            return new MailAddress(decodedAddress);
+            return new MailAddress(address);
         } catch (AddressException e) {
             LOGGER.error("The {} {} is not an email address", addressType, 
address);
             throw ErrorResponder.builder()
@@ -47,14 +42,6 @@ class MailAddressParser {
                 .message("The %s is not an email address", addressType)
                 .cause(e)
                 .haltError();
-        } catch (UnsupportedEncodingException e) {
-            LOGGER.error("UTF-8 should be a valid encoding");
-            throw ErrorResponder.builder()
-                .statusCode(HttpStatus.INTERNAL_SERVER_ERROR_500)
-                .type(ErrorResponder.ErrorType.SERVER_ERROR)
-                .message("Internal server error - Something went bad on the 
server side.")
-                .cause(e)
-                .haltError();
         }
     }
 
diff --git 
a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AddressMappingRoutesTest.java
 
b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AddressMappingRoutesTest.java
index aac29ea4b3..f57d76a75c 100644
--- 
a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AddressMappingRoutesTest.java
+++ 
b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AddressMappingRoutesTest.java
@@ -46,9 +46,11 @@ import io.restassured.RestAssured;
 import io.restassured.http.ContentType;
 
 class AddressMappingRoutesTest {
-    private static String MAPPING_SOURCE = "sou...@domain.tld";
-    private static String ALICE_ADDRESS = "al...@domain.tld";
-    private static String BOB_ADDRESS = "b...@domain.tld";
+    private static final String MAPPING_SOURCE = "sou...@domain.tld";
+    private static final String ALICE_ADDRESS = "al...@domain.tld";
+    private static final String ALICE_WITH_SLASH = "alice/@domain.tld";
+    private static final String ALICE_WITH_ENCODED_SLASH = 
"alice...@domain.tld";
+    private static final String BOB_ADDRESS = "b...@domain.tld";
 
     private WebAdminServer webAdminServer;
     private MemoryRecipientRewriteTable recipientRewriteTable;
@@ -70,6 +72,7 @@ class AddressMappingRoutesTest {
 
         RestAssured.requestSpecification = 
WebAdminUtils.buildRequestSpecification(webAdminServer)
             .setBasePath(AddressMappingRoutes.BASE_PATH)
+            .setUrlEncodingEnabled(false) // no further automatically encoding 
by Rest Assured client
             .build();
     }
 
@@ -87,6 +90,15 @@ class AddressMappingRoutesTest {
             .containsAnyOf(Mapping.of(ALICE_ADDRESS));
     }
 
+    @Test
+    void addAddressMappingShouldSupportOneTimeEncodedAddress() {
+        when()
+            .post(MAPPING_SOURCE + "/targets/" + ALICE_WITH_ENCODED_SLASH);
+
+        
assertThat(recipientRewriteTable.getStoredMappings(MappingSource.parse(MAPPING_SOURCE)))
+            .containsAnyOf(Mapping.of(ALICE_WITH_SLASH));
+    }
+
     @Test
     void postShouldDetectLoops() {
         with()
diff --git 
a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AliasRoutesTest.java
 
b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AliasRoutesTest.java
index a46738a258..a5b35824ca 100644
--- 
a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AliasRoutesTest.java
+++ 
b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AliasRoutesTest.java
@@ -90,6 +90,7 @@ class AliasRoutesTest {
 
         RestAssured.requestSpecification = 
WebAdminUtils.buildRequestSpecification(webAdminServer)
             .setBasePath("address/aliases")
+            .setUrlEncodingEnabled(false) // no further automatically encoding 
by Rest Assured client
             .build();
     }
 
diff --git 
a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/ForwardRoutesTest.java
 
b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/ForwardRoutesTest.java
index 4816746395..663964bda3 100644
--- 
a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/ForwardRoutesTest.java
+++ 
b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/ForwardRoutesTest.java
@@ -88,6 +88,7 @@ class ForwardRoutesTest {
 
         RestAssured.requestSpecification = 
WebAdminUtils.buildRequestSpecification(webAdminServer)
             .setBasePath("address/forwards")
+            .setUrlEncodingEnabled(false) // no further automatically encoding 
by Rest Assured client
             .build();
     }
 
@@ -406,6 +407,19 @@ class ForwardRoutesTest {
                 .containsEntry("message", "Requested base forward address does 
not correspond to a user");
         }
 
+        @Test
+        void addForwardWithOneTimeUrlEncodedAddressShouldSucceed() {
+            with()
+                .put(ALICE + SEPARATOR + "targets" + SEPARATOR + 
URLEncoder.encode("alice+...@james.org", StandardCharsets.UTF_8));
+
+            when()
+                .get(ALICE)
+            .then()
+                .contentType(ContentType.JSON)
+                .statusCode(HttpStatus.OK_200)
+                .body("mailAddress", hasItems("alice+...@james.org"));
+        }
+
         @Test
         void getForwardShouldReturnMembersInAlphabeticOrder() {
             with()
diff --git 
a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
 
b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
index 3ee2edda48..9b9bbd8602 100644
--- 
a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
+++ 
b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
@@ -88,6 +88,7 @@ class GroupsRoutesTest {
 
         RestAssured.requestSpecification = 
WebAdminUtils.buildRequestSpecification(webAdminServer)
             .setBasePath("address/groups")
+            .setUrlEncodingEnabled(false) // no further automatically encoding 
by Rest Assured client
             .build();
     }
 


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

Reply via email to