Handle transport properties correctly in backup and recovery

This commit is contained in:
ameba23
2021-06-24 09:34:39 +02:00
parent 95d540644b
commit 4cf9ca9c3e
2 changed files with 21 additions and 7 deletions

View File

@@ -25,8 +25,11 @@ import org.briarproject.bramble.api.identity.IdentityManager;
import org.briarproject.bramble.api.identity.LocalAuthor; import org.briarproject.bramble.api.identity.LocalAuthor;
import org.briarproject.bramble.api.lifecycle.LifecycleManager.OpenDatabaseHook; import org.briarproject.bramble.api.lifecycle.LifecycleManager.OpenDatabaseHook;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; 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.TorConstants;
import org.briarproject.bramble.api.plugin.TransportId; 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.TransportProperties;
import org.briarproject.bramble.api.properties.TransportPropertyManager; import org.briarproject.bramble.api.properties.TransportPropertyManager;
import org.briarproject.bramble.api.sync.Group; import org.briarproject.bramble.api.sync.Group;
@@ -57,6 +60,7 @@ import org.briarproject.briar.client.ConversationClientImpl;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.ListIterator; import java.util.ListIterator;
import java.util.Map; import java.util.Map;
@@ -66,7 +70,6 @@ import java.util.Set;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import javax.inject.Inject; import javax.inject.Inject;
import static java.util.Collections.singletonMap;
import static org.briarproject.bramble.api.nullsafety.NullSafety.requireNonNull; import static org.briarproject.bramble.api.nullsafety.NullSafety.requireNonNull;
import static org.briarproject.briar.client.MessageTrackerConstants.MSG_KEY_READ; import static org.briarproject.briar.client.MessageTrackerConstants.MSG_KEY_READ;
import static org.briarproject.briar.socialbackup.MessageType.BACKUP; import static org.briarproject.briar.socialbackup.MessageType.BACKUP;
@@ -465,9 +468,13 @@ class SocialBackupManagerImpl extends ConversationClientImpl
private Map<TransportId, TransportProperties> getTransportProperties( private Map<TransportId, TransportProperties> getTransportProperties(
Transaction txn, ContactId c) throws DbException { Transaction txn, ContactId c) throws DbException {
// TODO: Include filtered properties for other transports // TODO: Include filtered properties for other transports
TransportProperties p = transportPropertyManager TransportId ids[] = { TorConstants.ID, LanTcpConstants.ID, BluetoothConstants.ID };
.getRemoteProperties(txn, c, TorConstants.ID); Map<TransportId, TransportProperties> props = new HashMap();
return singletonMap(TorConstants.ID, p); for (TransportId id : ids) {
props.put(id, transportPropertyManager
.getRemoteProperties(txn, c, id));
}
return props;
} }
private void sendShardMessage(Transaction txn, Contact custodian, private void sendShardMessage(Transaction txn, Contact custodian,
@@ -561,7 +568,7 @@ class SocialBackupManagerImpl extends ConversationClientImpl
db.deleteMessageMetadata(txn, prevId); db.deleteMessageMetadata(txn, prevId);
} }
sendBackupMessage(txn, custodian, newVersion, payload); sendBackupMessage(txn, custodian, newVersion, payload);
} catch (NoSuchContactException|NoSuchGroupException e){ } catch (NoSuchContactException | NoSuchGroupException e) {
// The custodian is no longer a contact - continue // The custodian is no longer a contact - continue
} }
} }

View File

@@ -2,6 +2,7 @@ package org.briarproject.briar.socialbackup.recovery;
import org.briarproject.bramble.api.FormatException; import org.briarproject.bramble.api.FormatException;
import org.briarproject.bramble.api.contact.Contact; 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.contact.ContactManager;
import org.briarproject.bramble.api.crypto.SecretKey; import org.briarproject.bramble.api.crypto.SecretKey;
import org.briarproject.bramble.api.db.DatabaseComponent; 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.identity.AuthorId;
import org.briarproject.bramble.api.lifecycle.IoExecutor; import org.briarproject.bramble.api.lifecycle.IoExecutor;
import org.briarproject.bramble.api.lifecycle.LifecycleManager; 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.BackupPayload;
import org.briarproject.briar.api.socialbackup.ContactData; import org.briarproject.briar.api.socialbackup.ContactData;
import org.briarproject.briar.api.socialbackup.DarkCrystal; import org.briarproject.briar.api.socialbackup.DarkCrystal;
@@ -34,6 +36,7 @@ public class RestoreAccountImpl implements RestoreAccount {
private final Executor ioExecutor; private final Executor ioExecutor;
private final DatabaseComponent db; private final DatabaseComponent db;
private final ContactManager contactManager; private final ContactManager contactManager;
private final TransportPropertyManager transportPropertyManager;
private final LifecycleManager lifecycleManager; private final LifecycleManager lifecycleManager;
private SecretKey secretKey; private SecretKey secretKey;
private final BackupPayloadDecoder backupPayloadDecoder; private final BackupPayloadDecoder backupPayloadDecoder;
@@ -48,13 +51,15 @@ public class RestoreAccountImpl implements RestoreAccount {
BackupPayloadDecoder backupPayloadDecoder, DatabaseComponent db, BackupPayloadDecoder backupPayloadDecoder, DatabaseComponent db,
@IoExecutor Executor ioExecutor, @IoExecutor Executor ioExecutor,
ContactManager contactManager, ContactManager contactManager,
LifecycleManager lifecycleManager) { LifecycleManager lifecycleManager,
TransportPropertyManager transportPropertyManager) {
this.darkCrystal = darkCrystal; this.darkCrystal = darkCrystal;
this.backupPayloadDecoder = backupPayloadDecoder; this.backupPayloadDecoder = backupPayloadDecoder;
this.db = db; this.db = db;
this.ioExecutor = ioExecutor; this.ioExecutor = ioExecutor;
this.lifecycleManager = lifecycleManager; this.lifecycleManager = lifecycleManager;
this.contactManager = contactManager; this.contactManager = contactManager;
this.transportPropertyManager = transportPropertyManager;
} }
public int getNumberOfShards() { public int getNumberOfShards() {
@@ -130,8 +135,10 @@ public class RestoreAccountImpl implements RestoreAccount {
for (ContactData contactData : socialBackup.getContacts()) { for (ContactData contactData : socialBackup.getContacts()) {
Contact c = contactData.getContact(); Contact c = contactData.getContact();
LOG.info("Adding contact " + c.getAuthor().getName() + " " + c.getAlias()); 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()); c.getHandshakePublicKey(), c.isVerified());
transportPropertyManager.addRemoteProperties(txn, contactId,
contactData.getProperties());
} }
}); });
} catch (DbException e) { } catch (DbException e) {