From 3a2205123f1b3c1fba6a4721196aeff1f2aa1e89 Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Fri, 11 Nov 2016 13:49:49 +0000
Subject: [PATCH] Added a method for revealing a contact to a private group.

---
 .../invitation/GroupInvitationManager.java    |  6 +++++
 .../GroupInvitationManagerImpl.java           | 24 +++++++++++++++++++
 2 files changed, 30 insertions(+)

diff --git a/briar-api/src/org/briarproject/api/privategroup/invitation/GroupInvitationManager.java b/briar-api/src/org/briarproject/api/privategroup/invitation/GroupInvitationManager.java
index 489e51a591..2a4d4539f3 100644
--- a/briar-api/src/org/briarproject/api/privategroup/invitation/GroupInvitationManager.java
+++ b/briar-api/src/org/briarproject/api/privategroup/invitation/GroupInvitationManager.java
@@ -42,6 +42,12 @@ public interface GroupInvitationManager {
 	void respondToInvitation(ContactId c, SessionId s, boolean accept)
 			throws DbException;
 
+	/**
+	 * Makes the user's relationship with the given contact visible to the
+	 * given private group.
+	 */
+	void revealRelationship(ContactId c, GroupId g) throws DbException;
+
 	/**
 	 * Returns all private group invitation messages related to the given
 	 * contact.
diff --git a/briar-core/src/org/briarproject/privategroup/invitation/GroupInvitationManagerImpl.java b/briar-core/src/org/briarproject/privategroup/invitation/GroupInvitationManagerImpl.java
index ae11b48b85..bc6dd88f6d 100644
--- a/briar-core/src/org/briarproject/privategroup/invitation/GroupInvitationManagerImpl.java
+++ b/briar-core/src/org/briarproject/privategroup/invitation/GroupInvitationManagerImpl.java
@@ -315,6 +315,30 @@ class GroupInvitationManagerImpl extends ConversationClientImpl
 		}
 	}
 
+	@Override
+	public void revealRelationship(ContactId c, GroupId g) throws DbException {
+		Transaction txn = db.startTransaction(false);
+		try {
+			// Look up the session
+			Contact contact = db.getContact(txn, c);
+			GroupId contactGroupId = getContactGroup(contact).getId();
+			StoredSession ss = getSession(txn, contactGroupId, getSessionId(g));
+			if (ss == null) throw new IllegalArgumentException();
+			// Parse the session
+			PeerSession session = sessionParser
+					.parsePeerSession(contactGroupId, ss.bdfSession);
+			// Handle the join action
+			session = peerEngine.onJoinAction(txn, session);
+			// Store the updated session
+			storeSession(txn, ss.storageId, session);
+			db.commitTransaction(txn);
+		} catch (FormatException e) {
+			throw new DbException(e);
+		} finally {
+			db.endTransaction(txn);
+		}
+	}
+
 	private <S extends Session> S handleAction(Transaction txn,
 			LocalAction type, S session, ProtocolEngine<S> engine)
 			throws DbException, FormatException {
-- 
GitLab