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