From af64bb056da77ea6e4d0bbed87b2d68ad0eba57a Mon Sep 17 00:00:00 2001 From: ameba23 Date: Mon, 21 Jun 2021 12:19:32 +0200 Subject: [PATCH 1/4] Add delete all messages to integration test --- .../briar/socialbackup/SocialBackupIntegrationTest.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/briar-core/src/test/java/org/briarproject/briar/socialbackup/SocialBackupIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/socialbackup/SocialBackupIntegrationTest.java index 9fedae1c9..fb9dec3a8 100644 --- a/briar-core/src/test/java/org/briarproject/briar/socialbackup/SocialBackupIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/socialbackup/SocialBackupIntegrationTest.java @@ -146,6 +146,11 @@ public class SocialBackupIntegrationTest socialBackupManager1.setReadFlag(g0From1.getId(), messages0At1.iterator().next().getId(), true); assertGroupCount(messageTracker1, g0From1.getId(), 1, 0); + + db1.transaction(false, txn -> { + socialBackupManager1.deleteAllMessages(txn, contactId0From1); + }); + assertGroupCount(messageTracker1, g0From1.getId(), 0, 0); } private Collection getMessages1At0() From d975d1dbddcf75302b45ab4d9dbfb6618581fb87 Mon Sep 17 00:00:00 2001 From: ameba23 Date: Mon, 21 Jun 2021 12:20:09 +0200 Subject: [PATCH 2/4] Implement deleteAllMessages in SocialBackupManagerImpl --- .../briar/socialbackup/SocialBackupManagerImpl.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/briar-core/src/main/java/org/briarproject/briar/socialbackup/SocialBackupManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/socialbackup/SocialBackupManagerImpl.java index bea71b8a9..2b9c1e8ec 100644 --- a/briar-core/src/main/java/org/briarproject/briar/socialbackup/SocialBackupManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/socialbackup/SocialBackupManagerImpl.java @@ -382,7 +382,13 @@ class SocialBackupManagerImpl extends ConversationClientImpl @Override public DeletionResult deleteAllMessages(Transaction txn, ContactId c) throws DbException { - return null; + GroupId g = getContactGroup(db.getContact(txn, c)).getId(); + for (MessageId messageId : db.getMessageIds(txn, g)) { + db.deleteMessage(txn, messageId); + db.deleteMessageMetadata(txn, messageId); + } + messageTracker.initializeGroupCount(txn, g); + return new DeletionResult(); } @Override From 33549bcbe12882bb17766720b0bf79dc3b9ad01e Mon Sep 17 00:00:00 2001 From: ameba23 Date: Mon, 21 Jun 2021 12:25:14 +0200 Subject: [PATCH 3/4] Implement deleteMessages in SocialBackupManagerImpl --- .../socialbackup/SocialBackupManagerImpl.java | 45 +++++++++++++------ 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/briar-core/src/main/java/org/briarproject/briar/socialbackup/SocialBackupManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/socialbackup/SocialBackupManagerImpl.java index 2b9c1e8ec..9399d31f2 100644 --- a/briar-core/src/main/java/org/briarproject/briar/socialbackup/SocialBackupManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/socialbackup/SocialBackupManagerImpl.java @@ -44,15 +44,15 @@ import org.briarproject.briar.api.conversation.ConversationMessageHeader; import org.briarproject.briar.api.conversation.DeletionResult; import org.briarproject.briar.api.socialbackup.BackupExistsException; import org.briarproject.briar.api.socialbackup.BackupMetadata; +import org.briarproject.briar.api.socialbackup.BackupPayload; +import org.briarproject.briar.api.socialbackup.ContactData; import org.briarproject.briar.api.socialbackup.DarkCrystal; import org.briarproject.briar.api.socialbackup.ReturnShardPayload; import org.briarproject.briar.api.socialbackup.Shard; -import org.briarproject.briar.api.socialbackup.BackupPayload; import org.briarproject.briar.api.socialbackup.ShardMessageHeader; import org.briarproject.briar.api.socialbackup.ShardReceivedEvent; import org.briarproject.briar.api.socialbackup.SocialBackupManager; import org.briarproject.briar.client.ConversationClientImpl; -import org.briarproject.briar.api.socialbackup.ContactData; import java.util.ArrayList; import java.util.Collection; @@ -234,18 +234,24 @@ class SocialBackupManagerImpl extends ConversationClientImpl return false; } - public ReturnShardPayload getReturnShardPayload(Transaction txn, ContactId contactId) throws DbException { - GroupId groupId = getContactGroup(db.getContact(txn, contactId)).getId(); - return new ReturnShardPayload(getRemoteShard(txn, groupId), getRemoteBackup(txn, groupId)); + public ReturnShardPayload getReturnShardPayload(Transaction txn, + ContactId contactId) throws DbException { + GroupId groupId = + getContactGroup(db.getContact(txn, contactId)).getId(); + return new ReturnShardPayload(getRemoteShard(txn, groupId), + getRemoteBackup(txn, groupId)); } - public byte[] getReturnShardPayloadBytes(Transaction txn, ContactId contactId) throws DbException { - return messageEncoder.encodeReturnShardPayload(getReturnShardPayload(txn, contactId)); + public byte[] getReturnShardPayloadBytes(Transaction txn, + ContactId contactId) throws DbException { + return messageEncoder.encodeReturnShardPayload( + getReturnShardPayload(txn, contactId)); } public boolean amCustodian(Transaction txn, ContactId contactId) { try { - GroupId groupId = getContactGroup(db.getContact(txn, contactId)).getId(); + GroupId groupId = + getContactGroup(db.getContact(txn, contactId)).getId(); return findMessage(txn, groupId, SHARD, false) != null; } catch (DbException e) { return false; @@ -356,7 +362,8 @@ class SocialBackupManagerImpl extends ConversationClientImpl .getMessage(txn, messageEntry.getKey()); MessageStatus status = db.getMessageStatus(txn, contactId, messageEntry.getKey()); - headers.add(createShardMessageHeader(message, meta, status)); + headers.add( + createShardMessageHeader(message, meta, status)); } } return headers; @@ -395,6 +402,11 @@ class SocialBackupManagerImpl extends ConversationClientImpl public DeletionResult deleteMessages(Transaction txn, ContactId c, Set messageIds) throws DbException { DeletionResult result = new DeletionResult(); + GroupId g = getContactGroup(db.getContact(txn, c)).getId(); + for (MessageId m : messageIds) { + db.deleteMessage(txn, m); + db.deleteMessageMetadata(txn, m); + } return result; } @@ -421,7 +433,9 @@ class SocialBackupManagerImpl extends ConversationClientImpl } private BackupPayload createBackupPayload(Transaction txn, - SecretKey secret, List contactData, int version) + SecretKey secret, + List contactData, + int version) throws DbException { Identity identity = identityManager.getIdentity(txn); return backupPayloadEncoder.encodeBackupPayload(secret, identity, @@ -431,7 +445,8 @@ class SocialBackupManagerImpl extends ConversationClientImpl private List loadContactData(Transaction txn) throws DbException { Collection contacts = contactManager.getContacts(txn); - List contactData = new ArrayList<>(); + List contactData = + new ArrayList<>(); for (Contact c : contacts) { // Skip contacts that are in the process of being removed Group contactGroup = getContactGroup(c); @@ -439,7 +454,9 @@ class SocialBackupManagerImpl extends ConversationClientImpl Map props = getTransportProperties(txn, c.getId()); Shard shard = getRemoteShard(txn, contactGroup.getId()); - contactData.add(new org.briarproject.briar.api.socialbackup.ContactData(c, props, shard)); + contactData + .add(new org.briarproject.briar.api.socialbackup.ContactData( + c, props, shard)); } return contactData; } @@ -519,7 +536,9 @@ class SocialBackupManagerImpl extends ConversationClientImpl throw new DbException(e); } } - private void updateBackup(Transaction txn, List contactData) + + private void updateBackup(Transaction txn, + List contactData) throws DbException { BackupMetadata backupMetadata = requireNonNull(getBackupMetadata(txn)); int newVersion = backupMetadata.getVersion() + 1; From 21f36340503b5cfa566019505def4ed8f37ad1a1 Mon Sep 17 00:00:00 2001 From: ameba23 Date: Mon, 21 Jun 2021 12:56:39 +0200 Subject: [PATCH 4/4] Catch NoSuchGroupException when deleting contacts --- .../briar/socialbackup/SocialBackupManagerImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/briar-core/src/main/java/org/briarproject/briar/socialbackup/SocialBackupManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/socialbackup/SocialBackupManagerImpl.java index 9399d31f2..f0d26ee7f 100644 --- a/briar-core/src/main/java/org/briarproject/briar/socialbackup/SocialBackupManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/socialbackup/SocialBackupManagerImpl.java @@ -17,6 +17,7 @@ import org.briarproject.bramble.api.data.MetadataParser; import org.briarproject.bramble.api.db.DatabaseComponent; import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.db.NoSuchContactException; +import org.briarproject.bramble.api.db.NoSuchGroupException; import org.briarproject.bramble.api.db.Transaction; import org.briarproject.bramble.api.identity.Author; import org.briarproject.bramble.api.identity.Identity; @@ -560,7 +561,7 @@ class SocialBackupManagerImpl extends ConversationClientImpl db.deleteMessageMetadata(txn, prevId); } sendBackupMessage(txn, custodian, newVersion, payload); - } catch (NoSuchContactException e) { + } catch (NoSuchContactException|NoSuchGroupException e){ // The custodian is no longer a contact - continue } }