Add a stub for a GroupInvitationManager

This commit is contained in:
Torsten Grote
2016-10-17 10:35:29 -02:00
parent 8eeaf4e347
commit a33d7d1663
14 changed files with 372 additions and 24 deletions

View File

@@ -1,17 +1,19 @@
package org.briarproject.privategroup;
import org.briarproject.api.clients.ClientHelper;
import org.briarproject.api.contact.ContactManager;
import org.briarproject.api.crypto.CryptoComponent;
import org.briarproject.api.data.MetadataEncoder;
import org.briarproject.api.identity.AuthorFactory;
import org.briarproject.api.lifecycle.LifecycleManager;
import org.briarproject.api.messaging.ConversationManager;
import org.briarproject.api.privategroup.GroupMessageFactory;
import org.briarproject.api.privategroup.PrivateGroupFactory;
import org.briarproject.api.privategroup.PrivateGroupManager;
import org.briarproject.api.sync.GroupFactory;
import org.briarproject.api.privategroup.invitation.GroupInvitationManager;
import org.briarproject.api.sync.ValidationManager;
import org.briarproject.api.system.Clock;
import java.security.SecureRandom;
import org.briarproject.privategroup.invitation.GroupInvitationManagerImpl;
import javax.inject.Inject;
import javax.inject.Singleton;
@@ -25,6 +27,8 @@ public class PrivateGroupModule {
public static class EagerSingletons {
@Inject
GroupMessageValidator groupMessageValidator;
@Inject
GroupInvitationManager groupInvitationManager;
}
@Provides
@@ -65,4 +69,22 @@ public class PrivateGroupModule {
return validator;
}
@Provides
@Singleton
GroupInvitationManager provideGroupInvitationManager(
LifecycleManager lifecycleManager, ContactManager contactManager,
GroupInvitationManagerImpl groupInvitationManager,
ConversationManager conversationManager,
ValidationManager validationManager) {
validationManager.registerIncomingMessageHook(
groupInvitationManager.getClientId(), groupInvitationManager);
lifecycleManager.registerClient(groupInvitationManager);
contactManager.registerAddContactHook(groupInvitationManager);
contactManager.registerRemoveContactHook(groupInvitationManager);
conversationManager.registerConversationClient(groupInvitationManager);
return groupInvitationManager;
}
}

View File

