From bab2b4594d9e58e33c0ebf50f7e8c4ae8d0f077f Mon Sep 17 00:00:00 2001 From: akwizgran Date: Mon, 23 Nov 2020 17:15:57 +0000 Subject: [PATCH] Factor out methods for storing and retrieving contact ID. --- .../bramble/api/client/ClientHelper.java | 14 ++++++++ .../api/client/ContactGroupConstants.java | 9 +++++ .../bramble/client/ClientHelperImpl.java | 26 +++++++++++++++ .../versioning/ClientVersioningConstants.java | 1 - .../ClientVersioningManagerImpl.java | 22 ++----------- .../ClientVersioningManagerImplTest.java | 33 +++++++------------ .../introduction/AbstractProtocolEngine.java | 6 +--- .../introduction/IntroductionConstants.java | 3 -- .../introduction/IntroductionManagerImpl.java | 26 ++++----------- .../briar/messaging/MessagingConstants.java | 3 -- .../briar/messaging/MessagingManagerImpl.java | 9 +---- .../invitation/AbstractProtocolEngine.java | 16 ++------- .../invitation/CreatorProtocolEngine.java | 6 ++-- .../invitation/GroupInvitationConstants.java | 3 -- .../GroupInvitationManagerImpl.java | 12 ++----- .../invitation/InviteeProtocolEngine.java | 3 +- .../invitation/PeerProtocolEngine.java | 3 +- .../briar/sharing/ProtocolEngineImpl.java | 31 ++++++++--------- .../briar/sharing/SharingConstants.java | 3 -- .../briar/sharing/SharingManagerImpl.java | 9 +---- .../AbstractProtocolEngineTest.java | 15 +++------ .../GroupInvitationManagerImplTest.java | 6 +--- .../sharing/BlogSharingManagerImplTest.java | 6 +--- 23 files changed, 104 insertions(+), 161 deletions(-) create mode 100644 bramble-api/src/main/java/org/briarproject/bramble/api/client/ContactGroupConstants.java diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/client/ClientHelper.java b/bramble-api/src/main/java/org/briarproject/bramble/api/client/ClientHelper.java index df68d7933..c4fb1b41f 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/client/ClientHelper.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/client/ClientHelper.java @@ -1,6 +1,7 @@ package org.briarproject.bramble.api.client; import org.briarproject.bramble.api.FormatException; +import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.crypto.PrivateKey; import org.briarproject.bramble.api.crypto.PublicKey; import org.briarproject.bramble.api.data.BdfDictionary; @@ -119,4 +120,17 @@ public interface ClientHelper { Map parseAndValidateTransportPropertiesMap( BdfDictionary properties) throws FormatException; + /** + * Retrieves the contact ID from the group metadata of the given contact + * group. + */ + ContactId getContactId(Transaction txn, GroupId contactGroupId) + throws DbException, FormatException; + + /** + * Stores the given contact ID in the group metadata of the given contact + * group. + */ + void setContactId(Transaction txn, GroupId contactGroupId, ContactId c) + throws DbException; } diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/client/ContactGroupConstants.java b/bramble-api/src/main/java/org/briarproject/bramble/api/client/ContactGroupConstants.java new file mode 100644 index 000000000..4c556bbe7 --- /dev/null +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/client/ContactGroupConstants.java @@ -0,0 +1,9 @@ +package org.briarproject.bramble.api.client; + +public interface ContactGroupConstants { + + /** + * Group metadata key for associating a contact ID with a contact group. + */ + String GROUP_KEY_CONTACT_ID = "contactId"; +} diff --git a/bramble-core/src/main/java/org/briarproject/bramble/client/ClientHelperImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/client/ClientHelperImpl.java index 604570aee..a92aecde5 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/client/ClientHelperImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/client/ClientHelperImpl.java @@ -2,11 +2,13 @@ package org.briarproject.bramble.client; import org.briarproject.bramble.api.FormatException; import org.briarproject.bramble.api.client.ClientHelper; +import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.crypto.CryptoComponent; import org.briarproject.bramble.api.crypto.KeyParser; import org.briarproject.bramble.api.crypto.PrivateKey; import org.briarproject.bramble.api.crypto.PublicKey; import org.briarproject.bramble.api.data.BdfDictionary; +import org.briarproject.bramble.api.data.BdfEntry; import org.briarproject.bramble.api.data.BdfList; import org.briarproject.bramble.api.data.BdfReader; import org.briarproject.bramble.api.data.BdfReaderFactory; @@ -39,6 +41,7 @@ import java.util.Map.Entry; import javax.annotation.concurrent.Immutable; import javax.inject.Inject; +import static org.briarproject.bramble.api.client.ContactGroupConstants.GROUP_KEY_CONTACT_ID; import static org.briarproject.bramble.api.identity.Author.FORMAT_VERSION; import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH; import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH; @@ -389,4 +392,27 @@ class ClientHelperImpl implements ClientHelper { return tpMap; } + @Override + public ContactId getContactId(Transaction txn, GroupId contactGroupId) + throws DbException { + try { + BdfDictionary meta = + getGroupMetadataAsDictionary(txn, contactGroupId); + return new ContactId(meta.getLong(GROUP_KEY_CONTACT_ID).intValue()); + } catch (FormatException e) { + throw new DbException(e); // Invalid group metadata + } + } + + @Override + public void setContactId(Transaction txn, GroupId contactGroupId, + ContactId c) throws DbException { + BdfDictionary meta = BdfDictionary.of( + new BdfEntry(GROUP_KEY_CONTACT_ID, c.getInt())); + try { + mergeGroupMetadata(txn, contactGroupId, meta); + } catch (FormatException e) { + throw new AssertionError(e); + } + } } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/versioning/ClientVersioningConstants.java b/bramble-core/src/main/java/org/briarproject/bramble/versioning/ClientVersioningConstants.java index e68ecc468..d3822a23c 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/versioning/ClientVersioningConstants.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/versioning/ClientVersioningConstants.java @@ -5,6 +5,5 @@ interface ClientVersioningConstants { // Metadata keys String MSG_KEY_UPDATE_VERSION = "version"; String MSG_KEY_LOCAL = "local"; - String GROUP_KEY_CONTACT_ID = "contactId"; } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/versioning/ClientVersioningManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/versioning/ClientVersioningManagerImpl.java index b334f3bea..6aadf889a 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/versioning/ClientVersioningManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/versioning/ClientVersioningManagerImpl.java @@ -50,7 +50,6 @@ import static java.util.Collections.emptyList; import static org.briarproject.bramble.api.sync.Group.Visibility.INVISIBLE; import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED; import static org.briarproject.bramble.api.sync.Group.Visibility.VISIBLE; -import static org.briarproject.bramble.versioning.ClientVersioningConstants.GROUP_KEY_CONTACT_ID; import static org.briarproject.bramble.versioning.ClientVersioningConstants.MSG_KEY_LOCAL; import static org.briarproject.bramble.versioning.ClientVersioningConstants.MSG_KEY_UPDATE_VERSION; @@ -161,13 +160,7 @@ class ClientVersioningManagerImpl implements ClientVersioningManager, db.addGroup(txn, g); db.setGroupVisibility(txn, c.getId(), g.getId(), SHARED); // Attach the contact ID to the group - BdfDictionary meta = new BdfDictionary(); - meta.put(GROUP_KEY_CONTACT_ID, c.getId().getInt()); - try { - clientHelper.mergeGroupMetadata(txn, g.getId(), meta); - } catch (FormatException e) { - throw new AssertionError(e); - } + clientHelper.setContactId(txn, g.getId(), c.getId()); // Create and store the first local update List versions = new ArrayList<>(clients); Collections.sort(versions); @@ -229,7 +222,7 @@ class ClientVersioningManagerImpl implements ClientVersioningManager, Map after = getVisibilities(newLocalStates, newRemoteStates); // Call hooks for any visibilities that have changed - ContactId c = getContactId(txn, m.getGroupId()); + ContactId c = clientHelper.getContactId(txn, m.getGroupId()); if (!before.equals(after)) { Contact contact = db.getContact(txn, c); callVisibilityHooks(txn, contact, before, after); @@ -521,17 +514,6 @@ class ClientVersioningManagerImpl implements ClientVersioningManager, storeUpdate(txn, g, states, 1); } - private ContactId getContactId(Transaction txn, GroupId g) - throws DbException { - try { - BdfDictionary meta = - clientHelper.getGroupMetadataAsDictionary(txn, g); - return new ContactId(meta.getLong(GROUP_KEY_CONTACT_ID).intValue()); - } catch (FormatException e) { - throw new DbException(e); - } - } - private List updateStatesFromRemoteStates( List oldLocalStates, List remoteStates) { Set remoteSet = new HashSet<>(); diff --git a/bramble-core/src/test/java/org/briarproject/bramble/versioning/ClientVersioningManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/versioning/ClientVersioningManagerImplTest.java index 93cf97dcc..17d23087b 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/versioning/ClientVersioningManagerImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/versioning/ClientVersioningManagerImplTest.java @@ -38,7 +38,6 @@ import static org.briarproject.bramble.test.TestUtils.getContact; import static org.briarproject.bramble.test.TestUtils.getGroup; import static org.briarproject.bramble.test.TestUtils.getMessage; import static org.briarproject.bramble.test.TestUtils.getRandomId; -import static org.briarproject.bramble.versioning.ClientVersioningConstants.GROUP_KEY_CONTACT_ID; import static org.briarproject.bramble.versioning.ClientVersioningConstants.MSG_KEY_LOCAL; import static org.briarproject.bramble.versioning.ClientVersioningConstants.MSG_KEY_UPDATE_VERSION; import static org.junit.Assert.assertEquals; @@ -60,8 +59,6 @@ public class ClientVersioningManagerImplTest extends BrambleMockTestCase { private final ClientId clientId = getClientId(); private final long now = System.currentTimeMillis(); private final Transaction txn = new Transaction(null, false); - private final BdfDictionary groupMeta = BdfDictionary.of( - new BdfEntry(GROUP_KEY_CONTACT_ID, contact.getId().getInt())); private ClientVersioningManagerImpl createInstance() { context.checking(new Expectations() {{ @@ -123,8 +120,8 @@ public class ClientVersioningManagerImplTest extends BrambleMockTestCase { oneOf(db).addGroup(txn, contactGroup); oneOf(db).setGroupVisibility(txn, contact.getId(), contactGroup.getId(), SHARED); - oneOf(clientHelper).mergeGroupMetadata(txn, contactGroup.getId(), - groupMeta); + oneOf(clientHelper).setContactId(txn, contactGroup.getId(), + contact.getId()); oneOf(clock).currentTimeMillis(); will(returnValue(now)); oneOf(clientHelper).createMessage(contactGroup.getId(), now, @@ -460,9 +457,8 @@ public class ClientVersioningManagerImplTest extends BrambleMockTestCase { oneOf(db).deleteMessage(txn, oldRemoteUpdateId); oneOf(db).deleteMessageMetadata(txn, oldRemoteUpdateId); // Get contact ID - oneOf(clientHelper).getGroupMetadataAsDictionary(txn, - contactGroup.getId()); - will(returnValue(groupMeta)); + oneOf(clientHelper).getContactId(txn, contactGroup.getId()); + will(returnValue(contact.getId())); // No states or visibilities have changed }}); @@ -492,10 +488,9 @@ public class ClientVersioningManagerImplTest extends BrambleMockTestCase { // Load the latest local update oneOf(clientHelper).getMessageAsList(txn, oldLocalUpdateId); will(returnValue(oldLocalUpdateBody)); - // Get client ID - oneOf(clientHelper).getGroupMetadataAsDictionary(txn, - contactGroup.getId()); - will(returnValue(groupMeta)); + // Get contact ID + oneOf(clientHelper).getContactId(txn, contactGroup.getId()); + will(returnValue(contact.getId())); // No states or visibilities have changed }}); @@ -546,8 +541,6 @@ public class ClientVersioningManagerImplTest extends BrambleMockTestCase { BdfDictionary newLocalUpdateMeta = BdfDictionary.of( new BdfEntry(MSG_KEY_UPDATE_VERSION, 2L), new BdfEntry(MSG_KEY_LOCAL, true)); - BdfDictionary groupMeta = BdfDictionary.of( - new BdfEntry(GROUP_KEY_CONTACT_ID, contact.getId().getInt())); context.checking(new Expectations() {{ oneOf(clientHelper).toList(newRemoteUpdate); @@ -577,9 +570,8 @@ public class ClientVersioningManagerImplTest extends BrambleMockTestCase { oneOf(clientHelper).addLocalMessage(txn, newLocalUpdate, newLocalUpdateMeta, true, false); // The client's visibility has changed - oneOf(clientHelper).getGroupMetadataAsDictionary(txn, - contactGroup.getId()); - will(returnValue(groupMeta)); + oneOf(clientHelper).getContactId(txn, contactGroup.getId()); + will(returnValue(contact.getId())); oneOf(db).getContact(txn, contact.getId()); will(returnValue(contact)); oneOf(hook).onClientVisibilityChanging(txn, contact, visibility); @@ -619,8 +611,6 @@ public class ClientVersioningManagerImplTest extends BrambleMockTestCase { BdfDictionary newLocalUpdateMeta = BdfDictionary.of( new BdfEntry(MSG_KEY_UPDATE_VERSION, 2L), new BdfEntry(MSG_KEY_LOCAL, true)); - BdfDictionary groupMeta = BdfDictionary.of( - new BdfEntry(GROUP_KEY_CONTACT_ID, contact.getId().getInt())); context.checking(new Expectations() {{ oneOf(clientHelper).toList(newRemoteUpdate); @@ -650,9 +640,8 @@ public class ClientVersioningManagerImplTest extends BrambleMockTestCase { oneOf(clientHelper).addLocalMessage(txn, newLocalUpdate, newLocalUpdateMeta, true, false); // The client's visibility has changed - oneOf(clientHelper).getGroupMetadataAsDictionary(txn, - contactGroup.getId()); - will(returnValue(groupMeta)); + oneOf(clientHelper).getContactId(txn, contactGroup.getId()); + will(returnValue(contact.getId())); oneOf(db).getContact(txn, contact.getId()); will(returnValue(contact)); oneOf(hook).onClientVisibilityChanging(txn, contact, INVISIBLE); diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java index 3a9e55ebf..1d7554f72 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java @@ -36,7 +36,6 @@ import javax.annotation.concurrent.Immutable; import static org.briarproject.bramble.api.autodelete.AutoDeleteConstants.NO_AUTO_DELETE_TIMER; import static org.briarproject.briar.api.introduction.IntroductionManager.CLIENT_ID; import static org.briarproject.briar.api.introduction.IntroductionManager.MAJOR_VERSION; -import static org.briarproject.briar.introduction.IntroductionConstants.GROUP_KEY_CONTACT_ID; import static org.briarproject.briar.introduction.MessageType.ABORT; import static org.briarproject.briar.introduction.MessageType.ACCEPT; import static org.briarproject.briar.introduction.MessageType.ACTIVATE; @@ -237,10 +236,7 @@ abstract class AbstractProtocolEngine> boolean contactSupportsAutoDeletion(Transaction txn, GroupId contactGroupId) throws DbException { try { - BdfDictionary meta = clientHelper - .getGroupMetadataAsDictionary(txn, contactGroupId); - int contactId = meta.getLong(GROUP_KEY_CONTACT_ID).intValue(); - ContactId c = new ContactId(contactId); + ContactId c = clientHelper.getContactId(txn, contactGroupId); int minorVersion = clientVersioningManager .getClientMinorVersion(txn, c, CLIENT_ID, MAJOR_VERSION); // Auto-delete was added in client version 0.1 diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionConstants.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionConstants.java index 16a09e93e..72a5066d7 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionConstants.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionConstants.java @@ -2,9 +2,6 @@ package org.briarproject.briar.introduction; interface IntroductionConstants { - // Group metadata keys - String GROUP_KEY_CONTACT_ID = "contactId"; - // Message metadata keys String MSG_KEY_MESSAGE_TYPE = "messageType"; String MSG_KEY_SESSION_ID = "sessionId"; diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java index 79452fd44..2050d1b65 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java @@ -59,7 +59,6 @@ import static org.briarproject.briar.introduction.IntroduceeState.REMOTE_DECLINE import static org.briarproject.briar.introduction.IntroducerState.A_DECLINED; import static org.briarproject.briar.introduction.IntroducerState.B_DECLINED; import static org.briarproject.briar.introduction.IntroducerState.START; -import static org.briarproject.briar.introduction.IntroductionConstants.GROUP_KEY_CONTACT_ID; import static org.briarproject.briar.introduction.MessageType.ABORT; import static org.briarproject.briar.introduction.MessageType.ACCEPT; import static org.briarproject.briar.introduction.MessageType.ACTIVATE; @@ -136,13 +135,7 @@ class IntroductionManagerImpl extends ConversationClientImpl c.getId(), CLIENT_ID, MAJOR_VERSION); db.setGroupVisibility(txn, c.getId(), g.getId(), client); // Attach the contact ID to the group - BdfDictionary meta = new BdfDictionary(); - meta.put(GROUP_KEY_CONTACT_ID, c.getId().getInt()); - try { - clientHelper.mergeGroupMetadata(txn, g.getId(), meta); - } catch (FormatException e) { - throw new AssertionError(e); - } + clientHelper.setContactId(txn, g.getId(), c.getId()); } @Override @@ -183,7 +176,7 @@ class IntroductionManagerImpl extends ConversationClientImpl } StoredSession ss = getSession(txn, sessionId); // Handle the message - Session session; + Session session; MessageId storageId; if (ss == null) { if (meta.getMessageType() != REQUEST) throw new FormatException(); @@ -211,7 +204,7 @@ class IntroductionManagerImpl extends ConversationClientImpl private IntroduceeSession createNewIntroduceeSession(Transaction txn, Message m, BdfList body) throws DbException, FormatException { - ContactId introducerId = getContactId(txn, m.getGroupId()); + ContactId introducerId = clientHelper.getContactId(txn, m.getGroupId()); Author introducer = db.getContact(txn, introducerId).getAuthor(); Author local = identityManager.getLocalAuthor(txn); Author remote = messageParser.parseRequestMessage(m, body).getAuthor(); @@ -223,7 +216,7 @@ class IntroductionManagerImpl extends ConversationClientImpl remote); } - private S handleMessage(Transaction txn, Message m, + private > S handleMessage(Transaction txn, Message m, BdfList body, MessageType type, S session, ProtocolEngine engine) throws DbException, FormatException { if (type == REQUEST) { @@ -263,13 +256,6 @@ class IntroductionManagerImpl extends ConversationClientImpl results.values().iterator().next()); } - private ContactId getContactId(Transaction txn, GroupId contactGroupId) - throws DbException, FormatException { - BdfDictionary meta = - clientHelper.getGroupMetadataAsDictionary(txn, contactGroupId); - return new ContactId(meta.getLong(GROUP_KEY_CONTACT_ID).intValue()); - } - private MessageId createStorageId(Transaction txn) throws DbException { Message m = clientHelper .createMessageForStoringMetadata(localGroup.getId()); @@ -278,7 +264,7 @@ class IntroductionManagerImpl extends ConversationClientImpl } private void storeSession(Transaction txn, MessageId storageId, - Session session) throws DbException { + Session session) throws DbException { BdfDictionary d; if (session.getRole() == INTRODUCER) { d = sessionEncoder @@ -666,7 +652,7 @@ class IntroductionManagerImpl extends ConversationClientImpl try { StoredSession ss = getSession(txn, sessionId); if (ss == null) throw new AssertionError(); - Session s; + Session s; Role role = sessionParser.getRole(ss.bdfSession); if (role == INTRODUCER) { s = sessionParser.parseIntroducerSession(ss.bdfSession); diff --git a/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingConstants.java b/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingConstants.java index 757c63eac..20bc1bc7b 100644 --- a/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingConstants.java +++ b/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingConstants.java @@ -2,9 +2,6 @@ package org.briarproject.briar.messaging; interface MessagingConstants { - // Metadata keys for groups - String GROUP_KEY_CONTACT_ID = "contactId"; - // Metadata keys for messages String MSG_KEY_TIMESTAMP = "timestamp"; String MSG_KEY_LOCAL = "local"; diff --git a/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java index fac667ecf..99b02206e 100644 --- a/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingManagerImpl.java @@ -68,7 +68,6 @@ import static org.briarproject.briar.api.messaging.PrivateMessageFormat.TEXT_ONL import static org.briarproject.briar.client.MessageTrackerConstants.MSG_KEY_READ; import static org.briarproject.briar.messaging.MessageTypes.ATTACHMENT; import static org.briarproject.briar.messaging.MessageTypes.PRIVATE_MESSAGE; -import static org.briarproject.briar.messaging.MessagingConstants.GROUP_KEY_CONTACT_ID; import static org.briarproject.briar.messaging.MessagingConstants.MSG_KEY_ATTACHMENT_HEADERS; import static org.briarproject.briar.messaging.MessagingConstants.MSG_KEY_AUTO_DELETE_TIMER; import static org.briarproject.briar.messaging.MessagingConstants.MSG_KEY_CONTENT_TYPE; @@ -139,13 +138,7 @@ class MessagingManagerImpl implements MessagingManager, IncomingMessageHook, c.getId(), CLIENT_ID, MAJOR_VERSION); db.setGroupVisibility(txn, c.getId(), g.getId(), client); // Attach the contact ID to the group - BdfDictionary d = new BdfDictionary(); - d.put(GROUP_KEY_CONTACT_ID, c.getId().getInt()); - try { - clientHelper.mergeGroupMetadata(txn, g.getId(), d); - } catch (FormatException e) { - throw new AssertionError(e); - } + clientHelper.setContactId(txn, g.getId(), c.getId()); // Initialize the group count with current time messageTracker.initializeGroupCount(txn, g.getId()); } diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngine.java index 26da12b2e..af62d3661 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngine.java @@ -31,7 +31,6 @@ import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; import static org.briarproject.bramble.api.autodelete.AutoDeleteConstants.NO_AUTO_DELETE_TIMER; -import static org.briarproject.briar.privategroup.invitation.GroupInvitationConstants.GROUP_KEY_CONTACT_ID; import static org.briarproject.briar.privategroup.invitation.MessageType.ABORT; import static org.briarproject.briar.privategroup.invitation.MessageType.INVITE; import static org.briarproject.briar.privategroup.invitation.MessageType.JOIN; @@ -76,13 +75,6 @@ abstract class AbstractProtocolEngine> this.clock = clock; } - ContactId getContactId(Transaction txn, GroupId contactGroupId) - throws DbException, FormatException { - BdfDictionary meta = clientHelper.getGroupMetadataAsDictionary(txn, - contactGroupId); - return new ContactId(meta.getLong(GROUP_KEY_CONTACT_ID).intValue()); - } - boolean isSubscribedPrivateGroup(Transaction txn, GroupId g) throws DbException { if (!db.containsGroup(txn, g)) return false; @@ -100,7 +92,8 @@ abstract class AbstractProtocolEngine> void setPrivateGroupVisibility(Transaction txn, S session, Visibility preferred) throws DbException, FormatException { // Apply min of preferred visibility and client's visibility - ContactId contactId = getContactId(txn, session.getContactGroupId()); + ContactId contactId = + clientHelper.getContactId(txn, session.getContactGroupId()); Visibility client = clientVersioningManager.getClientVisibility(txn, contactId, PrivateGroupManager.CLIENT_ID, PrivateGroupManager.MAJOR_VERSION); @@ -273,10 +266,7 @@ abstract class AbstractProtocolEngine> boolean contactSupportsAutoDeletion(Transaction txn, GroupId contactGroupId) throws DbException { try { - BdfDictionary meta = clientHelper - .getGroupMetadataAsDictionary(txn, contactGroupId); - int contactId = meta.getLong(GROUP_KEY_CONTACT_ID).intValue(); - ContactId c = new ContactId(contactId); + ContactId c = clientHelper.getContactId(txn, contactGroupId); int minorVersion = clientVersioningManager .getClientMinorVersion(txn, c, GroupInvitationManager.CLIENT_ID, diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java index 9709f265a..519d6cb6d 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java @@ -191,7 +191,8 @@ class CreatorProtocolEngine extends AbstractProtocolEngine { // Share the private group with the contact setPrivateGroupVisibility(txn, s, SHARED); // Broadcast an event - ContactId contactId = getContactId(txn, m.getContactGroupId()); + ContactId contactId = + clientHelper.getContactId(txn, m.getContactGroupId()); txn.attach(new GroupInvitationResponseReceivedEvent( createInvitationResponse(m, true), contactId)); // Move to the JOINED state @@ -213,7 +214,8 @@ class CreatorProtocolEngine extends AbstractProtocolEngine { messageTracker.trackMessage(txn, m.getContactGroupId(), m.getTimestamp(), false); // Broadcast an event - ContactId contactId = getContactId(txn, m.getContactGroupId()); + ContactId contactId = + clientHelper.getContactId(txn, m.getContactGroupId()); txn.attach(new GroupInvitationResponseReceivedEvent( createInvitationResponse(m, false), contactId)); // Move to the START state diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationConstants.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationConstants.java index dd4f0ef35..82efba05f 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationConstants.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationConstants.java @@ -2,9 +2,6 @@ package org.briarproject.briar.privategroup.invitation; interface GroupInvitationConstants { - // Group metadata keys - String GROUP_KEY_CONTACT_ID = "contactId"; - // Message metadata keys String MSG_KEY_MESSAGE_TYPE = "messageType"; String MSG_KEY_PRIVATE_GROUP_ID = "privateGroupId"; diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java index 53e6fa838..c988793df 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java @@ -53,7 +53,6 @@ import javax.inject.Inject; import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED; import static org.briarproject.briar.privategroup.invitation.CreatorState.START; -import static org.briarproject.briar.privategroup.invitation.GroupInvitationConstants.GROUP_KEY_CONTACT_ID; import static org.briarproject.briar.privategroup.invitation.MessageType.ABORT; import static org.briarproject.briar.privategroup.invitation.MessageType.INVITE; import static org.briarproject.briar.privategroup.invitation.MessageType.JOIN; @@ -123,13 +122,7 @@ class GroupInvitationManagerImpl extends ConversationClientImpl c.getId(), CLIENT_ID, MAJOR_VERSION); db.setGroupVisibility(txn, c.getId(), g.getId(), client); // Attach the contact ID to the group - BdfDictionary meta = new BdfDictionary(); - meta.put(GROUP_KEY_CONTACT_ID, c.getId().getInt()); - try { - clientHelper.mergeGroupMetadata(txn, g.getId(), meta); - } catch (FormatException e) { - throw new AssertionError(e); - } + clientHelper.setContactId(txn, g.getId(), c.getId()); // If the contact belongs to any private groups, create a peer session for (Group pg : db.getGroups(txn, PrivateGroupManager.CLIENT_ID, PrivateGroupManager.MAJOR_VERSION)) { @@ -189,7 +182,8 @@ class GroupInvitationManagerImpl extends ConversationClientImpl results.values().iterator().next()); } - private Session handleFirstMessage(Transaction txn, Message m, BdfList body, + private Session handleFirstMessage(Transaction txn, Message m, + BdfList body, MessageMetadata meta) throws DbException, FormatException { GroupId privateGroupId = meta.getPrivateGroupId(); MessageType type = meta.getMessageType(); diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java index b4a7665fd..cdb597a5e 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java @@ -230,7 +230,8 @@ class InviteeProtocolEngine extends AbstractProtocolEngine { // The timestamp must be higher than the last invite message, if any if (m.getTimestamp() <= s.getInviteTimestamp()) return abort(txn, s); // Check that the contact is the creator - ContactId contactId = getContactId(txn, s.getContactGroupId()); + ContactId contactId = + clientHelper.getContactId(txn, s.getContactGroupId()); Author contact = db.getContact(txn, contactId).getAuthor(); if (!contact.getId().equals(m.getCreator().getId())) return abort(txn, s); diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngine.java index b7eb293f5..de0a96fc6 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngine.java @@ -355,7 +355,8 @@ class PeerProtocolEngine extends AbstractProtocolEngine { private void relationshipRevealed(Transaction txn, PeerSession s, boolean byContact) throws DbException, FormatException { - ContactId contactId = getContactId(txn, s.getContactGroupId()); + ContactId contactId = + clientHelper.getContactId(txn, s.getContactGroupId()); Contact contact = db.getContact(txn, contactId); privateGroupManager.relationshipRevealed(txn, s.getPrivateGroupId(), contact.getAuthor().getId(), byContact); diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java index 9d47cf327..612e9f3aa 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java @@ -37,7 +37,6 @@ import static org.briarproject.briar.sharing.MessageType.ACCEPT; import static org.briarproject.briar.sharing.MessageType.DECLINE; import static org.briarproject.briar.sharing.MessageType.INVITE; import static org.briarproject.briar.sharing.MessageType.LEAVE; -import static org.briarproject.briar.sharing.SharingConstants.GROUP_KEY_CONTACT_ID; import static org.briarproject.briar.sharing.State.LOCAL_INVITED; import static org.briarproject.briar.sharing.State.LOCAL_LEFT; import static org.briarproject.briar.sharing.State.REMOTE_HANGING; @@ -341,7 +340,8 @@ abstract class ProtocolEngineImpl messageTracker.trackMessage(txn, m.getContactGroupId(), m.getTimestamp(), false); // Broadcast an event - ContactId contactId = getContactId(txn, s.getContactGroupId()); + ContactId contactId = + clientHelper.getContactId(txn, s.getContactGroupId()); txn.attach(getInvitationRequestReceivedEvent(m, contactId, available, false)); // Move to the next state @@ -367,7 +367,8 @@ abstract class ProtocolEngineImpl // Share the shareable with the contact setShareableVisibility(txn, s, SHARED); // Broadcast an event - ContactId contactId = getContactId(txn, s.getContactGroupId()); + ContactId contactId = + clientHelper.getContactId(txn, s.getContactGroupId()); txn.attach( getInvitationRequestReceivedEvent(m, contactId, false, true)); // Move to the next state @@ -411,7 +412,8 @@ abstract class ProtocolEngineImpl messageTracker.trackMessage(txn, m.getContactGroupId(), m.getTimestamp(), false); // Broadcast an event - ContactId contactId = getContactId(txn, m.getContactGroupId()); + ContactId contactId = + clientHelper.getContactId(txn, m.getContactGroupId()); txn.attach(getInvitationResponseReceivedEvent(m, contactId)); // Move to the next state return new Session(nextState, s.getContactGroupId(), s.getShareableId(), @@ -469,7 +471,8 @@ abstract class ProtocolEngineImpl throw new DbException(e); // Invalid group metadata } // Broadcast an event - ContactId contactId = getContactId(txn, m.getContactGroupId()); + ContactId contactId = + clientHelper.getContactId(txn, m.getContactGroupId()); txn.attach(getInvitationResponseReceivedEvent(m, contactId)); // Move to the next state return new Session(START, s.getContactGroupId(), s.getShareableId(), @@ -529,7 +532,8 @@ abstract class ProtocolEngineImpl if (isInvalidDependency(s, m.getPreviousMessageId())) return abortWithMessage(txn, s); // Broadcast event informing that contact left - ContactId contactId = getContactId(txn, s.getContactGroupId()); + ContactId contactId = + clientHelper.getContactId(txn, s.getContactGroupId()); ContactLeftShareableEvent e = new ContactLeftShareableEvent( s.getShareableId(), contactId); txn.attach(e); @@ -648,20 +652,14 @@ abstract class ProtocolEngineImpl private void setShareableVisibility(Transaction txn, Session session, Visibility preferred) throws DbException, FormatException { // Apply min of preferred visibility and client's visibility - ContactId contactId = getContactId(txn, session.getContactGroupId()); + ContactId contactId = + clientHelper.getContactId(txn, session.getContactGroupId()); Visibility client = clientVersioningManager.getClientVisibility(txn, contactId, shareableClientId, shareableClientMajorVersion); Visibility min = Visibility.min(preferred, client); db.setGroupVisibility(txn, contactId, session.getShareableId(), min); } - private ContactId getContactId(Transaction txn, GroupId contactGroupId) - throws DbException, FormatException { - BdfDictionary meta = clientHelper.getGroupMetadataAsDictionary(txn, - contactGroupId); - return new ContactId(meta.getLong(GROUP_KEY_CONTACT_ID).intValue()); - } - private boolean isInvalidDependency(Session session, @Nullable MessageId dependency) { MessageId expected = session.getLastRemoteMessageId(); @@ -678,10 +676,7 @@ abstract class ProtocolEngineImpl boolean contactSupportsAutoDeletion(Transaction txn, GroupId contactGroupId) throws DbException { try { - BdfDictionary meta = clientHelper - .getGroupMetadataAsDictionary(txn, contactGroupId); - int contactId = meta.getLong(GROUP_KEY_CONTACT_ID).intValue(); - ContactId c = new ContactId(contactId); + ContactId c = clientHelper.getContactId(txn, contactGroupId); int minorVersion = clientVersioningManager .getClientMinorVersion(txn, c, sharingClientId, sharingClientMajorVersion); diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingConstants.java b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingConstants.java index 9d45467a5..4ebf1d790 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingConstants.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingConstants.java @@ -4,9 +4,6 @@ import org.briarproject.briar.client.MessageTrackerConstants; interface SharingConstants { - // Group metadata keys - String GROUP_KEY_CONTACT_ID = "contactId"; - // Message metadata keys String MSG_KEY_MESSAGE_TYPE = "messageType"; String MSG_KEY_SHAREABLE_ID = "shareableId"; diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java index a1b1bcadb..462f3ae52 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java @@ -52,7 +52,6 @@ import static org.briarproject.briar.sharing.MessageType.ACCEPT; import static org.briarproject.briar.sharing.MessageType.DECLINE; import static org.briarproject.briar.sharing.MessageType.INVITE; import static org.briarproject.briar.sharing.MessageType.LEAVE; -import static org.briarproject.briar.sharing.SharingConstants.GROUP_KEY_CONTACT_ID; import static org.briarproject.briar.sharing.State.SHARING; @NotNullByDefault @@ -114,13 +113,7 @@ abstract class SharingManagerImpl c.getId(), getClientId(), getMajorVersion()); db.setGroupVisibility(txn, c.getId(), g.getId(), client); // Attach the contact ID to the group - BdfDictionary meta = new BdfDictionary(); - meta.put(GROUP_KEY_CONTACT_ID, c.getId().getInt()); - try { - clientHelper.mergeGroupMetadata(txn, g.getId(), meta); - } catch (FormatException e) { - throw new AssertionError(e); - } + clientHelper.setContactId(txn, g.getId(), c.getId()); } @Override diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java index a003e34a7..f7cff5186 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java @@ -37,7 +37,6 @@ import static org.briarproject.bramble.util.StringUtils.getRandomString; import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.GROUP_SALT_LENGTH; import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_INVITATION_TEXT_LENGTH; import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_NAME_LENGTH; -import static org.briarproject.briar.privategroup.invitation.GroupInvitationConstants.GROUP_KEY_CONTACT_ID; import static org.briarproject.briar.privategroup.invitation.MessageType.ABORT; import static org.briarproject.briar.privategroup.invitation.MessageType.INVITE; import static org.briarproject.briar.privategroup.invitation.MessageType.JOIN; @@ -81,8 +80,6 @@ abstract class AbstractProtocolEngineTest extends BrambleMockTestCase { final long messageTimestamp = message.getTimestamp(); final long inviteTimestamp = messageTimestamp - 1; final long localTimestamp = inviteTimestamp - 1; - final BdfDictionary groupMeta = BdfDictionary.of( - new BdfEntry(GROUP_KEY_CONTACT_ID, contactId.getInt())); final InviteMessage inviteMessage = new InviteMessage(new MessageId(getRandomId()), contactGroupId, @@ -196,12 +193,9 @@ abstract class AbstractProtocolEngineTest extends BrambleMockTestCase { } void expectGetContactId() throws Exception { - BdfDictionary groupMeta = BdfDictionary - .of(new BdfEntry(GROUP_KEY_CONTACT_ID, contactId.getInt())); context.checking(new Expectations() {{ - oneOf(clientHelper) - .getGroupMetadataAsDictionary(txn, contactGroupId); - will(returnValue(groupMeta)); + oneOf(clientHelper).getContactId(txn, contactGroupId); + will(returnValue(contactId)); }}); } @@ -231,9 +225,8 @@ abstract class AbstractProtocolEngineTest extends BrambleMockTestCase { void expectCheckWhetherContactSupportsAutoDeletion() throws Exception { context.checking(new Expectations() {{ - oneOf(clientHelper).getGroupMetadataAsDictionary(txn, - contactGroupId); - will(returnValue(groupMeta)); + oneOf(clientHelper).getContactId(txn, contactGroupId); + will(returnValue(contactId)); oneOf(clientVersioningManager).getClientMinorVersion(txn, contactId, GroupInvitationManager.CLIENT_ID, GroupInvitationManager.MAJOR_VERSION); diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java index 60d0e3758..d533cacf9 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java @@ -58,7 +58,6 @@ import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.GROU import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_NAME_LENGTH; import static org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager.CLIENT_ID; import static org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager.MAJOR_VERSION; -import static org.briarproject.briar.privategroup.invitation.GroupInvitationConstants.GROUP_KEY_CONTACT_ID; import static org.briarproject.briar.privategroup.invitation.MessageType.ABORT; import static org.briarproject.briar.privategroup.invitation.MessageType.INVITE; import static org.briarproject.briar.privategroup.invitation.MessageType.JOIN; @@ -178,9 +177,6 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase { } private void expectAddingContact(Contact c) throws Exception { - BdfDictionary meta = BdfDictionary - .of(new BdfEntry(GROUP_KEY_CONTACT_ID, c.getId().getInt())); - context.checking(new Expectations() {{ oneOf(contactGroupFactory).createContactGroup(CLIENT_ID, MAJOR_VERSION, c); @@ -192,7 +188,7 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase { oneOf(db).setGroupVisibility(txn, c.getId(), contactGroup.getId(), SHARED); oneOf(clientHelper) - .mergeGroupMetadata(txn, contactGroup.getId(), meta); + .setContactId(txn, contactGroup.getId(), contactId); oneOf(db).getGroups(txn, PrivateGroupManager.CLIENT_ID, PrivateGroupManager.MAJOR_VERSION); will(returnValue(Collections.singletonList(privateGroup))); diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingManagerImplTest.java index 41cf72502..78ec37f1f 100644 --- a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingManagerImplTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingManagerImplTest.java @@ -5,7 +5,6 @@ import org.briarproject.bramble.api.client.ContactGroupFactory; import org.briarproject.bramble.api.contact.Contact; import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.data.BdfDictionary; -import org.briarproject.bramble.api.data.BdfEntry; import org.briarproject.bramble.api.data.MetadataParser; import org.briarproject.bramble.api.db.DatabaseComponent; import org.briarproject.bramble.api.db.DbException; @@ -41,7 +40,6 @@ import static org.briarproject.bramble.test.TestUtils.getMessage; import static org.briarproject.bramble.test.TestUtils.getRandomId; import static org.briarproject.briar.api.blog.BlogSharingManager.CLIENT_ID; import static org.briarproject.briar.api.blog.BlogSharingManager.MAJOR_VERSION; -import static org.briarproject.briar.sharing.SharingConstants.GROUP_KEY_CONTACT_ID; public class BlogSharingManagerImplTest extends BrambleMockTestCase { @@ -117,8 +115,6 @@ public class BlogSharingManagerImplTest extends BrambleMockTestCase { } private void expectAddingContact(Transaction txn) throws Exception { - BdfDictionary meta = BdfDictionary.of( - new BdfEntry(GROUP_KEY_CONTACT_ID, contactId.getInt())); Map sessions = Collections.emptyMap(); context.checking(new Expectations() {{ @@ -134,7 +130,7 @@ public class BlogSharingManagerImplTest extends BrambleMockTestCase { SHARED); // Attach the contact ID to the group oneOf(clientHelper) - .mergeGroupMetadata(txn, contactGroup.getId(), meta); + .setContactId(txn, contactGroup.getId(), contactId); // Get our blog and the contact's blog oneOf(identityManager).getLocalAuthor(txn); will(returnValue(localAuthor));