This commit is contained in:
Niels Andriesse 2021-01-25 14:54:18 +11:00
parent 6b7b158000
commit 6ab8570b11
2 changed files with 7 additions and 1 deletions

View File

@ -388,6 +388,7 @@ extension MessageReceiver {
let _ = PushNotificationAPI.performOperation(.unsubscribe, for: groupPublicKey, publicKey: userPublicKey)
}
// Generate and distribute a new encryption key pair if needed
// NOTE: If we're the admin we can be sure at this point that we weren't removed
let isCurrentUserAdmin = group.groupAdminIds.contains(getUserHexEncodedPublicKey())
if isCurrentUserAdmin {
do {

View File

@ -150,6 +150,7 @@ extension MessageSender {
public static func removeMembers(_ membersToRemove: Set<String>, to groupPublicKey: String, using transaction: YapDatabaseReadWriteTransaction) throws {
// Get the group, check preconditions & prepare
let userPublicKey = getUserHexEncodedPublicKey()
let groupID = LKGroupUtilities.getEncodedClosedGroupIDAsData(groupPublicKey)
let threadID = TSGroupThread.threadId(fromGroupId: groupID)
guard let thread = TSGroupThread.fetch(uniqueId: threadID, transaction: transaction) else {
@ -160,9 +161,13 @@ extension MessageSender {
SNLog("Invalid closed group update.")
throw Error.invalidClosedGroupUpdate
}
guard !membersToRemove.contains(userPublicKey) else {
SNLog("Invalid closed group update.")
throw Error.invalidClosedGroupUpdate
}
let group = thread.groupModel
let members = Set(group.groupMemberIds).subtracting(membersToRemove)
let isCurrentUserAdmin = group.groupAdminIds.contains(getUserHexEncodedPublicKey())
let isCurrentUserAdmin = group.groupAdminIds.contains(userPublicKey)
// 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) }))
if isCurrentUserAdmin {