From c49db25e96c4a1fc27d116db27df91fae7d4082a Mon Sep 17 00:00:00 2001 From: akwizgran Date: Thu, 3 Dec 2020 12:44:28 +0000 Subject: [PATCH] Hook up incoming messages to the auto-delete manager. --- .../introduction/AbstractProtocolEngine.java | 7 ++++++ .../IntroduceeProtocolEngine.java | 12 +++++++-- .../IntroducerProtocolEngine.java | 8 ++++++ .../briar/messaging/MessagingManagerImpl.java | 15 ++++++++--- .../invitation/AbstractProtocolEngine.java | 7 ++++++ .../invitation/CreatorProtocolEngine.java | 4 +++ .../invitation/InviteeProtocolEngine.java | 2 ++ .../briar/sharing/ProtocolEngineImpl.java | 15 +++++++++++ .../autodelete/AutoDeleteManagerImplTest.java | 3 +-- .../MessageSizeIntegrationTestComponent.java | 2 ++ ...plexMessagingIntegrationTestComponent.java | 2 ++ .../AbstractProtocolEngineTest.java | 25 ++++++++++++++++--- .../invitation/CreatorProtocolEngineTest.java | 14 +++-------- .../invitation/InviteeProtocolEngineTest.java | 4 +-- 14 files changed, 97 insertions(+), 23 deletions(-) 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 ee304f845..7d1894a3a 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 @@ -244,6 +244,13 @@ abstract class AbstractProtocolEngine> return conversationManager.getTimestampForOutgoingMessage(txn, c); } + void receiveAutoDeleteTimer(Transaction txn, AbstractIntroductionMessage m) + throws DbException { + ContactId c = getContactId(txn, m.getGroupId()); + autoDeleteManager.receiveAutoDeleteTimer(txn, c, m.getAutoDeleteTimer(), + m.getTimestamp()); + } + private ContactId getContactId(Transaction txn, GroupId contactGroupId) throws DbException { try { diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java index 5f1a2833f..4ea339851 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeProtocolEngine.java @@ -259,6 +259,9 @@ class IntroduceeProtocolEngine messageTracker .trackMessage(txn, m.getGroupId(), m.getTimestamp(), false); + // Receive the auto-delete timer + receiveAutoDeleteTimer(txn, m); + // Broadcast IntroductionRequestReceivedEvent LocalAuthor localAuthor = identityManager.getLocalAuthor(txn); Contact c = contactManager.getContact(txn, s.getIntroducer().getId(), @@ -334,8 +337,7 @@ class IntroduceeProtocolEngine } private IntroduceeSession onRemoteAccept(Transaction txn, - IntroduceeSession s, AcceptMessage m) - throws DbException { + IntroduceeSession s, AcceptMessage m) throws DbException { // The timestamp must be higher than the last request message if (m.getTimestamp() <= s.getRequestTimestamp()) return abort(txn, s); @@ -343,6 +345,9 @@ class IntroduceeProtocolEngine if (isInvalidDependency(s, m.getPreviousMessageId())) return abort(txn, s); + // Receive the auto-delete timer + receiveAutoDeleteTimer(txn, m); + // Determine next state IntroduceeState state = s.getState() == AWAIT_RESPONSES ? REMOTE_ACCEPTED : AWAIT_AUTH; @@ -372,6 +377,9 @@ class IntroduceeProtocolEngine messageTracker .trackMessage(txn, m.getGroupId(), m.getTimestamp(), false); + // Receive the auto-delete timer + receiveAutoDeleteTimer(txn, m); + // Broadcast IntroductionResponseReceivedEvent broadcastIntroductionResponseReceivedEvent(txn, s, s.getIntroducer().getId(), s.getRemote().author, m, false); diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroducerProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroducerProtocolEngine.java index 3607a354b..b0d1dbdd7 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroducerProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroducerProtocolEngine.java @@ -262,6 +262,8 @@ class IntroducerProtocolEngine // Track the incoming message messageTracker .trackMessage(txn, m.getGroupId(), m.getTimestamp(), false); + // Receive the auto-delete timer + receiveAutoDeleteTimer(txn, m); // Forward ACCEPT message Introducee i = getOtherIntroducee(s, m.getGroupId()); @@ -323,6 +325,8 @@ class IntroducerProtocolEngine // Track the incoming message messageTracker .trackMessage(txn, m.getGroupId(), m.getTimestamp(), false); + // Receive the auto-delete timer + receiveAutoDeleteTimer(txn, m); // Forward ACCEPT message Introducee i = getOtherIntroducee(s, m.getGroupId()); @@ -376,6 +380,8 @@ class IntroducerProtocolEngine // Track the incoming message messageTracker .trackMessage(txn, m.getGroupId(), m.getTimestamp(), false); + // Receive the auto-delete timer + receiveAutoDeleteTimer(txn, m); // Forward DECLINE message Introducee i = getOtherIntroducee(s, m.getGroupId()); @@ -429,6 +435,8 @@ class IntroducerProtocolEngine // Track the incoming message messageTracker .trackMessage(txn, m.getGroupId(), m.getTimestamp(), false); + // Receive the auto-delete timer + receiveAutoDeleteTimer(txn, m); // Forward DECLINE message Introducee i = getOtherIntroducee(s, m.getGroupId()); 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 a79a91574..45ff75687 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 @@ -29,6 +29,7 @@ import org.briarproject.bramble.api.versioning.ClientVersioningManager; import org.briarproject.bramble.api.versioning.ClientVersioningManager.ClientVersioningHook; import org.briarproject.briar.api.attachment.AttachmentHeader; import org.briarproject.briar.api.attachment.FileTooBigException; +import org.briarproject.briar.api.autodelete.AutoDeleteManager; import org.briarproject.briar.api.client.MessageTracker; import org.briarproject.briar.api.client.MessageTracker.GroupCount; import org.briarproject.briar.api.conversation.ConversationManager.ConversationClient; @@ -87,18 +88,24 @@ class MessagingManagerImpl implements MessagingManager, IncomingMessageHook, private final MessageTracker messageTracker; private final ClientVersioningManager clientVersioningManager; private final ContactGroupFactory contactGroupFactory; + private final AutoDeleteManager autoDeleteManager; @Inject - MessagingManagerImpl(DatabaseComponent db, ClientHelper clientHelper, + MessagingManagerImpl( + DatabaseComponent db, + ClientHelper clientHelper, ClientVersioningManager clientVersioningManager, - MetadataParser metadataParser, MessageTracker messageTracker, - ContactGroupFactory contactGroupFactory) { + MetadataParser metadataParser, + MessageTracker messageTracker, + ContactGroupFactory contactGroupFactory, + AutoDeleteManager autoDeleteManager) { this.db = db; this.clientHelper = clientHelper; this.metadataParser = metadataParser; this.messageTracker = messageTracker; this.clientVersioningManager = clientVersioningManager; this.contactGroupFactory = contactGroupFactory; + this.autoDeleteManager = autoDeleteManager; } @Override @@ -203,6 +210,8 @@ class MessagingManagerImpl implements MessagingManager, IncomingMessageHook, new PrivateMessageReceivedEvent(header, contactId); txn.attach(event); messageTracker.trackIncomingMessage(txn, m); + autoDeleteManager.receiveAutoDeleteTimer(txn, contactId, timer, + timestamp); } private List parseAttachmentHeaders(GroupId g, 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 96a2f17f7..d11db5bbb 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 @@ -300,6 +300,13 @@ abstract class AbstractProtocolEngine> return max(s.getLocalTimestamp(), s.getInviteTimestamp()); } + void receiveAutoDeleteTimer(Transaction txn, + DeletableGroupInvitationMessage m) throws DbException { + ContactId c = getContactId(txn, m.getContactGroupId()); + autoDeleteManager.receiveAutoDeleteTimer(txn, c, m.getAutoDeleteTimer(), + m.getTimestamp()); + } + private void sendMessage(Transaction txn, Message m, MessageType type, GroupId privateGroupId, boolean visibleInConversation, long autoDeleteTimer) throws DbException { 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 ac483b1d6..07ff7a802 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 @@ -201,6 +201,8 @@ class CreatorProtocolEngine extends AbstractProtocolEngine { // Track the message messageTracker.trackMessage(txn, m.getContactGroupId(), m.getTimestamp(), false); + // Receive the auto-delete timer + receiveAutoDeleteTimer(txn, m); // Share the private group with the contact setPrivateGroupVisibility(txn, s, SHARED); // Broadcast an event @@ -226,6 +228,8 @@ class CreatorProtocolEngine extends AbstractProtocolEngine { // Track the message messageTracker.trackMessage(txn, m.getContactGroupId(), m.getTimestamp(), false); + // Receive the auto-delete timer + receiveAutoDeleteTimer(txn, m); // Broadcast an event ContactId contactId = clientHelper.getContactId(txn, m.getContactGroupId()); 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 87d82fdff..d7fdd070b 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 @@ -251,6 +251,8 @@ class InviteeProtocolEngine extends AbstractProtocolEngine { // Track the message messageTracker.trackMessage(txn, m.getContactGroupId(), m.getTimestamp(), false); + // Receive the auto-delete timer + receiveAutoDeleteTimer(txn, m); // Broadcast an event PrivateGroup privateGroup = privateGroupFactory.createPrivateGroup( m.getGroupName(), m.getCreator(), m.getSalt()); 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 8c3c423a5..381c22a12 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 @@ -360,6 +360,8 @@ abstract class ProtocolEngineImpl // Track the message messageTracker.trackMessage(txn, m.getContactGroupId(), m.getTimestamp(), false); + // Receive the auto-delete timer + receiveAutoDeleteTimer(txn, m); // Broadcast an event ContactId contactId = clientHelper.getContactId(txn, s.getContactGroupId()); @@ -385,6 +387,8 @@ abstract class ProtocolEngineImpl // Track the message messageTracker.trackMessage(txn, m.getContactGroupId(), m.getTimestamp(), false); + // Receive the auto-delete timer + receiveAutoDeleteTimer(txn, m); // Share the shareable with the contact setShareableVisibility(txn, s, SHARED); // Broadcast an event @@ -432,6 +436,8 @@ abstract class ProtocolEngineImpl // Track the message messageTracker.trackMessage(txn, m.getContactGroupId(), m.getTimestamp(), false); + // Receive the auto-delete timer + receiveAutoDeleteTimer(txn, m); // Broadcast an event ContactId contactId = clientHelper.getContactId(txn, m.getContactGroupId()); @@ -485,6 +491,8 @@ abstract class ProtocolEngineImpl // Track the message messageTracker.trackMessage(txn, m.getContactGroupId(), m.getTimestamp(), false); + // Receive the auto-delete timer + receiveAutoDeleteTimer(txn, m); // Make the shareable invisible (not actually needed in REMOTE_HANGING) try { setShareableVisibility(txn, s, INVISIBLE); @@ -719,6 +727,13 @@ abstract class ProtocolEngineImpl return max(s.getLocalTimestamp(), s.getInviteTimestamp()); } + private void receiveAutoDeleteTimer(Transaction txn, + DeletableSharingMessage m) throws DbException { + ContactId c = getContactId(txn, m.getContactGroupId()); + autoDeleteManager.receiveAutoDeleteTimer(txn, c, m.getAutoDeleteTimer(), + m.getTimestamp()); + } + private ContactId getContactId(Transaction txn, GroupId contactGroupId) throws DbException { try { diff --git a/briar-core/src/test/java/org/briarproject/briar/autodelete/AutoDeleteManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/autodelete/AutoDeleteManagerImplTest.java index d63ac338e..853b931eb 100644 --- a/briar-core/src/test/java/org/briarproject/briar/autodelete/AutoDeleteManagerImplTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/autodelete/AutoDeleteManagerImplTest.java @@ -28,8 +28,7 @@ import static org.briarproject.briar.autodelete.AutoDeleteConstants.GROUP_KEY_TI import static org.briarproject.briar.autodelete.AutoDeleteConstants.NO_PREVIOUS_TIMER; import static org.junit.Assert.assertEquals; -// Thank you, I'm using them for readability -@SuppressWarnings("UnnecessaryLocalVariable") +@SuppressWarnings("UnnecessaryLocalVariable") // Using them for readability public class AutoDeleteManagerImplTest extends BrambleMockTestCase { private final DatabaseComponent db = context.mock(DatabaseComponent.class); diff --git a/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTestComponent.java b/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTestComponent.java index 4aa2e44e6..214ccf854 100644 --- a/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTestComponent.java +++ b/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTestComponent.java @@ -3,6 +3,7 @@ package org.briarproject.briar.messaging; import org.briarproject.bramble.BrambleCoreIntegrationTestEagerSingletons; import org.briarproject.bramble.BrambleCoreModule; import org.briarproject.bramble.test.BrambleCoreIntegrationTestModule; +import org.briarproject.briar.autodelete.AutoDeleteModule; import org.briarproject.briar.avatar.AvatarModule; import org.briarproject.briar.client.BriarClientModule; import org.briarproject.briar.forum.ForumModule; @@ -17,6 +18,7 @@ import dagger.Component; BrambleCoreIntegrationTestModule.class, BrambleCoreModule.class, BriarClientModule.class, + AutoDeleteModule.class, AvatarModule.class, ForumModule.class, IdentityModule.class, diff --git a/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTestComponent.java b/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTestComponent.java index 250e8bbda..56ba72fe3 100644 --- a/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTestComponent.java +++ b/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTestComponent.java @@ -10,6 +10,7 @@ import org.briarproject.bramble.api.lifecycle.LifecycleManager; import org.briarproject.bramble.test.BrambleCoreIntegrationTestModule; import org.briarproject.briar.api.messaging.MessagingManager; import org.briarproject.briar.api.messaging.PrivateMessageFactory; +import org.briarproject.briar.autodelete.AutoDeleteModule; import org.briarproject.briar.client.BriarClientModule; import javax.inject.Singleton; @@ -18,6 +19,7 @@ import dagger.Component; @Singleton @Component(modules = { + AutoDeleteModule.class, BrambleCoreIntegrationTestModule.class, BrambleCoreModule.class, BriarClientModule.class, 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 991023c4b..1978d2b7f 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 @@ -153,7 +153,7 @@ abstract class AbstractProtocolEngineTest extends BrambleMockTestCase { if (visible) expectGetTimestampForVisibleMessage(messageTimestamp); else expectGetTimestampForInvisibleMessage(messageTimestamp); expectCheckWhetherContactSupportsAutoDeletion(); - if (visible) expectGetAutoDeleteTimer(); + if (visible) expectGetAutoDeleteTimer(messageTimestamp); context.checking(new Expectations() {{ oneOf(messageEncoder).encodeJoinMessage(m.getContactGroupId(), m.getPrivateGroupId(), m.getTimestamp(), @@ -167,7 +167,7 @@ abstract class AbstractProtocolEngineTest extends BrambleMockTestCase { if (visible) expectGetTimestampForVisibleMessage(messageTimestamp); else expectGetTimestampForInvisibleMessage(messageTimestamp); expectCheckWhetherContactSupportsAutoDeletion(); - if (visible) expectGetAutoDeleteTimer(); + if (visible) expectGetAutoDeleteTimer(messageTimestamp); context.checking(new Expectations() {{ oneOf(messageEncoder).encodeLeaveMessage(contactGroupId, privateGroupId, messageTimestamp, lastLocalMessageId, @@ -254,11 +254,28 @@ abstract class AbstractProtocolEngineTest extends BrambleMockTestCase { }}); } - void expectGetAutoDeleteTimer() throws Exception { + void expectGetAutoDeleteTimer(long timestamp) throws Exception { context.checking(new Expectations() {{ oneOf(autoDeleteManager).getAutoDeleteTimer(txn, contactId, - localTimestamp); + timestamp); will(returnValue(NO_AUTO_DELETE_TIMER)); }}); } + + void expectTrackUnreadMessage(long timestamp) throws Exception { + context.checking(new Expectations() {{ + oneOf(messageTracker).trackMessage(txn, contactGroupId, timestamp, + false); + }}); + } + + void expectReceiveAutoDeleteTimer(DeletableGroupInvitationMessage m) + throws Exception { + context.checking(new Expectations() {{ + oneOf(clientHelper).getContactId(txn, contactGroupId); + will(returnValue(contactId)); + oneOf(autoDeleteManager).receiveAutoDeleteTimer(txn, contactId, + m.getAutoDeleteTimer(), m.getTimestamp()); + }}); + } } diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java index 6faaace02..4a3e7fb85 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngineTest.java @@ -308,11 +308,8 @@ public class CreatorProtocolEngineTest extends AbstractProtocolEngineTest { expectSendJoinMessage(properJoinMessage, false); expectMarkMessageVisibleInUi(properJoinMessage.getId()); - context.checking(new Expectations() {{ - oneOf(messageTracker) - .trackMessage(txn, contactGroupId, inviteTimestamp + 1, - false); - }}); + expectTrackUnreadMessage(properJoinMessage.getTimestamp()); + expectReceiveAutoDeleteTimer(properJoinMessage); expectGetContactId(); expectSetPrivateGroupVisibility(SHARED); CreatorSession newSession = @@ -399,11 +396,8 @@ public class CreatorProtocolEngineTest extends AbstractProtocolEngineTest { CreatorSession session = getDefaultSession(INVITED); expectMarkMessageVisibleInUi(properLeaveMessage.getId()); - context.checking(new Expectations() {{ - oneOf(messageTracker) - .trackMessage(txn, contactGroupId, inviteTimestamp + 1, - false); - }}); + expectTrackUnreadMessage(properLeaveMessage.getTimestamp()); + expectReceiveAutoDeleteTimer(properLeaveMessage); expectGetContactId(); CreatorSession newSession = engine.onLeaveMessage(txn, session, properLeaveMessage); diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java index 27c635d3c..7631aeb83 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java @@ -366,9 +366,9 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest { }}); expectMarkMessageVisibleInUi(properInviteMessage.getId()); expectMarkMessageAvailableToAnswer(properInviteMessage.getId(), true); + expectTrackUnreadMessage(properInviteMessage.getTimestamp()); + expectReceiveAutoDeleteTimer(properInviteMessage); context.checking(new Expectations() {{ - oneOf(messageTracker).trackMessage(txn, contactGroupId, - properInviteMessage.getTimestamp(), false); oneOf(privateGroupFactory) .createPrivateGroup(properInviteMessage.getGroupName(), properInviteMessage.getCreator(),