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

Reply via email to