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 ma...@apache.org on 2016/04/25 16:15:47 UTC

[3/4] james-project git commit: JAMES-1721 Rename a mailbox to a system Mailbox is not possible

JAMES-1721 Rename a mailbox to a system Mailbox is not possible


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

Branch: refs/heads/master
Commit: 39928fdd70afb77c26b3a353ad9cc1c6ce10da78
Parents: 80c6001
Author: Laura Royet <lr...@linagora.com>
Authored: Fri Apr 22 10:31:28 2016 +0200
Committer: Laura Royet <lr...@linagora.com>
Committed: Mon Apr 25 14:50:29 2016 +0200

----------------------------------------------------------------------
 .../integration/SetMailboxesMethodTest.java     | 36 ++++++++++++++++++++
 .../methods/SetMailboxesUpdateProcessor.java    | 21 ++++++++++--
 2 files changed, 54 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/39928fdd/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMailboxesMethodTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMailboxesMethodTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMailboxesMethodTest.java
index 2c0316c..ede31d0 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMailboxesMethodTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMailboxesMethodTest.java
@@ -1476,4 +1476,40 @@ public abstract class SetMailboxesMethodTest {
                     hasEntry(equalTo("type"), equalTo("invalidArguments")),
                     hasEntry(equalTo("description"), equalTo("Cannot update a system mailbox.")))));
     }
+
+    @Test
+    public void setMailboxesShouldReturnNotUpdatedWhenRenameToSystemMailboxName() {
+
+        jmapServer.serverProbe().createMailbox("#private", username, "myBox");
+        Mailbox<?> mailboxMyBox = jmapServer.serverProbe().getMailbox("#private", username, "myBox");
+        String mailboxIdMyBox = mailboxMyBox.getMailboxId().serialize();
+
+        String requestBody =
+                "[" +
+                    "  [ \"setMailboxes\"," +
+                    "    {" +
+                    "      \"update\": {" +
+                    "        \"" + mailboxIdMyBox + "\" : {" +
+                    "          \"name\" : \"outbox\"" +
+                    "        }" +
+                    "      }" +
+                    "    }," +
+                    "    \"#0\"" +
+                    "  ]" +
+                    "]";
+
+        given()
+            .accept(ContentType.JSON)
+            .contentType(ContentType.JSON)
+            .header("Authorization", this.accessToken.serialize())
+            .body(requestBody)
+        .when()
+            .post("/jmap")
+        .then()
+            .statusCode(200)
+            .body(NAME, equalTo("mailboxesSet"))
+            .body(ARGUMENTS + ".notUpdated", hasEntry(equalTo(mailboxIdMyBox), Matchers.allOf(
+                    hasEntry(equalTo("type"), equalTo("invalidArguments")),
+                    hasEntry(equalTo("description"), equalTo("The mailbox 'outbox' is a system mailbox.")))));
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/39928fdd/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessor.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessor.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessor.java
index 0eee160..29efbe2 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessor.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessor.java
@@ -130,11 +130,26 @@ public class SetMailboxesUpdateProcessor<Id extends MailboxId> implements SetMai
 
     private void validateMailboxName(MailboxUpdateRequest updateRequest, MailboxSession mailboxSession) throws MailboxNameException {
         char pathDelimiter = mailboxSession.getPathDelimiter();
-        if (updateRequest.getName()
-                .filter(name -> name.contains(String.valueOf(pathDelimiter)))
-                .isPresent()) {
+
+        if (nameContainsPathDelimiter(updateRequest, pathDelimiter)) {
             throw new MailboxNameException(String.format("The mailbox '%s' contains an illegal character: '%c'", updateRequest.getName().get(), pathDelimiter));
         }
+        if (nameMatchesSystemMailbox(updateRequest)) {
+            throw new MailboxNameException(String.format("The mailbox '%s' is a system mailbox.", updateRequest.getName().get()));
+        }
+    }
+
+    private boolean nameMatchesSystemMailbox(MailboxUpdateRequest updateRequest) {
+        return updateRequest.getName()
+                .flatMap(Role::from)
+                .filter(Role::isSystemRole)
+                .isPresent();
+    }
+
+    private boolean nameContainsPathDelimiter(MailboxUpdateRequest updateRequest, char pathDelimiter) {
+        return updateRequest.getName()
+                .filter(name -> name.contains(String.valueOf(pathDelimiter)))
+                .isPresent() ;
     }
 
     private void validateParent(Mailbox mailbox, MailboxUpdateRequest updateRequest, MailboxSession mailboxSession) throws MailboxException, MailboxHasChildException {


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org