Map any incoming group messages from slave devices to master devices.

Closed groups should only have master devices in them.
This commit is contained in:
Mikunj 2020-02-04 14:24:39 +11:00
parent ecc40368cb
commit efc2988576
1 changed files with 9 additions and 9 deletions

View File

@ -1402,6 +1402,8 @@ NS_ASSUME_NONNULL_BEGIN
return nil;
}
}
NSString *hexEncodedPublicKey = ([LKDatabaseUtilities getMasterHexEncodedPublicKeyFor:envelope.source in:transaction] ?: envelope.source);
// Group messages create the group if it doesn't already exist.
//
@ -1411,17 +1413,15 @@ NS_ASSUME_NONNULL_BEGIN
// Loki: Try to figure out removed members
removedMemberIds = [NSMutableSet setWithArray:oldGroupThread.groupModel.groupMemberIds];
[removedMemberIds minusSet:newMemberIds];
[removedMemberIds removeObject:envelope.source];
[removedMemberIds removeObject:hexEncodedPublicKey];
}
NSString *hexEncodedPublicKey = ([LKDatabaseUtilities getMasterHexEncodedPublicKeyFor:envelope.source in:transaction] ?: envelope.source);
// Only set the display name here, the logic for updating profile pictures is handled when we're setting profile key
[self handleProfileNameUpdateIfNeeded:dataMessage recipientId:hexEncodedPublicKey transaction:transaction];
switch (dataMessage.group.type) {
case SSKProtoGroupContextTypeUpdate: {
if (oldGroupThread && ![oldGroupThread.groupModel.groupAdminIds containsObject:envelope.source]) {
if (oldGroupThread && ![oldGroupThread.groupModel.groupAdminIds containsObject:hexEncodedPublicKey]) {
[LKLogger print:[NSString stringWithFormat:@"[Loki] Received a group update from a non-admin user for %@; ignoring.", [LKGroupUtilities getEncodedGroupID:groupId]]];
return nil;
}
@ -1464,12 +1464,12 @@ NS_ASSUME_NONNULL_BEGIN
OWSLogWarn(@"ignoring quit group message from unknown group.");
return nil;
}
[newMemberIds removeObject:envelope.source];
[newMemberIds removeObject:hexEncodedPublicKey];
oldGroupThread.groupModel.groupMemberIds = [newMemberIds.allObjects mutableCopy];
[oldGroupThread saveWithTransaction:transaction];
NSString *nameString =
[self.contactsManager displayNameForPhoneIdentifier:envelope.source transaction:transaction];
[self.contactsManager displayNameForPhoneIdentifier:hexEncodedPublicKey transaction:transaction];
NSString *updateGroupInfo =
[NSString stringWithFormat:NSLocalizedString(@"GROUP_MEMBER_LEFT", @""), nameString];
// MJK TODO - should be safe to remove senderTimestamp
@ -1487,7 +1487,7 @@ NS_ASSUME_NONNULL_BEGIN
[[OWSDisappearingMessagesJob sharedJob] becomeConsistentWithDisappearingDuration:dataMessage.expireTimer
thread:oldGroupThread
createdByRemoteRecipientId:envelope.source
createdByRemoteRecipientId:hexEncodedPublicKey
createdInExistingGroup:NO
transaction:transaction];
@ -1514,7 +1514,7 @@ NS_ASSUME_NONNULL_BEGIN
TSIncomingMessage *incomingMessage =
[[TSIncomingMessage alloc] initIncomingMessageWithTimestamp:timestamp
inThread:oldGroupThread
authorId:envelope.source
authorId:hexEncodedPublicKey
sourceDeviceId:envelope.sourceDevice
messageBody:body
attachmentIds:@[]
@ -1540,7 +1540,7 @@ NS_ASSUME_NONNULL_BEGIN
// Loki: Don't process friend requests in group chats
if (body.length == 0 && attachmentPointers.count < 1 && !contact) {
OWSLogWarn(@"ignoring empty incoming message from: %@ for group: %@ with timestamp: %lu",
envelopeAddress(envelope),
hexEncodedPublicKey,
groupId,
(unsigned long)timestamp);
return nil;