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