You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2023/08/26 05:51:35 UTC

[james-project] branch master updated (4d7aae72b4 -> 7280c36399)

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

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


    from 4d7aae72b4 JAMES-3925 Rework JMAP upload APIs
     new 9fcb888081 JAMES-3936 Forward + Alias + Group + Address Mapping Routes should not decode URL path two times
     new 7df0dd0168 JAMES-3936 MailRepositoriesRoutes should not decode request param 2 times
     new cbc2313e26 JAMES-3936 DomainsRoutes should not decode request param 2 times
     new 0f9adc382f JAMES-3936 RegexMappingRoutes should not decode request param 2 times
     new f5ac5279c4 JAMES-3936 UserQuotaRoutes should not decode URL path two times
     new ed3fb56ce2 JAMES-3936 Better notating ticket number in tests
     new 7280c36399 JAMES-3936 Fix some failing tests

The 7 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../mailets/ToRepositoryIntegrationTest.java       |  1 +
 ...rTaskSerializationIntegrationImmutableTest.java |  1 +
 ...dminServerTaskSerializationIntegrationTest.java |  1 +
 .../org/apache/james/webadmin/WebAdminUtils.java   |  3 ++-
 .../james/webadmin/routes/DomainsRoutes.java       | 21 ++--------------
 .../james/webadmin/routes/MailAddressParser.java   | 15 +----------
 .../james/webadmin/routes/RegexMappingRoutes.java  |  7 ++----
 .../webadmin/routes/AddressMappingRoutesTest.java  | 18 +++++++++++---
 .../james/webadmin/routes/AliasRoutesTest.java     |  1 +
 .../james/webadmin/routes/DomainsRoutesTest.java   | 21 ++--------------
 .../james/webadmin/routes/ForwardRoutesTest.java   | 14 +++++++++++
 .../james/webadmin/routes/GroupsRoutesTest.java    |  1 +
 .../webadmin/routes/RegexMappingRoutesTest.java    | 26 ++++++++++++++++---
 .../webadmin/routes/SieveScriptRoutesTest.java     |  5 ++--
 .../james/webadmin/routes/UserRoutesTest.java      | 29 +++++++++++-----------
 .../james/webadmin/routes/UserQuotaRoutes.java     | 10 ++------
 .../webadmin/routes/UserMailboxesRoutesTest.java   | 16 ++++++------
 .../james/webadmin/routes/UserQuotaRoutesTest.java |  3 ++-
 .../webadmin/routes/MailRepositoriesRoutes.java    | 27 ++++++++++----------
 19 files changed, 109 insertions(+), 111 deletions(-)


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


[james-project] 07/07: JAMES-3936 Fix some failing tests

Posted by bt...@apache.org.
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 7280c3639900d0e0ce5eb395ee7c1e7f29fa97d0
Author: Quan Tran <hq...@linagora.com>
AuthorDate: Thu Aug 24 11:25:38 2023 +0700

    JAMES-3936 Fix some failing tests
    
    Rest assured client no longer encodes now, we need to encode ourselves some special characters.
---
 .../mailets/ToRepositoryIntegrationTest.java       |  1 +
 ...rTaskSerializationIntegrationImmutableTest.java |  1 +
 ...dminServerTaskSerializationIntegrationTest.java |  1 +
 .../org/apache/james/webadmin/WebAdminUtils.java   |  3 ++-
 .../webadmin/routes/SieveScriptRoutesTest.java     |  5 ++--
 .../james/webadmin/routes/UserRoutesTest.java      | 29 +++++++++++-----------
 .../webadmin/routes/UserMailboxesRoutesTest.java   | 16 ++++++------
 7 files changed, 32 insertions(+), 24 deletions(-)

diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToRepositoryIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToRepositoryIntegrationTest.java
index a7653f1286..2411ef085b 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToRepositoryIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToRepositoryIntegrationTest.java
@@ -88,6 +88,7 @@ class ToRepositoryIntegrationTest {
         webAdminAPI = WebAdminUtils.buildRequestSpecification(
             jamesServer.getProbe(WebAdminGuiceProbe.class)
                 .getWebAdminPort())
+            .setUrlEncodingEnabled(false) // no further automatically encoding by Rest Assured client. rf: https://issues.apache.org/jira/projects/JAMES/issues/JAMES-3936
             .build();
     }
 
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationImmutableTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationImmutableTest.java
index dbcdaa1f64..ad1e468e52 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationImmutableTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationImmutableTest.java
@@ -95,6 +95,7 @@ class RabbitMQWebAdminServerTaskSerializationIntegrationImmutableTest {
         WebAdminGuiceProbe webAdminGuiceProbe = guiceJamesServer.getProbe(WebAdminGuiceProbe.class);
 
         RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecification(webAdminGuiceProbe.getWebAdminPort())
+            .setUrlEncodingEnabled(false) // no further automatically encoding by Rest Assured client. rf: https://issues.apache.org/jira/projects/JAMES/issues/JAMES-3936
             .build();
         RestAssured.enableLoggingOfRequestAndResponseIfValidationFails();
     }
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java
index e54a15d3da..5bc4b26532 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java
@@ -130,6 +130,7 @@ class RabbitMQWebAdminServerTaskSerializationIntegrationTest {
         mailboxProbe = guiceJamesServer.getProbe(MailboxProbeImpl.class);
 
         RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecification(webAdminGuiceProbe.getWebAdminPort())
+            .setUrlEncodingEnabled(false) // no further automatically encoding by Rest Assured client. rf: https://issues.apache.org/jira/projects/JAMES/issues/JAMES-3936
             .build();
         RestAssured.enableLoggingOfRequestAndResponseIfValidationFails();
     }
diff --git a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
index b36f4ff02d..166c2e760e 100644
--- a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
+++ b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
@@ -111,6 +111,7 @@ public class WebAdminUtils {
     }
 
     public static RequestSpecification spec(Port port) {
-        return given().spec(buildRequestSpecification(port).build());
+        return given().spec(buildRequestSpecification(port).build())
+            .urlEncodingEnabled(false); // no further automatically encoding by Rest Assured client. rf: https://issues.apache.org/jira/projects/JAMES/issues/JAMES-3936
     }
 }
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/SieveScriptRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/SieveScriptRoutesTest.java
index f103643d0b..4ca68e9418 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/SieveScriptRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/SieveScriptRoutesTest.java
@@ -93,6 +93,7 @@ class SieveScriptRoutesTest {
 
         RestAssured.requestSpecification = WebAdminUtils
             .buildRequestSpecification(webAdminServer)
+            .setUrlEncodingEnabled(false) // no further automatically encoding by Rest Assured client. rf: https://issues.apache.org/jira/projects/JAMES/issues/JAMES-3936
             .build();
     }
 
