You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ad...@apache.org on 2017/11/21 16:40:53 UTC
[4/7] james-project git commit: JAMES-2225 URL encoded params should
be decoded in group API
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 <ra...@linagora.com>
Authored: Mon Nov 20 15:02:55 2017 +0100
Committer: Raphael Ouazana <ra...@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 = "ray@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org