From c3b443389b92056d64dd4e4553900ea21ea4248f Mon Sep 17 00:00:00 2001 From: bontric <benjohnwie@gmail.com> Date: Fri, 28 Sep 2018 14:12:50 +0200 Subject: [PATCH] Add mailbox_contact type and initialisation for mailbox contacts --- .../bramble/api/contact/ContactFactory.java | 3 +++ .../bramble/api/contact/ContactManager.java | 4 +++ .../bramble/api/contact/MailboxContact.java | 27 +++++++++++++++++++ .../bramble/contact/ContactManagerImpl.java | 15 +++++++++++ .../briar/mailbox/MailboxProtocolEngine.java | 2 +- 5 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 bramble-api/src/main/java/org/briarproject/bramble/api/contact/MailboxContact.java diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactFactory.java b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactFactory.java index ab3eb6eae..431cf30a0 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactFactory.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactFactory.java @@ -22,6 +22,9 @@ public interface ContactFactory { case CONTACT_MAILBOX: return new ContactMailbox(c, author, localAuthorId, verified, active); + case MAILBOX_CONTACT: + return new MailboxContact(c, author, localAuthorId, verified, + active); default: throw new IllegalArgumentException("Unknown contact type"); } diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactManager.java b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactManager.java index b2b40209d..6eddbe828 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactManager.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactManager.java @@ -49,6 +49,10 @@ public interface ContactManager { long timestamp, boolean alice, boolean verified, boolean active) throws DbException; + ContactId addMailboxContact(Transaction txn, Author remote, AuthorId local, + boolean verified, boolean active) + throws DbException; + ContactId addPrivateMailbox(Author remote, AuthorId local, SecretKey master, long timestamp, boolean alice) throws DbException; diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/MailboxContact.java b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/MailboxContact.java new file mode 100644 index 000000000..0024d8d45 --- /dev/null +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/MailboxContact.java @@ -0,0 +1,27 @@ +package org.briarproject.bramble.api.contact; + +import org.briarproject.bramble.api.identity.Author; +import org.briarproject.bramble.api.identity.AuthorId; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; + +import javax.annotation.concurrent.Immutable; + +import static org.briarproject.bramble.api.contact.ContactType.CONTACT_MAILBOX; +import static org.briarproject.bramble.api.contact.ContactType.MAILBOX_CONTACT; + +@Immutable +@NotNullByDefault +public class MailboxContact extends Contact { + + public MailboxContact(ContactId id, + Author author, + AuthorId localAuthorId, + boolean verified, boolean active) { + super(id, author, localAuthorId, verified, active); + } + + @Override + public ContactType getType() { + return MAILBOX_CONTACT; + } +} diff --git a/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java index 74eac7db7..13976ffed 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java @@ -25,6 +25,7 @@ import javax.inject.Inject; import static org.briarproject.bramble.api.contact.ContactType.CONTACT; import static org.briarproject.bramble.api.contact.ContactType.CONTACT_MAILBOX; +import static org.briarproject.bramble.api.contact.ContactType.MAILBOX_CONTACT; import static org.briarproject.bramble.api.contact.ContactType.MAILBOX_OWNER; import static org.briarproject.bramble.api.contact.ContactType.PRIVATE_MAILBOX; @@ -92,6 +93,20 @@ class ContactManagerImpl implements ContactManager { return c; } + @Override + public ContactId addMailboxContact(Transaction txn, Author remote, AuthorId local, + boolean verified, boolean active) + throws DbException { + ContactId c = db.addContact(txn, remote, local, verified, active, + MAILBOX_CONTACT); + Contact contact = db.getContact(txn, c); + for (ContactHook hook : hooks) { + if (hook.getApplicableContactTypes().contains(contact.getType())) + hook.addingContact(txn, contact); + } + return c; + } + @Override public ContactId addPrivateMailbox(Author remote, AuthorId local, SecretKey master, diff --git a/mailbox-core/src/main/java/org/briarproject/briar/mailbox/MailboxProtocolEngine.java b/mailbox-core/src/main/java/org/briarproject/briar/mailbox/MailboxProtocolEngine.java index 29dfdeff9..edc8b7dab 100644 --- a/mailbox-core/src/main/java/org/briarproject/briar/mailbox/MailboxProtocolEngine.java +++ b/mailbox-core/src/main/java/org/briarproject/briar/mailbox/MailboxProtocolEngine.java @@ -218,7 +218,7 @@ class MailboxProtocolEngine extends AbstractProtocolEngine<MailboxSession> { crypto.sign(aliceMacKey, localAuthor.getPrivateKey()); contactManager - .addContact(txn, s.getRemote().author, localAuthor.getId(), + .addMailboxContact(txn, s.getRemote().author, localAuthor.getId(), false, true); // Only add transport properties and keys when the contact was added // This will be changed once we have a way to reset state for peers -- GitLab