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