mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-16 20:59:54 +01:00
Store incoming valid remote wipe messages in metadata, update test
This commit is contained in:
@@ -0,0 +1,13 @@
|
|||||||
|
package org.briarproject.briar.remotewipe;
|
||||||
|
|
||||||
|
public interface RemoteWipeConstants {
|
||||||
|
// Group metadata keys
|
||||||
|
String GROUP_KEY_CONTACT_ID = "contactId";
|
||||||
|
String GROUP_KEY_WIPERS = "wipers";
|
||||||
|
String GROUP_KEY_RECEIVED_WIPE = "receivedWipe";
|
||||||
|
|
||||||
|
// Message metadata keys
|
||||||
|
String MSG_KEY_TIMESTAMP = "timestamp";
|
||||||
|
String MSG_KEY_MESSAGE_TYPE = "messageType";
|
||||||
|
String MSG_KEY_LOCAL = "local";
|
||||||
|
}
|
||||||
@@ -44,10 +44,13 @@ import javax.inject.Inject;
|
|||||||
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.remotewipe.MessageType.SETUP;
|
import static org.briarproject.briar.remotewipe.MessageType.SETUP;
|
||||||
import static org.briarproject.briar.remotewipe.MessageType.WIPE;
|
import static org.briarproject.briar.remotewipe.MessageType.WIPE;
|
||||||
import static org.briarproject.briar.socialbackup.SocialBackupConstants.GROUP_KEY_CONTACT_ID;
|
import static org.briarproject.briar.remotewipe.RemoteWipeConstants.GROUP_KEY_CONTACT_ID;
|
||||||
import static org.briarproject.briar.socialbackup.SocialBackupConstants.MSG_KEY_LOCAL;
|
import static org.briarproject.briar.remotewipe.RemoteWipeConstants.GROUP_KEY_RECEIVED_WIPE;
|
||||||
import static org.briarproject.briar.socialbackup.SocialBackupConstants.MSG_KEY_MESSAGE_TYPE;
|
import static org.briarproject.briar.remotewipe.RemoteWipeConstants.GROUP_KEY_WIPERS;
|
||||||
import static org.briarproject.briar.socialbackup.SocialBackupConstants.MSG_KEY_TIMESTAMP;
|
|
||||||
|
import static org.briarproject.briar.remotewipe.RemoteWipeConstants.MSG_KEY_LOCAL;
|
||||||
|
import static org.briarproject.briar.remotewipe.RemoteWipeConstants.MSG_KEY_MESSAGE_TYPE;
|
||||||
|
import static org.briarproject.briar.remotewipe.RemoteWipeConstants.MSG_KEY_TIMESTAMP;
|
||||||
|
|
||||||
public class RemoteWipeManagerImpl extends ConversationClientImpl
|
public class RemoteWipeManagerImpl extends ConversationClientImpl
|
||||||
implements RemoteWipeManager, ContactManager.ContactHook,
|
implements RemoteWipeManager, ContactManager.ContactHook,
|
||||||
@@ -60,6 +63,7 @@ public class RemoteWipeManagerImpl extends ConversationClientImpl
|
|||||||
private final ContactManager contactManager;
|
private final ContactManager contactManager;
|
||||||
private final MessageEncoder messageEncoder;
|
private final MessageEncoder messageEncoder;
|
||||||
private final MessageParser messageParser;
|
private final MessageParser messageParser;
|
||||||
|
private static int THRESHOLD = 2; // TODO
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
protected RemoteWipeManagerImpl(
|
protected RemoteWipeManagerImpl(
|
||||||
@@ -118,9 +122,25 @@ public class RemoteWipeManagerImpl extends ConversationClientImpl
|
|||||||
// Check if contact is in list of wipers
|
// Check if contact is in list of wipers
|
||||||
if (findMessage(txn, m.getGroupId(), SETUP, true) != null) {
|
if (findMessage(txn, m.getGroupId(), SETUP, true) != null) {
|
||||||
System.out.println("Got a wipe message from a wiper");
|
System.out.println("Got a wipe message from a wiper");
|
||||||
|
|
||||||
|
BdfDictionary existingMeta = clientHelper.getGroupMetadataAsDictionary(txn,
|
||||||
|
localGroup.getId());
|
||||||
|
BdfList receivedWipeMessages = existingMeta.getOptionalList(GROUP_KEY_RECEIVED_WIPE);
|
||||||
|
|
||||||
|
if (receivedWipeMessages == null) receivedWipeMessages = new BdfList();
|
||||||
|
// TODO filter the messages for old ones
|
||||||
|
|
||||||
|
if (receivedWipeMessages.size() + 1 == THRESHOLD) {
|
||||||
|
System.out.println("Threshold reached - panic!");
|
||||||
|
// we could here clear the metadata to allow us to send
|
||||||
|
// the wipe messages several times when testing
|
||||||
|
} else {
|
||||||
|
receivedWipeMessages.add(1); // TODO this should be the timestamp
|
||||||
|
BdfDictionary newMeta = new BdfDictionary();
|
||||||
|
newMeta.put(GROUP_KEY_RECEIVED_WIPE, receivedWipeMessages);
|
||||||
|
clientHelper.mergeGroupMetadata(txn, localGroup.getId(), newMeta);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// if so, increment counter
|
|
||||||
// check if counter = threshold
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -129,16 +149,28 @@ public class RemoteWipeManagerImpl extends ConversationClientImpl
|
|||||||
throws DbException, FormatException {
|
throws DbException, FormatException {
|
||||||
// TODO if (we already have a set of wipers?) do something
|
// TODO if (we already have a set of wipers?) do something
|
||||||
if (wipers.size() < 2) throw new FormatException();
|
if (wipers.size() < 2) throw new FormatException();
|
||||||
|
|
||||||
|
BdfList wipersMetadata = new BdfList();
|
||||||
|
|
||||||
for (ContactId c : wipers) {
|
for (ContactId c : wipers) {
|
||||||
|
Contact contact = contactManager.getContact(txn, c);
|
||||||
System.out.println("Sending a setup message...");
|
System.out.println("Sending a setup message...");
|
||||||
sendSetupMessage(txn, contactManager.getContact(txn, c));
|
sendSetupMessage(txn, contact);
|
||||||
|
wipersMetadata.add(clientHelper.toList(contact.getAuthor()));
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.println("All setup messages sent");
|
System.out.println("All setup messages sent");
|
||||||
|
|
||||||
|
// Make a record of this locally
|
||||||
if (!db.containsGroup(txn, localGroup.getId()))
|
if (!db.containsGroup(txn, localGroup.getId()))
|
||||||
db.addGroup(txn, localGroup);
|
db.addGroup(txn, localGroup);
|
||||||
// TODO Make some sort of record of this
|
|
||||||
// clientHelper.mergeGroupMetadata(txn, localGroup.getId(), meta)
|
BdfDictionary meta = new BdfDictionary();
|
||||||
|
meta.put(GROUP_KEY_WIPERS, wipersMetadata);
|
||||||
|
|
||||||
|
if (!db.containsGroup(txn, localGroup.getId()))
|
||||||
|
db.addGroup(txn, localGroup);
|
||||||
|
clientHelper.mergeGroupMetadata(txn, localGroup.getId(), meta);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendSetupMessage(Transaction txn, Contact contact)
|
private void sendSetupMessage(Transaction txn, Contact contact)
|
||||||
|
|||||||
Reference in New Issue
Block a user