From 14e604e21e233d8f0b9c0603df658a2268cc09fa Mon Sep 17 00:00:00 2001 From: akwizgran Date: Mon, 27 May 2019 11:40:28 +0100 Subject: [PATCH] Add 'verified' flag to ContactAddedEvent. --- .../api/contact/event/ContactAddedEvent.java | 8 ++++++- .../event/ContactAddedRemotelyEvent.java | 22 ------------------- .../bramble/db/DatabaseComponentImpl.java | 4 ++-- .../bramble/plugin/PollerImplTest.java | 2 +- .../AndroidNotificationManagerImpl.java | 8 ++++--- .../IntroduceeProtocolEngine.java | 5 ----- .../IntroductionIntegrationTest.java | 13 ++++------- .../headless/contact/ContactControllerImpl.kt | 8 +++---- .../briar/headless/contact/OutputContact.kt | 7 +++--- .../headless/contact/ContactControllerTest.kt | 15 +++++++------ 10 files changed, 35 insertions(+), 57 deletions(-) delete mode 100644 bramble-api/src/main/java/org/briarproject/bramble/api/contact/event/ContactAddedRemotelyEvent.java diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/event/ContactAddedEvent.java b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/event/ContactAddedEvent.java index e741777db..76550bea3 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/event/ContactAddedEvent.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/event/ContactAddedEvent.java @@ -14,12 +14,18 @@ import javax.annotation.concurrent.Immutable; public class ContactAddedEvent extends Event { private final ContactId contactId; + private final boolean verified; - public ContactAddedEvent(ContactId contactId) { + public ContactAddedEvent(ContactId contactId, boolean verified) { this.contactId = contactId; + this.verified = verified; } public ContactId getContactId() { return contactId; } + + public boolean isVerified() { + return verified; + } } diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/event/ContactAddedRemotelyEvent.java b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/event/ContactAddedRemotelyEvent.java deleted file mode 100644 index b657d568d..000000000 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/event/ContactAddedRemotelyEvent.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.briarproject.bramble.api.contact.event; - -import org.briarproject.bramble.api.contact.Contact; -import org.briarproject.bramble.api.event.Event; -import org.briarproject.bramble.api.nullsafety.NotNullByDefault; - -import javax.annotation.concurrent.Immutable; - -@Immutable -@NotNullByDefault -public class ContactAddedRemotelyEvent extends Event { - - private final Contact contact; - - public ContactAddedRemotelyEvent(Contact contact) { - this.contact = contact; - } - - public Contact getContact() { - return contact; - } -} diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java index 246a131ce..2d90894f3 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java @@ -244,7 +244,7 @@ class DatabaseComponentImpl implements DatabaseComponent { if (db.containsContact(txn, remote.getId(), local)) throw new ContactExistsException(local, remote); ContactId c = db.addContact(txn, remote, local, verified); - transaction.attach(new ContactAddedEvent(c)); + transaction.attach(new ContactAddedEvent(c, verified)); return c; } @@ -265,7 +265,7 @@ class DatabaseComponentImpl implements DatabaseComponent { ContactId c = db.addContact(txn, remote, local, verified); db.transferKeys(txn, p, c); db.removePendingContact(txn, p); - transaction.attach(new ContactAddedEvent(c)); + transaction.attach(new ContactAddedEvent(c, verified)); transaction.attach(new PendingContactRemovedEvent(p)); return c; } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/plugin/PollerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/plugin/PollerImplTest.java index 481de6755..255635a13 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/plugin/PollerImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/plugin/PollerImplTest.java @@ -153,7 +153,7 @@ public class PollerImplTest extends BrambleMockTestCase { will(returnValue(false)); }}); - poller.eventOccurred(new ContactAddedEvent(contactId)); + poller.eventOccurred(new ContactAddedEvent(contactId, true)); } @Test diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java index e2912f920..cf0b74416 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java @@ -16,6 +16,7 @@ import android.support.v4.app.TaskStackBuilder; import org.briarproject.bramble.api.Multiset; import org.briarproject.bramble.api.contact.ContactId; +import org.briarproject.bramble.api.contact.event.ContactAddedEvent; import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.event.Event; import org.briarproject.bramble.api.event.EventListener; @@ -42,7 +43,6 @@ import org.briarproject.briar.api.android.AndroidNotificationManager; import org.briarproject.briar.api.blog.event.BlogPostAddedEvent; import org.briarproject.briar.api.conversation.event.ConversationMessageReceivedEvent; import org.briarproject.briar.api.forum.event.ForumPostReceivedEvent; -import org.briarproject.bramble.api.contact.event.ContactAddedRemotelyEvent; import org.briarproject.briar.api.privategroup.event.GroupMessageAddedEvent; import java.util.Set; @@ -230,8 +230,10 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager, } else if (e instanceof BlogPostAddedEvent) { BlogPostAddedEvent b = (BlogPostAddedEvent) e; if (!b.isLocal()) showBlogPostNotification(b.getGroupId()); - } else if (e instanceof ContactAddedRemotelyEvent) { - showContactAddedNotification(); + } else if (e instanceof ContactAddedEvent) { + ContactAddedEvent c = (ContactAddedEvent) e; + // Don't show notifications for contacts added in person + if (!c.isVerified()) showContactAddedNotification(); } } 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 26e5da41d..a1b0964ad 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 @@ -5,7 +5,6 @@ import org.briarproject.bramble.api.client.ClientHelper; import org.briarproject.bramble.api.client.ContactGroupFactory; import org.briarproject.bramble.api.contact.Contact; import org.briarproject.bramble.api.contact.ContactManager; -import org.briarproject.bramble.api.contact.event.ContactAddedRemotelyEvent; import org.briarproject.bramble.api.crypto.KeyPair; import org.briarproject.bramble.api.crypto.PrivateKey; import org.briarproject.bramble.api.crypto.PublicKey; @@ -453,10 +452,6 @@ class IntroduceeProtocolEngine //noinspection ConstantConditions transportPropertyManager.addRemoteProperties(txn, c.getId(), s.getRemote().transportProperties); - - // Broadcast IntroductionSucceededEvent, because contact got added - ContactAddedRemotelyEvent e = new ContactAddedRemotelyEvent(c); - txn.attach(e); } catch (ContactExistsException e) { // Ignore this, because the other introducee might have deleted us. // So we still want updated transport properties diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java index 7e313436b..6cf552c03 100644 --- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java @@ -6,6 +6,7 @@ import org.briarproject.bramble.api.FormatException; import org.briarproject.bramble.api.client.ClientHelper; import org.briarproject.bramble.api.contact.Contact; import org.briarproject.bramble.api.contact.ContactId; +import org.briarproject.bramble.api.contact.event.ContactAddedEvent; import org.briarproject.bramble.api.data.BdfDictionary; import org.briarproject.bramble.api.data.BdfEntry; import org.briarproject.bramble.api.data.BdfList; @@ -32,7 +33,6 @@ import org.briarproject.briar.api.introduction.IntroductionResponse; import org.briarproject.briar.api.introduction.event.IntroductionAbortedEvent; import org.briarproject.briar.api.introduction.event.IntroductionRequestReceivedEvent; import org.briarproject.briar.api.introduction.event.IntroductionResponseReceivedEvent; -import org.briarproject.bramble.api.contact.event.ContactAddedRemotelyEvent; import org.briarproject.briar.test.BriarIntegrationTest; import org.junit.Before; import org.junit.Test; @@ -1217,7 +1217,6 @@ public class IntroductionIntegrationTest volatile boolean aborted = false; volatile Event latestEvent; - @SuppressWarnings("WeakerAccess") IntroductionResponse getResponse() { assertTrue( latestEvent instanceof IntroductionResponseReceivedEvent); @@ -1273,12 +1272,11 @@ public class IntroductionIntegrationTest // only broadcast for DECLINE messages in introducee role latestEvent = e; eventWaiter.resume(); - } else if (e instanceof ContactAddedRemotelyEvent) { + } else if (e instanceof ContactAddedEvent) { latestEvent = e; succeeded = true; - Contact contact = ((ContactAddedRemotelyEvent) e).getContact(); - eventWaiter - .assertFalse(contact.getId().equals(contactId0From1)); + ContactId contactId = ((ContactAddedEvent) e).getContactId(); + eventWaiter.assertFalse(contactId.equals(contactId0From1)); eventWaiter.resume(); } else if (e instanceof IntroductionAbortedEvent) { latestEvent = e; @@ -1357,13 +1355,10 @@ public class IntroductionIntegrationTest Message m = ch.getMessage(id); BdfList body = ch.getMessageAsList(id); if (type == ACCEPT) { - //noinspection ConstantConditions return c0.getMessageParser().parseAcceptMessage(m, body); } else if (type == DECLINE) { - //noinspection ConstantConditions return c0.getMessageParser().parseDeclineMessage(m, body); } else if (type == AUTH) { - //noinspection ConstantConditions return c0.getMessageParser().parseAuthMessage(m, body); } else throw new AssertionError("Not implemented"); } diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/contact/ContactControllerImpl.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/contact/ContactControllerImpl.kt index d1b1a757b..4d05471ae 100644 --- a/briar-headless/src/main/java/org/briarproject/briar/headless/contact/ContactControllerImpl.kt +++ b/briar-headless/src/main/java/org/briarproject/briar/headless/contact/ContactControllerImpl.kt @@ -7,7 +7,7 @@ import io.javalin.NotFoundResponse import org.briarproject.bramble.api.contact.ContactManager import org.briarproject.bramble.api.contact.HandshakeLinkConstants.LINK_REGEX import org.briarproject.bramble.api.contact.PendingContactId -import org.briarproject.bramble.api.contact.event.ContactAddedRemotelyEvent +import org.briarproject.bramble.api.contact.event.ContactAddedEvent import org.briarproject.bramble.api.contact.event.PendingContactAddedEvent import org.briarproject.bramble.api.contact.event.PendingContactRemovedEvent import org.briarproject.bramble.api.contact.event.PendingContactStateChangedEvent @@ -27,7 +27,7 @@ import javax.annotation.concurrent.Immutable import javax.inject.Inject import javax.inject.Singleton -internal const val EVENT_CONTACT_ADDED_REMOTELY = "ContactAddedRemotelyEvent" +internal const val EVENT_CONTACT_ADDED = "ContactAddedEvent" internal const val EVENT_PENDING_CONTACT_STATE_CHANGED = "PendingContactStateChangedEvent" internal const val EVENT_PENDING_CONTACT_ADDED = "PendingContactAddedEvent" internal const val EVENT_PENDING_CONTACT_REMOVED = "PendingContactRemovedEvent" @@ -43,8 +43,8 @@ constructor( ) : ContactController, EventListener { override fun eventOccurred(e: Event) = when (e) { - is ContactAddedRemotelyEvent -> { - webSocket.sendEvent(EVENT_CONTACT_ADDED_REMOTELY, e.output()) + is ContactAddedEvent -> { + webSocket.sendEvent(EVENT_CONTACT_ADDED, e.output()) } is PendingContactStateChangedEvent -> { webSocket.sendEvent(EVENT_PENDING_CONTACT_STATE_CHANGED, e.output()) diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/contact/OutputContact.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/contact/OutputContact.kt index 7f5f35f54..444950fe9 100644 --- a/briar-headless/src/main/java/org/briarproject/briar/headless/contact/OutputContact.kt +++ b/briar-headless/src/main/java/org/briarproject/briar/headless/contact/OutputContact.kt @@ -1,7 +1,7 @@ package org.briarproject.briar.headless.contact import org.briarproject.bramble.api.contact.Contact -import org.briarproject.bramble.api.contact.event.ContactAddedRemotelyEvent +import org.briarproject.bramble.api.contact.event.ContactAddedEvent import org.briarproject.bramble.identity.output import org.briarproject.briar.headless.json.JsonDict @@ -14,6 +14,7 @@ internal fun Contact.output() = JsonDict( handshakePublicKey?.let { put("handshakePublicKey", it.encoded) } } -internal fun ContactAddedRemotelyEvent.output() = JsonDict( - "contact" to contact.output() +internal fun ContactAddedEvent.output() = JsonDict( + "contactId" to contactId.int, + "verified" to isVerified ) diff --git a/briar-headless/src/test/java/org/briarproject/briar/headless/contact/ContactControllerTest.kt b/briar-headless/src/test/java/org/briarproject/briar/headless/contact/ContactControllerTest.kt index 3b2d2dcb5..0186323cc 100644 --- a/briar-headless/src/test/java/org/briarproject/briar/headless/contact/ContactControllerTest.kt +++ b/briar-headless/src/test/java/org/briarproject/briar/headless/contact/ContactControllerTest.kt @@ -13,7 +13,7 @@ import org.briarproject.bramble.api.contact.ContactId import org.briarproject.bramble.api.contact.PendingContactId import org.briarproject.bramble.api.contact.PendingContactState.FAILED import org.briarproject.bramble.api.contact.PendingContactState.WAITING_FOR_CONNECTION -import org.briarproject.bramble.api.contact.event.ContactAddedRemotelyEvent +import org.briarproject.bramble.api.contact.event.ContactAddedEvent import org.briarproject.bramble.api.contact.event.PendingContactAddedEvent import org.briarproject.bramble.api.contact.event.PendingContactRemovedEvent import org.briarproject.bramble.api.contact.event.PendingContactStateChangedEvent @@ -207,12 +207,12 @@ internal class ContactControllerTest : ControllerTest() { } @Test - fun testContactAddedRemotelyEvent() { - val event = ContactAddedRemotelyEvent(contact) + fun testContactAddedEvent() { + val event = ContactAddedEvent(contact.id, contact.isVerified) every { webSocketController.sendEvent( - EVENT_CONTACT_ADDED_REMOTELY, + EVENT_CONTACT_ADDED, event.output() ) } just runs @@ -291,11 +291,12 @@ internal class ContactControllerTest : ControllerTest() { } @Test - fun testOutputContactAddedRemotelyEvent() { - val event = ContactAddedRemotelyEvent(contact) + fun testOutputContactAddedEvent() { + val event = ContactAddedEvent(contact.id, contact.isVerified) val json = """ { - "contact": ${toJson(contact.output())} + "contactId": ${contact.id.int}, + "verified": ${contact.isVerified} } """ assertJsonEquals(json, event.output())