From 4cf9ca9c3e1e4949fb101527dec6415bac460033 Mon Sep 17 00:00:00 2001 From: ameba23 Date: Thu, 24 Jun 2021 09:34:39 +0200 Subject: [PATCH] Handle transport properties correctly in backup and recovery --- .../socialbackup/SocialBackupManagerImpl.java | 17 ++++++++++++----- .../recovery/RestoreAccountImpl.java | 11 +++++++++-- 2 files changed, 21 insertions(+), 7 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 f0d26ee7f..e7ec723d5 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 @@ -25,8 +25,11 @@ import org.briarproject.bramble.api.identity.IdentityManager; import org.briarproject.bramble.api.identity.LocalAuthor; import org.briarproject.bramble.api.lifecycle.LifecycleManager.OpenDatabaseHook; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.plugin.BluetoothConstants; +import org.briarproject.bramble.api.plugin.LanTcpConstants; import org.briarproject.bramble.api.plugin.TorConstants; import org.briarproject.bramble.api.plugin.TransportId; +import org.briarproject.bramble.api.plugin.WanTcpConstants; import org.briarproject.bramble.api.properties.TransportProperties; import org.briarproject.bramble.api.properties.TransportPropertyManager; import org.briarproject.bramble.api.sync.Group; @@ -57,6 +60,7 @@ import org.briarproject.briar.client.ConversationClientImpl; import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.List; import java.util.ListIterator; import java.util.Map; @@ -66,7 +70,6 @@ import java.util.Set; import javax.annotation.Nullable; import javax.inject.Inject; -import static java.util.Collections.singletonMap; import static org.briarproject.bramble.api.nullsafety.NullSafety.requireNonNull; import static org.briarproject.briar.client.MessageTrackerConstants.MSG_KEY_READ; import static org.briarproject.briar.socialbackup.MessageType.BACKUP; @@ -465,9 +468,13 @@ class SocialBackupManagerImpl extends ConversationClientImpl private Map getTransportProperties( Transaction txn, ContactId c) throws DbException { // TODO: Include filtered properties for other transports - TransportProperties p = transportPropertyManager - .getRemoteProperties(txn, c, TorConstants.ID); - return singletonMap(TorConstants.ID, p); + TransportId ids[] = { TorConstants.ID, LanTcpConstants.ID, BluetoothConstants.ID }; + Map props = new HashMap(); + for (TransportId id : ids) { + props.put(id, transportPropertyManager + .getRemoteProperties(txn, c, id)); + } + return props; } private void sendShardMessage(Transaction txn, Contact custodian, @@ -561,7 +568,7 @@ class SocialBackupManagerImpl extends ConversationClientImpl db.deleteMessageMetadata(txn, prevId); } sendBackupMessage(txn, custodian, newVersion, payload); - } catch (NoSuchContactException|NoSuchGroupException e){ + } catch (NoSuchContactException | NoSuchGroupException e) { // The custodian is no longer a contact - continue } } diff --git a/briar-core/src/main/java/org/briarproject/briar/socialbackup/recovery/RestoreAccountImpl.java b/briar-core/src/main/java/org/briarproject/briar/socialbackup/recovery/RestoreAccountImpl.java index 204622420..e5b928bf2 100644 --- a/briar-core/src/main/java/org/briarproject/briar/socialbackup/recovery/RestoreAccountImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/socialbackup/recovery/RestoreAccountImpl.java @@ -2,6 +2,7 @@ package org.briarproject.briar.socialbackup.recovery; import org.briarproject.bramble.api.FormatException; import org.briarproject.bramble.api.contact.Contact; +import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.contact.ContactManager; import org.briarproject.bramble.api.crypto.SecretKey; import org.briarproject.bramble.api.db.DatabaseComponent; @@ -9,6 +10,7 @@ import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.identity.AuthorId; import org.briarproject.bramble.api.lifecycle.IoExecutor; import org.briarproject.bramble.api.lifecycle.LifecycleManager; +import org.briarproject.bramble.api.properties.TransportPropertyManager; import org.briarproject.briar.api.socialbackup.BackupPayload; import org.briarproject.briar.api.socialbackup.ContactData; import org.briarproject.briar.api.socialbackup.DarkCrystal; @@ -34,6 +36,7 @@ public class RestoreAccountImpl implements RestoreAccount { private final Executor ioExecutor; private final DatabaseComponent db; private final ContactManager contactManager; + private final TransportPropertyManager transportPropertyManager; private final LifecycleManager lifecycleManager; private SecretKey secretKey; private final BackupPayloadDecoder backupPayloadDecoder; @@ -48,13 +51,15 @@ public class RestoreAccountImpl implements RestoreAccount { BackupPayloadDecoder backupPayloadDecoder, DatabaseComponent db, @IoExecutor Executor ioExecutor, ContactManager contactManager, - LifecycleManager lifecycleManager) { + LifecycleManager lifecycleManager, + TransportPropertyManager transportPropertyManager) { this.darkCrystal = darkCrystal; this.backupPayloadDecoder = backupPayloadDecoder; this.db = db; this.ioExecutor = ioExecutor; this.lifecycleManager = lifecycleManager; this.contactManager = contactManager; + this.transportPropertyManager = transportPropertyManager; } public int getNumberOfShards() { @@ -130,8 +135,10 @@ public class RestoreAccountImpl implements RestoreAccount { for (ContactData contactData : socialBackup.getContacts()) { Contact c = contactData.getContact(); LOG.info("Adding contact " + c.getAuthor().getName() + " " + c.getAlias()); - contactManager.addContact(txn, c.getAuthor(), localAuthorId, + ContactId contactId = contactManager.addContact(txn, c.getAuthor(), localAuthorId, c.getHandshakePublicKey(), c.isVerified()); + transportPropertyManager.addRemoteProperties(txn, contactId, + contactData.getProperties()); } }); } catch (DbException e) {