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