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 ab3eb6eaeb29cb95f7ae4036c9f758bf3849e0e9..431cf30a0b0350a806d44a1124c988ad59a362db 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 b2b40209d2060d400ea1241897000abcb3d9c117..6eddbe82876a07c09bd6a382fcbbab44cc83bc83 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 0000000000000000000000000000000000000000..0024d8d455023ee55beb6d2e566bb2ef9c067127 --- /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 74eac7db723e4da1066953b724573a26de937eb0..13976ffed581b567ac4d7c98f535026406b5c8d3 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 29dfdeff91f3a9b13975010fdd6ba8910780b2cb..edc8b7dab4bc8d17f6ddc8d28a58d6a952e8d6af 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