JAMES-2169 first simple sharing test case, missing sharedWith filtering for now
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/52664358 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/52664358 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/52664358 Branch: refs/heads/master Commit: 526643581cba573e59c37a8e0588fdcf94808289 Parents: 8a1c4c7 Author: Matthieu Baechler <matth...@apache.org> Authored: Wed Sep 27 12:36:45 2017 +0200 Committer: benwa <btell...@linagora.com> Committed: Wed Oct 4 16:19:58 2017 +0700 ---------------------------------------------------------------------- .../mailbox/store/StoreMailboxManager.java | 15 +++++++++++--- .../integration/GetMailboxesMethodTest.java | 21 ++++++++++++++++++++ 2 files changed, 33 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/52664358/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java index c96b1de..a277d04 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java @@ -50,6 +50,7 @@ import org.apache.james.mailbox.exception.MailboxNotFoundException; import org.apache.james.mailbox.exception.NotAdminException; import org.apache.james.mailbox.exception.UserDoesNotExistException; import org.apache.james.mailbox.model.MailboxACL; +import org.apache.james.mailbox.model.MailboxACL.Right; import org.apache.james.mailbox.model.MailboxAnnotation; import org.apache.james.mailbox.model.MailboxAnnotationKey; import org.apache.james.mailbox.model.MailboxConstants; @@ -513,8 +514,8 @@ public class StoreMailboxManager implements MailboxManager { LOGGER.info("Mailbox '" + mailboxId.serialize() + "' not found."); throw new MailboxNotFoundException(mailboxId.serialize()); } - - if (! belongsToCurrentUser(mailboxRow, session)) { + + if (! assertUserHasAccessTo(mailboxRow, session)) { LOGGER.info("Mailbox '" + mailboxId.serialize() + "' does not belong to user '" + session.getUser() + "' but to '" + mailboxRow.getUser()); throw new MailboxNotFoundException(mailboxId.serialize()); } @@ -524,10 +525,18 @@ public class StoreMailboxManager implements MailboxManager { return createMessageManager(mailboxRow, session); } + private boolean assertUserHasAccessTo(Mailbox mailbox, MailboxSession session) throws MailboxException { + return belongsToCurrentUser(mailbox, session) || userHasReadRightsOn(mailbox, session); + } + private boolean belongsToCurrentUser(Mailbox mailbox, MailboxSession session) { return session.getUser().isSameUser(mailbox.getUser()); } + private boolean userHasReadRightsOn(Mailbox mailbox, MailboxSession session) throws MailboxException { + return hasRight(mailbox.generateAssociatedPath(), Right.Read, session); + } + @Override public Optional<MailboxId> createMailbox(MailboxPath mailboxPath, final MailboxSession mailboxSession) throws MailboxException { @@ -786,7 +795,7 @@ public class StoreMailboxManager implements MailboxManager { } @Override - public boolean hasRight(MailboxPath mailboxPath, MailboxACL.Right right, MailboxSession session) throws MailboxException { + public boolean hasRight(MailboxPath mailboxPath, Right right, MailboxSession session) throws MailboxException { MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session); Mailbox mailbox = mapper.findMailboxByPath(mailboxPath); MailboxSession.User user = session.getUser(); http://git-wip-us.apache.org/repos/asf/james-project/blob/52664358/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java index aea2d61..46ee024 100644 --- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java @@ -82,6 +82,7 @@ public abstract class GetMailboxesMethodTest { private AccessToken accessToken; private String alice; + private String bob; private GuiceJamesServer jmapServer; private MailboxProbe mailboxProbe; private ACLProbe aclProbe; @@ -102,10 +103,12 @@ public abstract class GetMailboxesMethodTest { String domain = "domain.tld"; alice = "alice@" + domain; + bob = "bob@" + domain; String password = "password"; DataProbe dataProbe = jmapServer.getProbe(DataProbeImpl.class); dataProbe.addDomain(domain); dataProbe.addUser(alice, password); + dataProbe.addUser(bob, password); accessToken = HttpJmapAuthentication.authenticateJamesUser(baseUri(), alice, password); } @@ -499,4 +502,22 @@ public abstract class GetMailboxesMethodTest { .body(FIRST_MAILBOX + ".role", equalTo(DefaultMailboxes.OUTBOX.toLowerCase(Locale.US))); } + @Test + public void getMailboxesShouldReturnMailboxesWhenShared() throws Exception { + String mailboxName = "name"; + MailboxId bobMailbox = mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, bob, mailboxName); + aclProbe.replaceRights(MailboxPath.forUser(bob, mailboxName), alice, new Rfc4314Rights(Right.Read)); + + given() + .header("Authorization", accessToken.serialize()) + .body("[[\"getMailboxes\", {\"ids\": [\"" + bobMailbox.serialize() + "\"]}, \"#0\"]]") + .when() + .post("/jmap") + .then() + .statusCode(200) + .body(NAME, equalTo("mailboxes")) + .body(ARGUMENTS + ".list.name", hasItem(mailboxName)); + } + + } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org