From c4c70f5ac2be7e9ef54903c2f9f1f382be94ac6a Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 14 Jan 2021 14:02:00 -0300 Subject: [PATCH] Do not create PeerSession for groups we created This needs a CreatorSession which gets created on-demand. --- .../api/privategroup/PrivateGroupManager.java | 5 ++++ .../privategroup/PrivateGroupManagerImpl.java | 8 +++++++ .../GroupInvitationManagerImpl.java | 10 +++++--- .../GroupInvitationIntegrationTest.java | 24 +++++++++++++++++++ .../GroupInvitationManagerImplTest.java | 3 +++ .../briar/test/BriarIntegrationTest.java | 8 +++---- 6 files changed, 51 insertions(+), 7 deletions(-) diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/PrivateGroupManager.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/PrivateGroupManager.java index a6873b52a..da07b091a 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/PrivateGroupManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/PrivateGroupManager.java @@ -109,6 +109,11 @@ public interface PrivateGroupManager { Collection getPrivateGroups(Transaction txn) throws DbException; + /** + * Returns true if the private group with the given ID was created by us. + */ + boolean isOurPrivateGroup(Transaction txn, GroupId g) throws DbException; + /** * Returns the text of the private group message with the given ID. */ diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/PrivateGroupManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/PrivateGroupManagerImpl.java index 5093963fe..9eea9f11b 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/PrivateGroupManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/PrivateGroupManagerImpl.java @@ -286,6 +286,14 @@ class PrivateGroupManagerImpl extends BdfIncomingMessageHook return privateGroups; } + @Override + public boolean isOurPrivateGroup(Transaction txn, GroupId g) + throws DbException { + PrivateGroup group = getPrivateGroup(txn, g); + LocalAuthor localAuthor = identityManager.getLocalAuthor(txn); + return localAuthor.getId().equals(group.getCreator().getId()); + } + @Override public Collection getPrivateGroups() throws DbException { return db.transactionWithResult(true, this::getPrivateGroups); 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 ece8ed827..2c564852f 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 @@ -126,11 +126,15 @@ class GroupInvitationManagerImpl extends ConversationClientImpl db.setGroupVisibility(txn, c.getId(), g.getId(), client); // Attach the contact ID to the group clientHelper.setContactId(txn, g.getId(), c.getId()); - // If the contact belongs to any private groups, create a peer session + // If the contact belongs to any private groups (we didn't create), + // create a peer session for (Group pg : db.getGroups(txn, PrivateGroupManager.CLIENT_ID, PrivateGroupManager.MAJOR_VERSION)) { - if (privateGroupManager.isMember(txn, pg.getId(), c.getAuthor())) - addingMember(txn, pg.getId(), c); + if (privateGroupManager.isMember(txn, pg.getId(), c.getAuthor())) { + if (!privateGroupManager.isOurPrivateGroup(txn, pg.getId())) { + addingMember(txn, pg.getId(), c); + } + } } } diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java index 041d304d6..c0261f0a4 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationIntegrationTest.java @@ -709,6 +709,30 @@ public class GroupInvitationIntegrationTest assertTrue(deleteMessages0From1(emptySet()).allDeleted()); } + @Test + public void testInvitationAfterReAddingContacts() throws Exception { + // sync invitation and response back + sendInvitation(c0.getClock().currentTimeMillis(), null); + sync0To1(1, true); + groupInvitationManager1 + .respondToInvitation(contactId0From1, privateGroup, true); + sync1To0(1, true); + + // sync group join messages + sync0To1(2, true); // + one invitation protocol join message + sync1To0(1, true); + + assertFalse(groupInvitationManager0 + .isInvitationAllowed(contact1From0, privateGroup.getId())); + + // re-add contacts + removeAllContacts(); + addDefaultContacts(); + + assertTrue(groupInvitationManager0 + .isInvitationAllowed(contact1From0, privateGroup.getId())); + } + private Collection getMessages1From0() throws DbException { return db0.transactionWithResult(true, txn -> groupInvitationManager0 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 7b873d897..9eb742cd8 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 @@ -196,6 +196,9 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase { oneOf(privateGroupManager).isMember(txn, privateGroup.getId(), c.getAuthor()); will(returnValue(true)); + oneOf(privateGroupManager) + .isOurPrivateGroup(txn, privateGroup.getId()); + will(returnValue(false)); }}); expectAddingMember(privateGroup.getId(), c); } diff --git a/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java index 0bcdab2a9..affc199db 100644 --- a/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java @@ -523,10 +523,10 @@ public abstract class BriarIntegrationTest