JAMES-2225 URL encoded params should be decoded in group API
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/cd57213c Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/cd57213c Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/cd57213c Branch: refs/heads/master Commit: cd57213c0b09ed0e940c6b3b2e59221249151255 Parents: 66295df Author: Raphael Ouazana <raphael.ouaz...@linagora.com> Authored: Mon Nov 20 15:02:55 2017 +0100 Committer: Raphael Ouazana <raphael.ouaz...@linagora.com> Committed: Mon Nov 20 15:04:55 2017 +0100 ---------------------------------------------------------------------- .../transport/mailets/GroupMappingTest.java | 20 ++++++++++++++++++++ .../james/webadmin/routes/GroupsRoutes.java | 13 ++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/cd57213c/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java index cc25fb4..4ad8447 100644 --- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java +++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java @@ -434,6 +434,26 @@ public class GroupMappingTest { } @Test + public void messageShouldRedirectToGroupContainingSlash() throws Exception { + String groupWithSlash = "a/a@" + DOMAIN1; + String groupWithEncodedSlash = "a%2Fa@" + DOMAIN1; + restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + groupWithEncodedSlash + "/" + USER_DOMAIN1); + + Mail mail = FakeMail.builder() + .mimeMessage(message) + .sender(new MailAddress(SENDER)) + .recipient(new MailAddress(groupWithSlash)) + .build(); + + try (SMTPMessageSender messageSender = SMTPMessageSender.noAuthentication(LOCALHOST_IP, SMTP_PORT, DOMAIN1); + IMAPMessageReader imapMessageReader = new IMAPMessageReader(LOCALHOST_IP, IMAP_PORT)) { + messageSender.sendMessage(mail); + calmlyAwait.atMost(Duration.ONE_MINUTE).until(messageSender::messageHasBeenSent); + calmlyAwait.atMost(Duration.ONE_MINUTE).until(() -> imapMessageReader.userReceivedMessage(USER_DOMAIN1, PASSWORD)); + } + } + + @Test public void sendMessageShouldSendAMessageToAnExternalGroupMember() throws Exception { String externalMail = "r...@yopmail.com"; restApiRequest.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + externalMail); http://git-wip-us.apache.org/repos/asf/james-project/blob/cd57213c/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java ---------------------------------------------------------------------- diff --git a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java index f47fda1..25ada76 100644 --- a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java +++ b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java @@ -22,6 +22,8 @@ package org.apache.james.webadmin.routes; import static org.apache.james.webadmin.Constants.SEPARATOR; import static spark.Spark.halt; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; import java.util.List; import java.util.Map; import java.util.Optional; @@ -50,6 +52,8 @@ import org.apache.james.webadmin.Routes; import org.apache.james.webadmin.utils.JsonExtractException; import org.apache.james.webadmin.utils.JsonTransformer; import org.eclipse.jetty.http.HttpStatus; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.github.steveash.guavate.Guavate; import com.google.common.annotations.VisibleForTesting; @@ -72,6 +76,9 @@ import spark.Service; public class GroupsRoutes implements Routes { public static final String ROOT_PATH = "address/groups"; + + private static final Logger LOGGER = LoggerFactory.getLogger(GroupsRoutes.class); + private static final String GROUP_ADDRESS = "groupAddress"; private static final String GROUP_ADDRESS_PATH = ROOT_PATH + SEPARATOR + ":" + GROUP_ADDRESS; private static final String USER_ADDRESS = "userAddress"; @@ -200,9 +207,13 @@ public class GroupsRoutes implements Routes { private MailAddress parseMailAddress(String address) { try { - return new MailAddress(address); + String decodedAddress = URLDecoder.decode(address, "UTF-8"); + return new MailAddress(decodedAddress); } catch (AddressException e) { throw halt(HttpStatus.BAD_REQUEST_400); + } catch (UnsupportedEncodingException e) { + LOGGER.error("UTF-8 should be a valid encoding"); + throw halt(HttpStatus.INTERNAL_SERVER_ERROR_500); } } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org