mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-19 06:09:55 +01:00
Broadcast events for private group invitations.
This commit is contained in:
@@ -7,7 +7,8 @@ import org.briarproject.api.db.DatabaseExecutor;
|
|||||||
import org.briarproject.api.db.DbException;
|
import org.briarproject.api.db.DbException;
|
||||||
import org.briarproject.api.event.Event;
|
import org.briarproject.api.event.Event;
|
||||||
import org.briarproject.api.event.EventBus;
|
import org.briarproject.api.event.EventBus;
|
||||||
import org.briarproject.api.event.GroupInvitationReceivedEvent;
|
import org.briarproject.api.event.GroupInvitationRequestReceivedEvent;
|
||||||
|
import org.briarproject.api.event.GroupInvitationResponseReceivedEvent;
|
||||||
import org.briarproject.api.lifecycle.LifecycleManager;
|
import org.briarproject.api.lifecycle.LifecycleManager;
|
||||||
import org.briarproject.api.privategroup.PrivateGroup;
|
import org.briarproject.api.privategroup.PrivateGroup;
|
||||||
import org.briarproject.api.privategroup.PrivateGroupManager;
|
import org.briarproject.api.privategroup.PrivateGroupManager;
|
||||||
@@ -44,8 +45,11 @@ public class GroupInvitationControllerImpl
|
|||||||
public void eventOccurred(Event e) {
|
public void eventOccurred(Event e) {
|
||||||
super.eventOccurred(e);
|
super.eventOccurred(e);
|
||||||
|
|
||||||
if (e instanceof GroupInvitationReceivedEvent) {
|
if (e instanceof GroupInvitationRequestReceivedEvent) {
|
||||||
LOG.info("Group invitation received, reloading");
|
LOG.info("Group invitation request received, reloading");
|
||||||
|
listener.loadInvitations(false);
|
||||||
|
} else if (e instanceof GroupInvitationResponseReceivedEvent) {
|
||||||
|
LOG.info("Group invitation response received, reloading");
|
||||||
listener.loadInvitations(false);
|
listener.loadInvitations(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
package org.briarproject.api.event;
|
package org.briarproject.api.event;
|
||||||
|
|
||||||
import org.briarproject.api.contact.ContactId;
|
import org.briarproject.api.contact.ContactId;
|
||||||
import org.briarproject.api.forum.ForumInvitationRequest;
|
|
||||||
import org.briarproject.api.privategroup.PrivateGroup;
|
import org.briarproject.api.privategroup.PrivateGroup;
|
||||||
import org.briarproject.api.privategroup.invitation.GroupInvitationRequest;
|
import org.briarproject.api.privategroup.invitation.GroupInvitationRequest;
|
||||||
|
|
||||||
public class GroupInvitationReceivedEvent extends
|
public class GroupInvitationRequestReceivedEvent extends
|
||||||
InvitationRequestReceivedEvent<PrivateGroup> {
|
InvitationRequestReceivedEvent<PrivateGroup> {
|
||||||
|
|
||||||
public GroupInvitationReceivedEvent(PrivateGroup group, ContactId contactId,
|
public GroupInvitationRequestReceivedEvent(PrivateGroup group,
|
||||||
GroupInvitationRequest request) {
|
ContactId contactId, GroupInvitationRequest request) {
|
||||||
super(group, contactId, request);
|
super(group, contactId, request);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package org.briarproject.api.event;
|
||||||
|
|
||||||
|
import org.briarproject.api.contact.ContactId;
|
||||||
|
import org.briarproject.api.sharing.InvitationResponse;
|
||||||
|
|
||||||
|
public class GroupInvitationResponseReceivedEvent
|
||||||
|
extends InvitationResponseReceivedEvent {
|
||||||
|
|
||||||
|
public GroupInvitationResponseReceivedEvent(ContactId contactId,
|
||||||
|
InvitationResponse response) {
|
||||||
|
super(contactId, response);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -41,10 +41,10 @@ abstract class AbstractProtocolEngine<S extends Session>
|
|||||||
protected final DatabaseComponent db;
|
protected final DatabaseComponent db;
|
||||||
protected final ClientHelper clientHelper;
|
protected final ClientHelper clientHelper;
|
||||||
protected final PrivateGroupManager privateGroupManager;
|
protected final PrivateGroupManager privateGroupManager;
|
||||||
|
protected final PrivateGroupFactory privateGroupFactory;
|
||||||
|
|
||||||
private final IdentityManager identityManager;
|
|
||||||
private final PrivateGroupFactory privateGroupFactory;
|
|
||||||
private final GroupMessageFactory groupMessageFactory;
|
private final GroupMessageFactory groupMessageFactory;
|
||||||
|
private final IdentityManager identityManager;
|
||||||
private final MessageParser messageParser;
|
private final MessageParser messageParser;
|
||||||
private final MessageEncoder messageEncoder;
|
private final MessageEncoder messageEncoder;
|
||||||
private final Clock clock;
|
private final Clock clock;
|
||||||
|
|||||||
@@ -3,14 +3,18 @@ package org.briarproject.privategroup.invitation;
|
|||||||
import org.briarproject.api.FormatException;
|
import org.briarproject.api.FormatException;
|
||||||
import org.briarproject.api.clients.ClientHelper;
|
import org.briarproject.api.clients.ClientHelper;
|
||||||
import org.briarproject.api.clients.ProtocolStateException;
|
import org.briarproject.api.clients.ProtocolStateException;
|
||||||
|
import org.briarproject.api.clients.SessionId;
|
||||||
|
import org.briarproject.api.contact.ContactId;
|
||||||
import org.briarproject.api.db.DatabaseComponent;
|
import org.briarproject.api.db.DatabaseComponent;
|
||||||
import org.briarproject.api.db.DbException;
|
import org.briarproject.api.db.DbException;
|
||||||
import org.briarproject.api.db.Transaction;
|
import org.briarproject.api.db.Transaction;
|
||||||
|
import org.briarproject.api.event.GroupInvitationResponseReceivedEvent;
|
||||||
import org.briarproject.api.identity.IdentityManager;
|
import org.briarproject.api.identity.IdentityManager;
|
||||||
import org.briarproject.api.nullsafety.NotNullByDefault;
|
import org.briarproject.api.nullsafety.NotNullByDefault;
|
||||||
import org.briarproject.api.privategroup.GroupMessageFactory;
|
import org.briarproject.api.privategroup.GroupMessageFactory;
|
||||||
import org.briarproject.api.privategroup.PrivateGroupFactory;
|
import org.briarproject.api.privategroup.PrivateGroupFactory;
|
||||||
import org.briarproject.api.privategroup.PrivateGroupManager;
|
import org.briarproject.api.privategroup.PrivateGroupManager;
|
||||||
|
import org.briarproject.api.privategroup.invitation.GroupInvitationResponse;
|
||||||
import org.briarproject.api.sync.Message;
|
import org.briarproject.api.sync.Message;
|
||||||
import org.briarproject.api.system.Clock;
|
import org.briarproject.api.system.Clock;
|
||||||
|
|
||||||
@@ -35,7 +39,7 @@ class CreatorProtocolEngine extends AbstractProtocolEngine<CreatorSession> {
|
|||||||
IdentityManager identityManager, MessageParser messageParser,
|
IdentityManager identityManager, MessageParser messageParser,
|
||||||
MessageEncoder messageEncoder, Clock clock) {
|
MessageEncoder messageEncoder, Clock clock) {
|
||||||
super(db, clientHelper, privateGroupManager, privateGroupFactory,
|
super(db, clientHelper, privateGroupManager, privateGroupFactory,
|
||||||
groupMessageFactory, identityManager,messageParser,
|
groupMessageFactory, identityManager, messageParser,
|
||||||
messageEncoder, clock);
|
messageEncoder, clock);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,10 +174,14 @@ class CreatorProtocolEngine extends AbstractProtocolEngine<CreatorSession> {
|
|||||||
// The dependency, if any, must be the last remote message
|
// The dependency, if any, must be the last remote message
|
||||||
if (!isValidDependency(s, m.getPreviousMessageId()))
|
if (!isValidDependency(s, m.getPreviousMessageId()))
|
||||||
return abort(txn, s);
|
return abort(txn, s);
|
||||||
// Mark the response visible
|
// Mark the response visible in the UI
|
||||||
markMessageVisibleInUi(txn, m.getId(), true);
|
markMessageVisibleInUi(txn, m.getId(), true);
|
||||||
// Start syncing the private group with the contact
|
// Start syncing the private group with the contact
|
||||||
syncPrivateGroupWithContact(txn, s, true);
|
syncPrivateGroupWithContact(txn, s, true);
|
||||||
|
// Broadcast an event
|
||||||
|
ContactId contactId = getContactId(txn, m.getContactGroupId());
|
||||||
|
txn.attach(new GroupInvitationResponseReceivedEvent(contactId,
|
||||||
|
createInvitationResponse(m, contactId, true)));
|
||||||
// Move to the INVITEE_JOINED state
|
// Move to the INVITEE_JOINED state
|
||||||
return new CreatorSession(s.getContactGroupId(), s.getPrivateGroupId(),
|
return new CreatorSession(s.getContactGroupId(), s.getPrivateGroupId(),
|
||||||
s.getLastLocalMessageId(), m.getId(), s.getLocalTimestamp(),
|
s.getLastLocalMessageId(), m.getId(), s.getLocalTimestamp(),
|
||||||
@@ -187,8 +195,12 @@ class CreatorProtocolEngine extends AbstractProtocolEngine<CreatorSession> {
|
|||||||
// The dependency, if any, must be the last remote message
|
// The dependency, if any, must be the last remote message
|
||||||
if (!isValidDependency(s, m.getPreviousMessageId()))
|
if (!isValidDependency(s, m.getPreviousMessageId()))
|
||||||
return abort(txn, s);
|
return abort(txn, s);
|
||||||
// Mark the response visible
|
// Mark the response visible in the UI
|
||||||
markMessageVisibleInUi(txn, m.getId(), true);
|
markMessageVisibleInUi(txn, m.getId(), true);
|
||||||
|
// Broadcast an event
|
||||||
|
ContactId contactId = getContactId(txn, m.getContactGroupId());
|
||||||
|
txn.attach(new GroupInvitationResponseReceivedEvent(contactId,
|
||||||
|
createInvitationResponse(m, contactId, false)));
|
||||||
// Move to the START state
|
// Move to the START state
|
||||||
return new CreatorSession(s.getContactGroupId(), s.getPrivateGroupId(),
|
return new CreatorSession(s.getContactGroupId(), s.getPrivateGroupId(),
|
||||||
s.getLastLocalMessageId(), m.getId(), s.getLocalTimestamp(),
|
s.getLastLocalMessageId(), m.getId(), s.getLocalTimestamp(),
|
||||||
@@ -224,4 +236,12 @@ class CreatorProtocolEngine extends AbstractProtocolEngine<CreatorSession> {
|
|||||||
sent.getId(), s.getLastRemoteMessageId(), sent.getTimestamp(),
|
sent.getId(), s.getLastRemoteMessageId(), sent.getTimestamp(),
|
||||||
s.getInviteTimestamp(), ERROR);
|
s.getInviteTimestamp(), ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private GroupInvitationResponse createInvitationResponse(
|
||||||
|
GroupInvitationMessage m, ContactId c, boolean accept) {
|
||||||
|
SessionId sessionId = new SessionId(m.getPrivateGroupId().getBytes());
|
||||||
|
return new GroupInvitationResponse(m.getId(), sessionId,
|
||||||
|
m.getContactGroupId(), c, accept, m.getTimestamp(), false,
|
||||||
|
false, true, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,16 +3,20 @@ package org.briarproject.privategroup.invitation;
|
|||||||
import org.briarproject.api.FormatException;
|
import org.briarproject.api.FormatException;
|
||||||
import org.briarproject.api.clients.ClientHelper;
|
import org.briarproject.api.clients.ClientHelper;
|
||||||
import org.briarproject.api.clients.ProtocolStateException;
|
import org.briarproject.api.clients.ProtocolStateException;
|
||||||
|
import org.briarproject.api.clients.SessionId;
|
||||||
import org.briarproject.api.contact.ContactId;
|
import org.briarproject.api.contact.ContactId;
|
||||||
import org.briarproject.api.db.DatabaseComponent;
|
import org.briarproject.api.db.DatabaseComponent;
|
||||||
import org.briarproject.api.db.DbException;
|
import org.briarproject.api.db.DbException;
|
||||||
import org.briarproject.api.db.Transaction;
|
import org.briarproject.api.db.Transaction;
|
||||||
|
import org.briarproject.api.event.GroupInvitationRequestReceivedEvent;
|
||||||
import org.briarproject.api.identity.Author;
|
import org.briarproject.api.identity.Author;
|
||||||
import org.briarproject.api.identity.IdentityManager;
|
import org.briarproject.api.identity.IdentityManager;
|
||||||
import org.briarproject.api.nullsafety.NotNullByDefault;
|
import org.briarproject.api.nullsafety.NotNullByDefault;
|
||||||
import org.briarproject.api.privategroup.GroupMessageFactory;
|
import org.briarproject.api.privategroup.GroupMessageFactory;
|
||||||
|
import org.briarproject.api.privategroup.PrivateGroup;
|
||||||
import org.briarproject.api.privategroup.PrivateGroupFactory;
|
import org.briarproject.api.privategroup.PrivateGroupFactory;
|
||||||
import org.briarproject.api.privategroup.PrivateGroupManager;
|
import org.briarproject.api.privategroup.PrivateGroupManager;
|
||||||
|
import org.briarproject.api.privategroup.invitation.GroupInvitationRequest;
|
||||||
import org.briarproject.api.sync.Message;
|
import org.briarproject.api.sync.Message;
|
||||||
import org.briarproject.api.sync.MessageId;
|
import org.briarproject.api.sync.MessageId;
|
||||||
import org.briarproject.api.system.Clock;
|
import org.briarproject.api.system.Clock;
|
||||||
@@ -196,6 +200,11 @@ class InviteeProtocolEngine extends AbstractProtocolEngine<InviteeSession> {
|
|||||||
// Mark the invite message visible in the UI and available to answer
|
// Mark the invite message visible in the UI and available to answer
|
||||||
markMessageVisibleInUi(txn, m.getId(), true);
|
markMessageVisibleInUi(txn, m.getId(), true);
|
||||||
markMessageAvailableToAnswer(txn, m.getId(), true);
|
markMessageAvailableToAnswer(txn, m.getId(), true);
|
||||||
|
// Broadcast an event
|
||||||
|
PrivateGroup privateGroup = privateGroupFactory.createPrivateGroup(
|
||||||
|
m.getGroupName(), m.getCreator(), m.getSalt());
|
||||||
|
txn.attach(new GroupInvitationRequestReceivedEvent(privateGroup,
|
||||||
|
contactId, createInvitationRequest(m, contactId)));
|
||||||
// Move to the INVITED state
|
// Move to the INVITED state
|
||||||
return new InviteeSession(s.getContactGroupId(), s.getPrivateGroupId(),
|
return new InviteeSession(s.getContactGroupId(), s.getPrivateGroupId(),
|
||||||
s.getLastLocalMessageId(), m.getId(), s.getLocalTimestamp(),
|
s.getLastLocalMessageId(), m.getId(), s.getLocalTimestamp(),
|
||||||
@@ -239,4 +248,13 @@ class InviteeProtocolEngine extends AbstractProtocolEngine<InviteeSession> {
|
|||||||
sent.getId(), s.getLastRemoteMessageId(), sent.getTimestamp(),
|
sent.getId(), s.getLastRemoteMessageId(), sent.getTimestamp(),
|
||||||
s.getInviteTimestamp(), ERROR);
|
s.getInviteTimestamp(), ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private GroupInvitationRequest createInvitationRequest(InviteMessage m,
|
||||||
|
ContactId c) {
|
||||||
|
SessionId sessionId = new SessionId(m.getPrivateGroupId().getBytes());
|
||||||
|
return new GroupInvitationRequest(m.getId(), sessionId,
|
||||||
|
m.getContactGroupId(), c, m.getMessage(), m.getGroupName(),
|
||||||
|
m.getCreator(), true, m.getTimestamp(), false, false, true,
|
||||||
|
false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user