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 bt...@apache.org on 2020/05/07 02:12:35 UTC

[james-project] 11/22: JAMES-3148 ACL deletion

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

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

commit 5bddcdc09f983384699bb8cdf54d0dd5d286ef5e
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Sun Apr 12 16:45:09 2020 +0700

    JAMES-3148 ACL deletion
---
 .../mailbox/cassandra/mail/CassandraACLMapper.java   | 16 ++++++++++++++++
 .../cassandra/mail/CassandraACLMapperTest.java       | 20 ++++++++++++++++++++
 2 files changed, 36 insertions(+)

diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java
index 43eeef8..376cd0a 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java
@@ -49,6 +49,7 @@ import com.datastax.driver.core.ConsistencyLevel;
 import com.datastax.driver.core.PreparedStatement;
 import com.datastax.driver.core.Row;
 import com.datastax.driver.core.Session;
+import com.datastax.driver.core.querybuilder.QueryBuilder;
 import com.fasterxml.jackson.core.JsonProcessingException;
 
 import reactor.core.publisher.Mono;
@@ -64,6 +65,7 @@ public class CassandraACLMapper {
     private final PreparedStatement conditionalInsertStatement;
     private final PreparedStatement conditionalUpdateStatement;
     private final PreparedStatement readStatement;
+    private final PreparedStatement deleteStatement;
 
     @Inject
     public CassandraACLMapper(Session session, CassandraUserMailboxRightsDAO userMailboxRightsDAO, CassandraConfiguration cassandraConfiguration) {
@@ -72,9 +74,17 @@ public class CassandraACLMapper {
         this.conditionalInsertStatement = prepareConditionalInsert(session);
         this.conditionalUpdateStatement = prepareConditionalUpdate(session);
         this.readStatement = prepareReadStatement(session);
+        this.deleteStatement = prepareDelete(session);
         this.userMailboxRightsDAO = userMailboxRightsDAO;
     }
 
+    private PreparedStatement prepareDelete(Session session) {
+        return session.prepare(
+            QueryBuilder.delete().from(CassandraACLTable.TABLE_NAME)
+                .where(eq(CassandraACLTable.ID, bindMarker(CassandraACLTable.ID)))
+                .ifExists());
+    }
+
     private PreparedStatement prepareConditionalInsert(Session session) {
         return session.prepare(
             insertInto(CassandraACLTable.TABLE_NAME)
@@ -157,6 +167,12 @@ public class CassandraACLMapper {
             .map(any -> aclWithVersion.mailboxACL);
     }
 
+    public Mono<Void> delete(CassandraId cassandraId) {
+        return executor.executeVoid(
+            deleteStatement.bind()
+                .setUUID(CassandraACLTable.ID, cassandraId.asUuid()));
+    }
+
     private Mono<MailboxACL> insertACL(CassandraId cassandraId, MailboxACL acl) {
         return executor.executeReturnApplied(
             conditionalInsertStatement.bind()
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java
index d6b66e9..d6dafc1 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java
@@ -21,6 +21,7 @@ package org.apache.james.mailbox.cassandra.mail;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto;
 import static org.apache.james.backends.cassandra.Scenario.Builder.awaitOn;
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatCode;
 
 import java.util.UUID;
 import java.util.concurrent.ExecutionException;
@@ -88,6 +89,25 @@ class CassandraACLMapperTest {
     }
 
     @Test
+    void deleteShouldRemoveACL() throws Exception {
+        MailboxACL.EntryKey key = new MailboxACL.EntryKey("bob", MailboxACL.NameType.user, false);
+        MailboxACL.Rfc4314Rights rights = new MailboxACL.Rfc4314Rights(MailboxACL.Right.Read);
+
+        cassandraACLMapper.updateACL(MAILBOX_ID,
+            MailboxACL.command().key(key).rights(rights).asAddition());
+
+        cassandraACLMapper.delete(MAILBOX_ID).block();
+
+        assertThat(cassandraACLMapper.getACL(MAILBOX_ID).block()).isEqualTo(MailboxACL.EMPTY);
+    }
+
+    @Test
+    void deleteShouldNotThrowWhenDoesNotExist() {
+        assertThatCode(() -> cassandraACLMapper.delete(MAILBOX_ID).block())
+            .doesNotThrowAnyException();
+    }
+
+    @Test
     void addACLWhenNoneStoredShouldReturnUpdatedACL() throws Exception {
         MailboxACL.EntryKey key = new MailboxACL.EntryKey("bob", MailboxACL.NameType.user, false);
         MailboxACL.Rfc4314Rights rights = new MailboxACL.Rfc4314Rights(MailboxACL.Right.Read);


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