@@ -0,0 +1,141 @@
package org.briarproject.privategroup.invitation;
import org.briarproject.api.FormatException;
import org.briarproject.api.clients.Client;
import org.briarproject.api.clients.ClientHelper;
import org.briarproject.api.clients.ContactGroupFactory;
import org.briarproject.api.clients.SessionId;
import org.briarproject.api.contact.Contact;
import org.briarproject.api.contact.ContactId;
import org.briarproject.api.contact.ContactManager;
import org.briarproject.api.data.BdfDictionary;
import org.briarproject.api.data.BdfList;
import org.briarproject.api.data.MetadataParser;
import org.briarproject.api.db.DatabaseComponent;
import org.briarproject.api.db.DbException;
import org.briarproject.api.db.Transaction;
import org.briarproject.api.messaging.ConversationManager;
import org.briarproject.api.privategroup.PrivateGroup;
import org.briarproject.api.privategroup.invitation.GroupInvitationItem;
import org.briarproject.api.privategroup.invitation.GroupInvitationManager;
import org.briarproject.api.sharing.InvitationMessage;
import org.briarproject.api.sync.ClientId;
import org.briarproject.api.sync.Group;
import org.briarproject.api.sync.GroupId;
import org.briarproject.api.sync.Message;
import org.briarproject.clients.ConversationClientImpl;
import org.briarproject.util.StringUtils;
import java.util.ArrayList;
import java.util.Collection;
import javax.inject.Inject;
import static org.briarproject.api.privategroup.invitation.GroupInvitationConstants.CONTACT_ID;
public class GroupInvitationManagerImpl extends ConversationClientImpl
implements GroupInvitationManager, Client,
ContactManager.AddContactHook, ContactManager.RemoveContactHook,
ConversationManager.ConversationClient {
private static final ClientId CLIENT_ID =
new ClientId(StringUtils.fromHexString(
"B55231ABFC4A10666CD93D649B1D7F4F"
+ "016E65B87BB4C04F4E35613713DBCD13"));
private final ContactGroupFactory contactGroupFactory;
private final Group localGroup;
@Inject
protected GroupInvitationManagerImpl(DatabaseComponent db,
ClientHelper clientHelper, MetadataParser metadataParser,
ContactGroupFactory contactGroupFactory) {
super(db, clientHelper, metadataParser);
this.contactGroupFactory = contactGroupFactory;
localGroup = contactGroupFactory.createLocalGroup(getClientId());
}
@Override
public ClientId getClientId() {
return CLIENT_ID;
}
@Override
public void createLocalState(Transaction txn) throws DbException {
db.addGroup(txn, localGroup);
// Ensure we've set things up for any pre-existing contacts
for (Contact c : db.getContacts(txn)) addingContact(txn, c);
}
@Override
public void addingContact(Transaction txn, Contact c) throws DbException {
try {
// Create a group to share with the contact
Group g = getContactGroup(c);
// Return if we've already set things up for this contact
if (db.containsGroup(txn, g.getId())) return;
// Store the group and share it with the contact
db.addGroup(txn, g);
db.setVisibleToContact(txn, c.getId(), g.getId(), true);
// Attach the contact ID to the group
BdfDictionary meta = new BdfDictionary();
meta.put(CONTACT_ID, c.getId().getInt());
clientHelper.mergeGroupMetadata(txn, g.getId(), meta);
} catch (FormatException e) {
throw new DbException(e);
}
}
@Override
public void removingContact(Transaction txn, Contact c) throws DbException {
// remove the contact group (all messages will be removed with it)
db.removeGroup(txn, getContactGroup(c));
}
@Override
protected Group getContactGroup(Contact c) {
return contactGroupFactory.createContactGroup(getClientId(), c);
}
@Override
protected boolean incomingMessage(Transaction txn, Message m, BdfList body,
BdfDictionary meta) throws DbException, FormatException {
return false;
}
@Override
public void sendInvitation(GroupId groupId, ContactId contactId,
String message) throws DbException {
}
@Override
public void respondToInvitation(PrivateGroup g, Contact c, boolean accept)
throws DbException {
}
@Override
public void respondToInvitation(SessionId id, boolean accept)
throws DbException {
}
@Override
public Collection<InvitationMessage> getInvitationMessages(
ContactId contactId) throws DbException {
Collection<InvitationMessage> invitations =
new ArrayList<InvitationMessage>();
return invitations;
}
@Override
public Collection<GroupInvitationItem> getInvitations() throws DbException {
Collection<GroupInvitationItem> invitations =
new ArrayList<GroupInvitationItem>();
return invitations;
}
}

View File

@@ -25,7 +25,7 @@ import org.briarproject.api.event.Event;
import org.briarproject.api.event.InvitationRequestReceivedEvent;
import org.briarproject.api.event.InvitationResponseReceivedEvent;
import org.briarproject.api.identity.LocalAuthor;
import org.briarproject.api.sharing.InvitationItem;
import org.briarproject.api.sharing.SharingInvitationItem;
import org.briarproject.api.sharing.InvitationMessage;
import org.briarproject.api.sharing.Shareable;
import org.briarproject.api.sharing.SharingManager;
@@ -418,8 +418,8 @@ abstract class SharingManagerImpl<S extends Shareable, I extends Invitation, IS
}
@Override
public Collection<InvitationItem> getInvitations() throws DbException {
List<InvitationItem> invitations = new ArrayList<InvitationItem>();
public Collection<SharingInvitationItem> getInvitations() throws DbException {
List<SharingInvitationItem> invitations = new ArrayList<SharingInvitationItem>();
Transaction txn = db.startTransaction(true);
try {
Set<S> shareables = new HashSet<S>();
@@ -445,8 +445,8 @@ abstract class SharingManagerImpl<S extends Shareable, I extends Invitation, IS
for (S s : shareables) {
Collection<Contact> newS = newSharers.get(s.getId());
boolean subscribed = db.containsGroup(txn, s.getId());
InvitationItem invitation =
new InvitationItem(s, subscribed, newS);
SharingInvitationItem invitation =
new SharingInvitationItem(s, subscribed, newS);
invitations.add(invitation);
}
txn.setComplete();