From f1eba0ea7bfce64f9a87a03c8e8162a5aca36589 Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Mon, 25 Jan 2021 14:08:59 +1100 Subject: [PATCH] Debug --- .../MessageSender+ClosedGroups.swift | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/SessionMessagingKit/Sending & Receiving/MessageSender+ClosedGroups.swift b/SessionMessagingKit/Sending & Receiving/MessageSender+ClosedGroups.swift index faeda51e3..0679a926f 100644 --- a/SessionMessagingKit/Sending & Receiving/MessageSender+ClosedGroups.swift +++ b/SessionMessagingKit/Sending & Receiving/MessageSender+ClosedGroups.swift @@ -161,12 +161,19 @@ extension MessageSender { throw Error.invalidClosedGroupUpdate } let group = thread.groupModel - // Send the update to the group + let members = Set(group.groupMemberIds).subtracting(membersToRemove) + let isCurrentUserAdmin = group.groupAdminIds.contains(getUserHexEncodedPublicKey()) + // Send the update to the group and generate + distribute a new encryption key pair if needed let closedGroupControlMessage = ClosedGroupControlMessage(kind: .membersRemoved(members: membersToRemove.map { Data(hex: $0) })) - MessageSender.send(closedGroupControlMessage, in: thread, using: transaction) + if isCurrentUserAdmin { + let _ = MessageSender.sendNonDurably(closedGroupControlMessage, in: thread, using: transaction).done { + try generateAndSendNewEncryptionKeyPair(for: groupPublicKey, to: members, using: transaction) + } + } else { + MessageSender.send(closedGroupControlMessage, in: thread, using: transaction) + } // Update the group - let members = [String](Set(group.groupMemberIds).subtracting(membersToRemove)) - let newGroupModel = TSGroupModel(title: group.groupName, memberIds: members, image: nil, groupId: groupID, groupType: .closedGroup, adminIds: group.groupAdminIds) + let newGroupModel = TSGroupModel(title: group.groupName, memberIds: [String](members), image: nil, groupId: groupID, groupType: .closedGroup, adminIds: group.groupAdminIds) thread.setGroupModel(newGroupModel, with: transaction) // Notify the user let updateInfo = group.getInfoStringAboutUpdate(to: newGroupModel)