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

Reply via email to