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