fix admin check method

pull/104/head
Ryan ZHAO 6 years ago
parent 6c823ea16e
commit 7d66fa151c

@ -385,7 +385,6 @@ NS_ASSUME_NONNULL_BEGIN
groupId:self.thread.groupModel.groupId
groupType:self.thread.groupModel.groupType
adminIds:self.thread.groupModel.groupAdminIds];
groupModel.removedMembers = self.removedRecipientIds;
[self.conversationSettingsViewDelegate groupWasUpdated:groupModel];
}

@ -39,6 +39,7 @@ extern NSString *const TSGroupThread_NotificationKey_UniqueId;
- (BOOL)isLocalUserInGroup;
- (BOOL)isLocalUserInGroupWithTransaction:(YapDatabaseReadTransaction *)transaction;
- (BOOL)isUserInGroup:(NSString *)hexEncodedPublicKey transaction:(YapDatabaseReadWriteTransaction *)transaction;
- (BOOL)isUserAdminForGroup:(NSString *)hexEncodedPublicKey transaction:(YapDatabaseReadWriteTransaction *)transaction;
// all group threads containing recipient as a member
+ (NSArray<TSGroupThread *> *)groupThreadsWithRecipientId:(NSString *)recipientId

@ -211,6 +211,13 @@ NSString *const TSGroupThread_NotificationKey_UniqueId = @"TSGroupThread_Notific
return [linkedDeviceHexEncodedPublicKeys intersectsSet:[NSSet setWithArray:self.groupModel.groupMemberIds]];
}
- (BOOL)isUserAdminForGroup:(NSString *)hexEncodedPublicKey transaction:(YapDatabaseReadWriteTransaction *)transaction
{
if (hexEncodedPublicKey == nil) { return NO; }
NSSet<NSString *> *linkedDeviceHexEncodedPublicKeys = [LKDatabaseUtilities getLinkedDeviceHexEncodedPublicKeysFor:hexEncodedPublicKey in:transaction];
return [linkedDeviceHexEncodedPublicKeys intersectsSet:[NSSet setWithArray:self.groupModel.groupAdminIds]];
}
- (NSString *)name
{
// TODO sometimes groupName is set to the empty string. I'm hesitent to change

@ -1024,6 +1024,8 @@ NS_ASSUME_NONNULL_BEGIN
messageType:TSInfoMessageTypeGroupUpdate
customMessage:updateMessage];
[infoMessage saveWithTransaction:transaction];
// Loki: if there is a update of group members, we should establish a session with the new members.
[self establishSessionsWithMembersIfNeeded:newGroupModel.groupMemberIds forThread:newGroupThread transaction:transaction];
} else if (transcript.isGroupQuit) {
TSGroupThread *groupThread = [TSGroupThread getOrCreateThreadWithGroupId:transcript.dataMessage.group.id groupType:closedGroup transaction:transaction];
[groupThread leaveGroupWithTransaction:transaction];
@ -1477,7 +1479,7 @@ NS_ASSUME_NONNULL_BEGIN
switch (dataMessage.group.type) {
case SSKProtoGroupContextTypeUpdate: {
if (oldGroupThread && ![oldGroupThread.groupModel.groupAdminIds containsObject:hexEncodedPublicKey]) {
if (oldGroupThread && ![oldGroupThread isUserAdminForGroup:hexEncodedPublicKey transaction:transaction]) {
[LKLogger print:[NSString stringWithFormat:@"[Loki] Received a group update from a non-admin user for %@; ignoring.", [LKGroupUtilities getEncodedGroupID:groupId]]];
return nil;
}

Loading…
Cancel
Save