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