JAMES-2347 Users can be escaped in UsersQuotaRoutes

RestAssured testing library tend to escape '@'.


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/0769dba5
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/0769dba5
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/0769dba5

Branch: refs/heads/master
Commit: 0769dba5ac1d1b5daa4233129f1a3d4eac95ab82
Parents: e235572
Author: benwa <btell...@linagora.com>
Authored: Tue Mar 13 10:15:05 2018 +0700
Committer: benwa <btell...@linagora.com>
Committed: Wed Mar 14 09:10:10 2018 +0700

----------------------------------------------------------------------
 .../james/webadmin/routes/UserQuotaRoutes.java  |  9 +++-
 .../webadmin/routes/UserQuotaRoutesTest.java    | 54 ++++++++++++++++++++
 2 files changed, 61 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/0769dba5/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java
----------------------------------------------------------------------
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 a5fff50..d9e2953 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
@@ -19,6 +19,9 @@
 
 package org.apache.james.webadmin.routes;
 
+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;
@@ -248,8 +251,10 @@ public class UserQuotaRoutes implements Routes {
         }, jsonTransformer);
     }
 
-    private User checkUserExist(Request request) throws 
UsersRepositoryException {
-        String user = request.params(USER);
+    private User checkUserExist(Request request) throws 
UsersRepositoryException, UnsupportedEncodingException {
+        String user = URLDecoder.decode(request.params(USER),
+            StandardCharsets.UTF_8.displayName());
+
         if (!usersRepository.contains(user)) {
             throw ErrorResponder.builder()
                 .statusCode(HttpStatus.NOT_FOUND_404)

http://git-wip-us.apache.org/repos/asf/james-project/blob/0769dba5/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java
----------------------------------------------------------------------
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 4a9b82d..0d84759 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
@@ -58,6 +58,7 @@ public class UserQuotaRoutesTest {
     private static final String QUOTA_USERS = "/quota/users";
     private static final String PERDU_COM = "perdu.com";
     private static final User BOB = User.fromUsername("bob@" + PERDU_COM);
+    private static final User ESCAPED_BOB = User.fromUsername("bob%40" + 
PERDU_COM);
     private static final User JOE = User.fromUsername("joe@" + PERDU_COM);
     private static final String PASSWORD = "secret";
     private static final String COUNT = "count";
@@ -139,6 +140,25 @@ public class UserQuotaRoutesTest {
             .statusCode(HttpStatus.NOT_FOUND_404);
     }
 
+    @Test
+    public void putCountShouldAcceptEscapedUsers() {
+        given()
+            .body("35")
+        .when()
+            .put(QUOTA_USERS + "/" + ESCAPED_BOB.asString() + "/" + COUNT)
+        .then()
+            .statusCode(HttpStatus.NO_CONTENT_204);
+    }
+
+    @Test
+    public void putCountSizeAcceptEscapedUsers() {
+        given()
+            .body("36")
+        .when()
+            .put(QUOTA_USERS + "/" + ESCAPED_BOB.asString() + "/" + SIZE)
+        .then()
+            .statusCode(HttpStatus.NO_CONTENT_204);
+    }
 
     @Test
     public void putCountShouldRejectInvalid() {
@@ -442,6 +462,26 @@ public class UserQuotaRoutesTest {
     }
 
     @Test
+    public void getQuotaShouldReturnBothWhenValueSpecifiedAndEscaped() {
+        int maxStorage = 42;
+        int maxMessage = 52;
+        maxQuotaManager.setMaxStorage(userQuotaRootResolver.forUser(BOB), 
QuotaSize.size(maxStorage));
+        maxQuotaManager.setMaxMessage(userQuotaRootResolver.forUser(BOB), 
QuotaCount.count(maxMessage));
+
+        JsonPath jsonPath =
+            given()
+                .get(QUOTA_USERS + "/" + ESCAPED_BOB.asString())
+            .then()
+                .statusCode(HttpStatus.OK_200)
+                .contentType(ContentType.JSON)
+                .extract()
+                .jsonPath();
+
+        assertThat(jsonPath.getLong("user." + SIZE)).isEqualTo(maxStorage);
+        assertThat(jsonPath.getLong("user." + COUNT)).isEqualTo(maxMessage);
+    }
+
+    @Test
     public void getQuotaShouldReturnBothEmptyWhenDefaultValues() {
         JsonPath jsonPath =
             given()
@@ -516,6 +556,20 @@ public class UserQuotaRoutesTest {
     }
 
     @Test
+    public void putQuotaShouldUpdateBothQuotaWhenEscaped() throws Exception {
+        given()
+            .body("{\"count\":52,\"size\":42}")
+            .put(QUOTA_USERS + "/" + ESCAPED_BOB.asString())
+        .then()
+            .statusCode(HttpStatus.NO_CONTENT_204);
+
+        
assertThat(maxQuotaManager.getMaxMessage(userQuotaRootResolver.forUser(BOB)))
+            .contains(QuotaCount.count(52));
+        
assertThat(maxQuotaManager.getMaxStorage(userQuotaRootResolver.forUser(BOB)))
+            .contains(QuotaSize.size(42));
+    }
+
+    @Test
     public void putQuotaShouldBeAbleToRemoveBothQuota() throws Exception {
         given()
             .body("{\"count\":null,\"count\":null}")


---------------------------------------------------------------------
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