@@ -123,7 +124,7 @@ class SieveScriptRoutesTest {
             "}";
         String body = given()
             .pathParam("userName", "userA")
-            .pathParam("scriptName", " ")
+            .pathParam("scriptName", "%20")
             .body(sieveContent)
         .when()
             .put("sieve/{userName}/scripts/{scriptName}")
@@ -144,7 +145,7 @@ class SieveScriptRoutesTest {
             " \"details\":null" +
             "}";
         String body = given()
-            .pathParam("userName", " ")
+            .pathParam("userName", "%20")
             .pathParam("scriptName", "scriptA")
             .body(sieveContent)
         .when()
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UserRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UserRoutesTest.java
index ff66fd14db..0f5edfd3da 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UserRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UserRoutesTest.java
@@ -31,6 +31,7 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
+import java.net.URLEncoder;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Stream;
@@ -176,6 +177,7 @@ class UserRoutesTest {
 
             RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecification(server)
                 .setBasePath(UserRoutes.USERS)
+                .setUrlEncodingEnabled(false) // no further automatically encoding by Rest Assured client. rf: https://issues.apache.org/jira/projects/JAMES/issues/JAMES-3936
                 .build();
 
             return server;
@@ -607,20 +609,19 @@ class UserRoutesTest {
 
             default Stream<Arguments> illegalCharacters() {
                 return Stream.of(
-                    Arguments.of("\""),
-                    Arguments.of("("),
-                    Arguments.of(")"),
-                    Arguments.of(","),
-                    Arguments.of(":"),
-                    Arguments.of(";"),
-                    Arguments.of("<"),
-                    Arguments.of(">"),
-                    Arguments.of("@"),
-                    Arguments.of("["),
-                    Arguments.of("\\"),
-                    Arguments.of("]"),
-                    Arguments.of(" ")
-                );
+                    Arguments.of(URLEncoder.encode("\"")),
+                    Arguments.of(URLEncoder.encode("(")),
+                    Arguments.of(URLEncoder.encode(")")),
+                    Arguments.of(URLEncoder.encode(",")),
+                    Arguments.of(URLEncoder.encode(":")),
+                    Arguments.of(URLEncoder.encode(";")),
+                    Arguments.of(URLEncoder.encode("<")),
+                    Arguments.of(URLEncoder.encode(">")),
+                    Arguments.of(URLEncoder.encode("@")),
+                    Arguments.of(URLEncoder.encode("[")),
+                    Arguments.of(URLEncoder.encode("\\")),
+                    Arguments.of(URLEncoder.encode("]")),
+                    Arguments.of("%20"));
             }
 
             @ParameterizedTest
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
index bcfd26095d..6640703eb8 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
@@ -45,6 +45,7 @@ import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
+import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.time.ZoneId;
 import java.time.ZonedDateTime;
@@ -182,6 +183,7 @@ class UserMailboxesRoutesTest {
 
         RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecification(webAdminServer)
             .setBasePath(USERS_BASE + SEPARATOR + USERNAME.asString() + SEPARATOR + UserMailboxesRoutes.MAILBOXES)
+            .setUrlEncodingEnabled(false) // no further automatically encoding by Rest Assured client. rf: https://issues.apache.org/jira/projects/JAMES/issues/JAMES-3936
             .build();
     }
 
@@ -331,7 +333,7 @@ class UserMailboxesRoutesTest {
             when(usersRepository.contains(USERNAME)).thenReturn(true);
 
             Map<String, Object> errors = when()
-                .put(INVALID_MAILBOX_NAME)
+                .put(URLEncoder.encode(INVALID_MAILBOX_NAME))
             .then()
                 .statusCode(BAD_REQUEST_400)
                 .contentType(JSON)
@@ -450,7 +452,7 @@ class UserMailboxesRoutesTest {
         @Test
         void getShouldReturnUserErrorWithInvalidPercentMailboxName() throws Exception {
             Map<String, Object> errors = when()
-                .get(MAILBOX_NAME + "%")
+                .get(URLEncoder.encode(MAILBOX_NAME + "%"))
             .then()
                 .statusCode(BAD_REQUEST_400)
                 .contentType(JSON)
@@ -469,7 +471,7 @@ class UserMailboxesRoutesTest {
         @Test
         void putShouldReturnUserErrorWithInvalidPercentMailboxName() throws Exception {
             Map<String, Object> errors = when()
-                .put(MAILBOX_NAME + "%")
+                .put(URLEncoder.encode(MAILBOX_NAME + "%"))
             .then()
                 .statusCode(BAD_REQUEST_400)
                 .contentType(JSON)
@@ -487,7 +489,7 @@ class UserMailboxesRoutesTest {
         @Test
         void deleteShouldReturnUserErrorWithInvalidPercentMailboxName() throws Exception {
             Map<String, Object> errors = when()
-                .put(MAILBOX_NAME + "%")
+                .put(URLEncoder.encode(MAILBOX_NAME + "%"))
             .then()
                 .statusCode(BAD_REQUEST_400)
                 .contentType(JSON)
@@ -505,7 +507,7 @@ class UserMailboxesRoutesTest {
         @Test
         void getShouldReturnUserErrorWithInvalidSharpMailboxName() throws Exception {
             Map<String, Object> errors = when()
-                .get("#" + MAILBOX_NAME)
+                .get(URLEncoder.encode("#" + MAILBOX_NAME))
             .then()
                 .statusCode(BAD_REQUEST_400)
                 .contentType(JSON)
@@ -535,7 +537,7 @@ class UserMailboxesRoutesTest {
         @Test
         void putShouldReturnUserErrorWithInvalidSharpMailboxName() throws Exception {
             Map<String, Object> errors = when()
-                .put("#" + MAILBOX_NAME)
+                .put(URLEncoder.encode("#" + MAILBOX_NAME))
             .then()
                 .statusCode(BAD_REQUEST_400)
                 .contentType(JSON)
@@ -561,7 +563,7 @@ class UserMailboxesRoutesTest {
         @Test
         void deleteShouldReturnUserErrorWithInvalidSharpMailboxName() throws Exception {
             Map<String, Object> errors = when()
-                .put("#" + MAILBOX_NAME)
+                .put(URLEncoder.encode("#" + MAILBOX_NAME))
             .then()
                 .statusCode(BAD_REQUEST_400)
                 .contentType(JSON)


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


[james-project] 01/07: JAMES-3936 Forward + Alias + Group + Address Mapping Routes should not decode URL path two times

Posted by bt...@apache.org.
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 <hq...@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 = "source@domain.tld";
-    private static String ALICE_ADDRESS = "alice@domain.tld";
-    private static String BOB_ADDRESS = "bob@domain.tld";
+    private static final String MAPPING_SOURCE = "source@domain.tld";
+    private static final String ALICE_ADDRESS = "alice@domain.tld";
+    private static final String ALICE_WITH_SLASH = "alice/@domain.tld";
+    private static final String ALICE_WITH_ENCODED_SLASH = "alice%2F@domain.tld";
+    private static final String BOB_ADDRESS = "bob@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+tag@james.org", StandardCharsets.UTF_8));
+
+            when()
+                .get(ALICE)
+            .then()
+                .contentType(ContentType.JSON)
+                .statusCode(HttpStatus.OK_200)
+                .body("mailAddress", hasItems("alice+tag@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-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org


[james-project] 03/07: JAMES-3936 DomainsRoutes should not decode request param 2 times

Posted by bt...@apache.org.
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 cbc2313e26aa99cf73f2c6514f982ad4dc8df13a
Author: Quan Tran <hq...@linagora.com>
AuthorDate: Wed Aug 23 16:40:22 2023 +0700

    JAMES-3936 DomainsRoutes should not decode request param 2 times
---
 .../apache/james/webadmin/routes/DomainsRoutes.java | 21 ++-------------------
 .../james/webadmin/routes/DomainsRoutesTest.java    | 21 ++-------------------
 2 files changed, 4 insertions(+), 38 deletions(-)

diff --git a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DomainsRoutes.java b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DomainsRoutes.java
index 34ef2f9ab9..cba41954db 100644
--- a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DomainsRoutes.java
+++ b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DomainsRoutes.java
@@ -21,9 +21,6 @@ package org.apache.james.webadmin.routes;
 
 import static org.apache.james.webadmin.Constants.SEPARATOR;
 
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.nio.charset.StandardCharsets;
 import java.util.stream.Collectors;
 
 import javax.inject.Inject;
@@ -203,27 +200,13 @@ public class DomainsRoutes implements Routes {
     }
 
     private Domain checkValidDomain(String domainName) {
-        String urlDecodedDomainName = urlDecodeDomain(domainName);
         try {
-            return Domain.of(urlDecodedDomainName);
+            return Domain.of(domainName);
         } catch (IllegalArgumentException e) {
             throw ErrorResponder.builder()
                 .statusCode(HttpStatus.BAD_REQUEST_400)
                 .type(ErrorType.INVALID_ARGUMENT)
-                .message("Invalid request for domain creation %s", urlDecodedDomainName)
-                .cause(e)
-                .haltError();
-        }
-    }
-
-    private String urlDecodeDomain(String domainName) {
-        try {
-            return URLDecoder.decode(domainName, StandardCharsets.UTF_8.toString());
-        } catch (IllegalArgumentException | UnsupportedEncodingException e) {
-            throw ErrorResponder.builder()
-                .statusCode(HttpStatus.BAD_REQUEST_400)
-                .type(ErrorType.INVALID_ARGUMENT)
-                .message("Invalid request for domain creation %s unable to url decode some characters", domainName)
+                .message("Invalid request for domain creation %s", domainName)
                 .cause(e)
                 .haltError();
         }
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
index 82b88af391..7a61cc1a48 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
@@ -117,6 +117,7 @@ class DomainsRoutesTest {
 
         RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecification(webAdminServer)
             .setBasePath(DomainsRoutes.DOMAINS)
+            .setUrlEncodingEnabled(false) // no further automatically encoding by Rest Assured client
             .build();
     }
 
@@ -332,7 +333,7 @@ class DomainsRoutesTest {
         }
 
         @Test
-        void putShouldReturnUserErrorWhenNameContainsUrlEncodedUrlOperator() {
+        void putWithDomainNameContainsSlashEncodedShouldDecodeAndReturnError() {
             Map<String, Object> errors = when()
                 .put(DOMAIN + "%2F" + DOMAIN)
             .then()
@@ -349,24 +350,6 @@ class DomainsRoutesTest {
                 .containsEntry("message", "Invalid request for domain creation domain/domain");
         }
 
-        @Test
-        void putShouldReturnUserErrorWhenNameContainsInvalidUrlEncodedCharacters() {
-            Map<String, Object> errors = when()
-                .put(DOMAIN + "%GG" + DOMAIN)
-            .then()
-                .statusCode(HttpStatus.BAD_REQUEST_400)
-                .contentType(ContentType.JSON)
-                .extract()
-                .body()
-                .jsonPath()
-                .getMap(".");
-
-            assertThat(errors)
-                .containsEntry("statusCode", HttpStatus.BAD_REQUEST_400)
-                .containsEntry("type", "InvalidArgument")
-                .containsEntry("message", "Invalid request for domain creation domain%GGdomain unable to url decode some characters");
-        }
-
         @Test
         void putShouldReturnUserErrorWhenNameContainsUrlSeparator() {
             when()


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


[james-project] 04/07: JAMES-3936 RegexMappingRoutes should not decode request param 2 times

Posted by bt...@apache.org.
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 0f9adc382f8f21a4fb488d2bcc8b801028efa2cd
Author: Quan Tran <hq...@linagora.com>
AuthorDate: Wed Aug 23 17:03:53 2023 +0700

    JAMES-3936 RegexMappingRoutes should not decode request param 2 times
    
    Once has been handled by Spark.
---
 .../james/webadmin/routes/RegexMappingRoutes.java  |  7 ++----
 .../webadmin/routes/RegexMappingRoutesTest.java    | 26 ++++++++++++++++++----
 2 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/RegexMappingRoutes.java b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/RegexMappingRoutes.java
index 1df59788ad..aac6f6d308 100644
--- a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/RegexMappingRoutes.java
+++ b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/RegexMappingRoutes.java
@@ -22,9 +22,6 @@ package org.apache.james.webadmin.routes;
 import static org.apache.james.webadmin.Constants.SEPARATOR;
 import static spark.Spark.halt;
 
-import java.net.URLDecoder;
-import java.nio.charset.StandardCharsets;
-
 import javax.inject.Inject;
 
 import org.apache.james.core.Username;
@@ -75,7 +72,7 @@ public class RegexMappingRoutes implements Routes {
     private HaltException addRegexMapping(Request request, Response response) throws Exception {
         try {
             MappingSource mappingSource = extractMappingSource(request);
-            String regex = URLDecoder.decode(request.params(REGEX_PARAM), StandardCharsets.UTF_8.toString());
+            String regex = request.params(REGEX_PARAM);
             recipientRewriteTable.addRegexMapping(mappingSource, regex);
         } catch (InvalidRegexException e) {
             throw ErrorResponder.builder()
@@ -90,7 +87,7 @@ public class RegexMappingRoutes implements Routes {
     private HaltException removeRegexMapping(Request request, Response response) throws Exception {
         try {
             MappingSource mappingSource = MappingSource.parse(request.params(MAPPING_SOURCE_PARAM));
-            String regex = URLDecoder.decode(request.params(REGEX_PARAM), StandardCharsets.UTF_8.toString());
+            String regex = request.params(REGEX_PARAM);
             recipientRewriteTable.removeRegexMapping(mappingSource, regex);
         } catch (RecipientRewriteTableException e) {
             throw ErrorResponder.builder()
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/RegexMappingRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/RegexMappingRoutesTest.java
index b1abf71dc4..dd4c8d8293 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/RegexMappingRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/RegexMappingRoutesTest.java
@@ -24,10 +24,11 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.hamcrest.core.Is.is;
 import static org.mockito.Mockito.mock;
 
+import java.net.URLEncoder;
+
 import org.apache.james.core.Domain;
 import org.apache.james.core.Username;
 import org.apache.james.dnsservice.api.DNSService;
-import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.domainlist.lib.DomainListConfiguration;
 import org.apache.james.domainlist.memory.MemoryDomainList;
 import org.apache.james.rrt.lib.Mapping;
@@ -41,7 +42,6 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import io.restassured.RestAssured;
-import io.restassured.filter.log.LogDetail;
 import io.restassured.http.ContentType;
 
 class RegexMappingRoutesTest {
@@ -63,6 +63,7 @@ class RegexMappingRoutesTest {
 
         RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecification(webAdminServer)
             .setBasePath(RegexMappingRoutes.BASE_PATH)
+            .setUrlEncodingEnabled(false) // no further automatically encoding by Rest Assured client
             .build();
     }
 
@@ -136,7 +137,7 @@ class RegexMappingRoutesTest {
     @Test
     void addRegexMappingShouldReturnBadRequestWhenRegexIsInvalid() {
         with()
-            .post("james@domain.tld/targets/O.*[]")
+            .post("james@domain.tld/targets/"+ URLEncoder.encode("O.*[]"))
         .then()
             .statusCode(HttpStatus.BAD_REQUEST_400)
             .contentType(ContentType.JSON)
@@ -148,7 +149,7 @@ class RegexMappingRoutesTest {
     @Test
     void addRegexMappingShouldReturnNoContentWhenRegexContainsQuestionMark() {
         with()
-            .post("james@domain.tld/targets/^[aei%3Fou].*james@domain.tld")
+            .post("james@domain.tld/targets/" + URLEncoder.encode("^[aei?ou].*james@domain.tld"))
         .then()
             .statusCode(HttpStatus.NO_CONTENT_204)
             .contentType(ContentType.JSON);
@@ -158,6 +159,23 @@ class RegexMappingRoutesTest {
             .containsOnly(Mapping.regex("^[aei?ou].*james@domain.tld"));
     }
 
+    @Test
+    void addRegexMappingShouldJustDecodeOneTime() {
+        String originalRegex = "^[aei?ou].*james@domain.tld";
+        String onceEncodedRegex = URLEncoder.encode(originalRegex);
+        String twiceEncodedRegex = URLEncoder.encode(onceEncodedRegex);
+
+        with()
+            .post("james@domain.tld/targets/" + twiceEncodedRegex)
+        .then()
+            .statusCode(HttpStatus.NO_CONTENT_204)
+            .contentType(ContentType.JSON);
+
+        assertThat(memoryRecipientRewriteTable
+            .getStoredMappings(MappingSource.fromUser(Username.of("james@domain.tld"))))
+            .containsOnly(Mapping.regex(onceEncodedRegex));
+    }
+
     @Test
     void removeRegexMappingShouldReturnNoContentWhenSuccess() throws Exception {
         MappingSource mappingSource = MappingSource.fromUser(Username.of("abc@domain.tld"));


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


[james-project] 06/07: JAMES-3936 Better notating ticket number in tests

Posted by bt...@apache.org.
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 ed3fb56ce2e9bc32c4424663d50c2e38e78464e1
Author: Quan Tran <hq...@linagora.com>
AuthorDate: Wed Aug 23 17:38:25 2023 +0700

    JAMES-3936 Better notating ticket number in tests
---
 .../java/org/apache/james/webadmin/routes/AddressMappingRoutesTest.java | 2 +-
 .../src/test/java/org/apache/james/webadmin/routes/AliasRoutesTest.java | 2 +-
 .../test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java   | 2 +-
 .../test/java/org/apache/james/webadmin/routes/ForwardRoutesTest.java   | 2 +-
 .../test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java    | 2 +-
 .../java/org/apache/james/webadmin/routes/RegexMappingRoutesTest.java   | 2 +-
 6 files changed, 6 insertions(+), 6 deletions(-)

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 f57d76a75c..215081d27d 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
@@ -72,7 +72,7 @@ class AddressMappingRoutesTest {
 
         RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecification(webAdminServer)
             .setBasePath(AddressMappingRoutes.BASE_PATH)
-            .setUrlEncodingEnabled(false) // no further automatically encoding by Rest Assured client
+            .setUrlEncodingEnabled(false) // no further automatically encoding by Rest Assured client. rf: https://issues.apache.org/jira/projects/JAMES/issues/JAMES-3936
             .build();
     }
 
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 a5b35824ca..9d0d9e32ae 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,7 +90,7 @@ class AliasRoutesTest {
 
         RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecification(webAdminServer)
             .setBasePath("address/aliases")
-            .setUrlEncodingEnabled(false) // no further automatically encoding by Rest Assured client
+            .setUrlEncodingEnabled(false) // no further automatically encoding by Rest Assured client. rf: https://issues.apache.org/jira/projects/JAMES/issues/JAMES-3936
             .build();
     }
 
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
index 7a61cc1a48..9804973478 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
@@ -117,7 +117,7 @@ class DomainsRoutesTest {
 
         RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecification(webAdminServer)
             .setBasePath(DomainsRoutes.DOMAINS)
-            .setUrlEncodingEnabled(false) // no further automatically encoding by Rest Assured client
+            .setUrlEncodingEnabled(false) // no further automatically encoding by Rest Assured client. rf: https://issues.apache.org/jira/projects/JAMES/issues/JAMES-3936
             .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 663964bda3..317997dfb0 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,7 +88,7 @@ class ForwardRoutesTest {
 
         RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecification(webAdminServer)
             .setBasePath("address/forwards")
-            .setUrlEncodingEnabled(false) // no further automatically encoding by Rest Assured client
+            .setUrlEncodingEnabled(false) // no further automatically encoding by Rest Assured client. rf: https://issues.apache.org/jira/projects/JAMES/issues/JAMES-3936
             .build();
     }
 
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 9b9bbd8602..982c00c15d 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,7 +88,7 @@ class GroupsRoutesTest {
 
         RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecification(webAdminServer)
             .setBasePath("address/groups")
-            .setUrlEncodingEnabled(false) // no further automatically encoding by Rest Assured client
+            .setUrlEncodingEnabled(false) // no further automatically encoding by Rest Assured client. rf: https://issues.apache.org/jira/projects/JAMES/issues/JAMES-3936
             .build();
     }
 
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/RegexMappingRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/RegexMappingRoutesTest.java
index dd4c8d8293..e6192868a5 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/RegexMappingRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/RegexMappingRoutesTest.java
@@ -63,7 +63,7 @@ class RegexMappingRoutesTest {
 
         RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecification(webAdminServer)
             .setBasePath(RegexMappingRoutes.BASE_PATH)
-            .setUrlEncodingEnabled(false) // no further automatically encoding by Rest Assured client
+            .setUrlEncodingEnabled(false) // no further automatically encoding by Rest Assured client. rf: https://issues.apache.org/jira/projects/JAMES/issues/JAMES-3936
             .build();
     }
 


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


[james-project] 05/07: JAMES-3936 UserQuotaRoutes should not decode URL path two times

Posted by bt...@apache.org.
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 f5ac5279c4fa91a229ad2374e540abc6b082f26e
Author: Quan Tran <hq...@linagora.com>
AuthorDate: Wed Aug 23 17:17:47 2023 +0700

    JAMES-3936 UserQuotaRoutes should not decode URL path two times
---
 .../java/org/apache/james/webadmin/routes/UserQuotaRoutes.java | 10 ++--------
 .../org/apache/james/webadmin/routes/UserQuotaRoutesTest.java  |  3 ++-
 2 files changed, 4 insertions(+), 9 deletions(-)

diff --git a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java
index be0511e1f3..b3c6a9578b 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java
@@ -21,9 +21,6 @@ package org.apache.james.webadmin.routes;
 
 import static org.apache.james.webadmin.routes.MailboxesRoutes.TASK_PARAMETER;
 
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.nio.charset.StandardCharsets;
 import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -280,11 +277,8 @@ public class UserQuotaRoutes implements Routes {
         }, jsonTransformer);
     }
 
-    private Username checkUserExist(Request request) throws UsersRepositoryException, UnsupportedEncodingException {
-        String user = URLDecoder.decode(request.params(USER),
-            StandardCharsets.UTF_8.displayName());
-
-        Username username = Username.of(user);
+    private Username checkUserExist(Request request) throws UsersRepositoryException {
+        Username username = Username.of(request.params(USER));
 
         if (!usersRepository.contains(username)) {
             throw ErrorResponder.builder()
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java
index 85f31398a5..f7311b3e2c 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java
@@ -102,7 +102,8 @@ class UserQuotaRoutesTest {
         usersRepository.addUser(JACK, PASSWORD);
         usersRepository.addUser(GUY_WITH_STRANGE_DOMAIN, PASSWORD);
 
-        RestAssured.requestSpecification = testSystem.getRequestSpecification();
+        RestAssured.requestSpecification = testSystem.getRequestSpecification()
+            .urlEncodingEnabled(false); // no further automatically encoding by Rest Assured client. rf: https://issues.apache.org/jira/projects/JAMES/issues/JAMES-3936
         RestAssured.enableLoggingOfRequestAndResponseIfValidationFails();
     }
 


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


[james-project] 02/07: JAMES-3936 MailRepositoriesRoutes should not decode request param 2 times

Posted by bt...@apache.org.
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 7df0dd016876c4807705076c90494b8473f09b6d
Author: Quan Tran <hq...@linagora.com>
AuthorDate: Wed Aug 23 16:11:30 2023 +0700

    JAMES-3936 MailRepositoriesRoutes should not decode request param 2 times
    
    Besides, MailRepositoryPath.fromEncoded is being used by some Task DTOs - good to keep there.
---
 .../webadmin/routes/MailRepositoriesRoutes.java    | 27 +++++++++++-----------
 1 file changed, 13 insertions(+), 14 deletions(-)

diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
index 2b1c6b2f8f..407408aaf8 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
@@ -21,7 +21,6 @@ package org.apache.james.webadmin.routes;
 
 import java.io.IOException;
 import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
 import java.time.Clock;
 import java.util.Optional;
 import java.util.Set;
@@ -119,7 +118,7 @@ public class MailRepositoriesRoutes implements Routes {
 
     public void definePutMailRepository() {
         service.put(MAIL_REPOSITORIES + "/:encodedPath", (request, response) -> {
-            MailRepositoryPath path = decodedRepositoryPath(request);
+            MailRepositoryPath path = getRepositoryPath(request);
             String protocol = request.queryParams("protocol");
             try {
                 repositoryStoreService.createMailRepository(path, protocol);
@@ -146,7 +145,7 @@ public class MailRepositoriesRoutes implements Routes {
         service.get(MAIL_REPOSITORIES + "/:encodedPath/mails", (request, response) -> {
             Offset offset = ParametersExtractor.extractOffset(request);
             Limit limit = ParametersExtractor.extractLimit(request);
-            MailRepositoryPath path = decodedRepositoryPath(request);
+            MailRepositoryPath path = getRepositoryPath(request);
             try {
                 return repositoryStoreService.listMails(path, offset, limit)
                     .orElseThrow(() -> repositoryNotFound(request.params("encodedPath"), path));
@@ -171,13 +170,13 @@ public class MailRepositoriesRoutes implements Routes {
     public void defineGetMail() {
         service.get(MAIL_REPOSITORIES + "/:encodedPath/mails/:mailKey", Constants.JSON_CONTENT_TYPE,
             (request, response) ->
-                getMailAsJson(decodedRepositoryPath(request), new MailKey(request.params("mailKey")), request),
+                getMailAsJson(getRepositoryPath(request), new MailKey(request.params("mailKey")), request),
             jsonTransformer);
 
         service.get(MAIL_REPOSITORIES + "/:encodedPath/mails/:mailKey", Constants.RFC822_CONTENT_TYPE,
             (request, response) -> writeMimeMessage(
                 getMailAsMimeMessage(
-                    decodedRepositoryPath(request),
+                    getRepositoryPath(request),
                     new MailKey(request.params("mailKey"))),
                 response.raw()));
     }
@@ -262,7 +261,7 @@ public class MailRepositoriesRoutes implements Routes {
 
     public void defineGetMailRepository() {
         service.get(MAIL_REPOSITORIES + "/:encodedPath", (request, response) -> {
-            MailRepositoryPath path = decodedRepositoryPath(request);
+            MailRepositoryPath path = getRepositoryPath(request);
             try {
                 long size = repositoryStoreService.size(path)
                     .orElseThrow(() -> repositoryNotFound(request.params("encodedPath"), path));
@@ -280,7 +279,7 @@ public class MailRepositoriesRoutes implements Routes {
 
     public void defineDeleteMail() {
         service.delete(MAIL_REPOSITORIES + "/:encodedPath/mails/:mailKey", (request, response) -> {
-            MailRepositoryPath path = decodedRepositoryPath(request);
+            MailRepositoryPath path = getRepositoryPath(request);
             MailKey mailKey = new MailKey(request.params("mailKey"));
             try {
                 repositoryStoreService.deleteMail(path, mailKey);
@@ -298,7 +297,7 @@ public class MailRepositoriesRoutes implements Routes {
 
     public void defineDeleteAll() {
         TaskFromRequest taskFromRequest = request -> {
-            MailRepositoryPath path = decodedRepositoryPath(request);
+            MailRepositoryPath path = getRepositoryPath(request);
             try {
                 return repositoryStoreService.createClearMailRepositoryTask(path);
             } catch (MailRepositoryStore.MailRepositoryStoreException | MessagingException e) {
@@ -320,8 +319,8 @@ public class MailRepositoriesRoutes implements Routes {
             jsonTransformer);
     }
 
-    private Task reprocessAll(Request request) throws UnsupportedEncodingException, MailRepositoryStore.MailRepositoryStoreException {
-        MailRepositoryPath path = decodedRepositoryPath(request);
+    private Task reprocessAll(Request request) throws MailRepositoryStore.MailRepositoryStoreException {
+        MailRepositoryPath path = getRepositoryPath(request);
 
         Long repositorySize = repositoryStoreService.size(path).orElse(0L);
         return new ReprocessingAllMailsTask(reprocessingService, repositorySize, path, extractConfiguration(request));
@@ -342,8 +341,8 @@ public class MailRepositoriesRoutes implements Routes {
             jsonTransformer);
     }
 
-    private Task reprocessOne(Request request) throws UnsupportedEncodingException {
-        MailRepositoryPath path = decodedRepositoryPath(request);
+    private Task reprocessOne(Request request) {
+        MailRepositoryPath path = getRepositoryPath(request);
         MailKey key = new MailKey(request.params("key"));
 
         return new ReprocessingOneMailTask(reprocessingService, path, extractConfiguration(request), key, Clock.systemUTC());
@@ -374,8 +373,8 @@ public class MailRepositoriesRoutes implements Routes {
             .orElse(MailQueueFactory.SPOOL);
     }
 
-    private MailRepositoryPath decodedRepositoryPath(Request request) throws UnsupportedEncodingException {
-        return MailRepositoryPath.fromEncoded(request.params("encodedPath"));
+    private MailRepositoryPath getRepositoryPath(Request request) {
+        return MailRepositoryPath.from(request.params("encodedPath"));
     }
 
     private Limit parseLimit(Request request) {


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