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 ro...@apache.org on 2020/07/07 16:02:43 UTC

[james-project] 05/05: JAMES-3167 Correct NullPointerExceptions when reading rights

This is an automated email from the ASF dual-hosted git repository.

rouazana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 05c5ebe86bb7af1e0c7b9b0c0495a8d05a04d5d0
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Jul 7 08:55:35 2020 +0700

    JAMES-3167 Correct NullPointerExceptions when reading rights
---
 .../apache/james/mailbox/MailboxManagerTest.java   | 78 ++++++++++++++++++++++
 .../james/mailbox/store/StoreRightManager.java     | 14 ++--
 2 files changed, 88 insertions(+), 4 deletions(-)

diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
index 09069fe..7a8dbe5 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
@@ -2692,4 +2692,82 @@ public abstract class MailboxManagerTest<T extends MailboxManager> {
                 .satisfies(Throwing.consumer(messageResult -> assertThat(messageResult.hasAttachments()).isFalse()));
         }
     }
+
+    @Nested
+    class RightTests {
+        @BeforeEach
+        void setUp() {
+            session = mailboxManager.createSystemSession(USER_1);
+        }
+
+        @Test
+        void hasRightShouldThrowOnUnknownMailbox() {
+            assertThatThrownBy(() -> mailboxManager.hasRight(
+                    MailboxPath.forUser(USER_1, "notFound"),
+                    MailboxACL.Right.Administer,
+                    session))
+                .isInstanceOf(MailboxNotFoundException.class);
+        }
+
+        @Test
+        void listRightsShouldThrowOnUnknownMailbox() {
+            assertThatThrownBy(() -> mailboxManager.listRights(
+                    MailboxPath.forUser(USER_1, "notFound"),
+                    session))
+                .isInstanceOf(MailboxNotFoundException.class);
+        }
+
+        @Test
+        void myRightsShouldThrowOnUnknownMailbox() {
+            assertThatThrownBy(() -> mailboxManager.myRights(
+                    MailboxPath.forUser(USER_1, "notFound"),
+                    session))
+                .isInstanceOf(MailboxNotFoundException.class);
+        }
+
+        @Test
+        void listRightsForEntryShouldThrowOnUnknownMailbox() {
+            assertThatThrownBy(() -> mailboxManager.listRights(
+                    MailboxPath.forUser(USER_1, "notFound"),
+                    MailboxACL.EntryKey.createUserEntryKey(USER_2),
+                    session))
+                .isInstanceOf(MailboxNotFoundException.class);
+        }
+
+        @Test
+        void setRightsShouldNotThrowOnUnknownMailbox() {
+            assertThatCode(() -> mailboxManager.setRights(
+                    MailboxPath.forUser(USER_1, "notFound"),
+                    MailboxACL.EMPTY,
+                    session))
+                .doesNotThrowAnyException();
+        }
+
+        @Test
+        void hasRightShouldThrowOnDeletedMailbox() throws Exception {
+            MailboxId id = mailboxManager.createMailbox(MailboxPath.forUser(USER_1, "deleted"), session).get();
+            mailboxManager.deleteMailbox(id, session);
+
+            assertThatThrownBy(() -> mailboxManager.hasRight(id, MailboxACL.Right.Administer, session))
+                .isInstanceOf(MailboxNotFoundException.class);
+        }
+
+        @Test
+        void myRightsShouldThrowOnDeletedMailbox() throws Exception {
+            MailboxId id = mailboxManager.createMailbox(MailboxPath.forUser(USER_1, "deleted"), session).get();
+            mailboxManager.deleteMailbox(id, session);
+
+            assertThatThrownBy(() -> Mono.from(mailboxManager.myRights(id, session)).blockOptional())
+                .hasCauseInstanceOf(MailboxNotFoundException.class);
+        }
+
+        @Test
+        void setRightsShouldThrowOnDeletedMailbox() throws Exception {
+            MailboxId id = mailboxManager.createMailbox(MailboxPath.forUser(USER_1, "deleted"), session).get();
+            mailboxManager.deleteMailbox(id, session);
+
+            assertThatThrownBy(() -> mailboxManager.setRights(id, MailboxACL.EMPTY, session))
+                .isInstanceOf(MailboxNotFoundException.class);
+        }
+    }
 }
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
index b9cde36..ddb5e6d 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
@@ -20,6 +20,7 @@
 package org.apache.james.mailbox.store;
 
 import static org.apache.james.mailbox.store.MailboxReactorUtils.block;
+import static org.apache.james.mailbox.store.MailboxReactorUtils.blockOptional;
 
 import java.util.List;
 import java.util.Map;
@@ -38,6 +39,7 @@ import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.events.MailboxIdRegistrationKey;
 import org.apache.james.mailbox.exception.DifferentDomainException;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.exception.UnsupportedRightException;
 import org.apache.james.mailbox.model.Mailbox;
 import org.apache.james.mailbox.model.MailboxACL;
@@ -93,7 +95,8 @@ public class StoreRightManager implements RightManager {
     @Override
     public Rfc4314Rights myRights(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
         MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session);
-        Mailbox mailbox = block(mapper.findMailboxByPath(mailboxPath));
+        Mailbox mailbox = blockOptional(mapper.findMailboxByPath(mailboxPath))
+            .orElseThrow(() -> new MailboxNotFoundException(mailboxPath));
         return myRights(mailbox, session);
     }
 
@@ -123,7 +126,8 @@ public class StoreRightManager implements RightManager {
     @Override
     public List<Rfc4314Rights> listRights(MailboxPath mailboxPath, EntryKey key, MailboxSession session) throws MailboxException {
         MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session);
-        Mailbox mailbox = block(mapper.findMailboxByPath(mailboxPath));
+        Mailbox mailbox = blockOptional(mapper.findMailboxByPath(mailboxPath))
+            .orElseThrow(() -> new MailboxNotFoundException(mailboxPath));
 
         return aclResolver.listRights(key,
             groupMembershipResolver,
@@ -134,7 +138,8 @@ public class StoreRightManager implements RightManager {
     @Override
     public MailboxACL listRights(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
         MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session);
-        Mailbox mailbox = block(mapper.findMailboxByPath(mailboxPath));
+        Mailbox mailbox = blockOptional(mapper.findMailboxByPath(mailboxPath))
+            .orElseThrow(() -> new MailboxNotFoundException(mailboxPath));
         return mailbox.getACL();
     }
 
@@ -194,7 +199,8 @@ public class StoreRightManager implements RightManager {
     @Override
     public void setRights(MailboxId mailboxId, MailboxACL mailboxACL, MailboxSession session) throws MailboxException {
         MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session);
-        Mailbox mailbox = block(mapper.findMailboxById(mailboxId));
+        Mailbox mailbox = blockOptional(mapper.findMailboxById(mailboxId))
+            .orElseThrow(() -> new MailboxNotFoundException(mailboxId));
 
         setRights(mailbox.generateAssociatedPath(), mailboxACL, session);
     }


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