From c9d38cdedb545066fe3fdc09072d710810267c5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Thu, 14 May 2020 12:59:36 +0200 Subject: [PATCH] base: Expire group sessions if the member list changes. --- matrix_sdk_base/src/client.rs | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/matrix_sdk_base/src/client.rs b/matrix_sdk_base/src/client.rs index ab807239..2932bd90 100644 --- a/matrix_sdk_base/src/client.rs +++ b/matrix_sdk_base/src/client.rs @@ -493,7 +493,21 @@ impl BaseClient { let room_lock = self.get_or_create_joined_room(&room_id).await; let mut room = room_lock.write().await; - (decrypted_event, room.receive_timeline_event(&e)) + + if let RoomEvent::RoomMember(event) = &e { + let changed = room.handle_membership(event); + + // The memberlist of the room changed, invalidate the group session + // of the room. + if changed { + #[cfg(feature = "encryption")] + self.invalidate_group_session(room_id).await; + } + + (decrypted_event, changed) + } else { + (decrypted_event, room.receive_timeline_event(&e)) + } } _ => (None, false), } @@ -512,7 +526,21 @@ impl BaseClient { pub async fn receive_joined_state_event(&self, room_id: &RoomId, event: &StateEvent) -> bool { let room_lock = self.get_or_create_joined_room(room_id).await; let mut room = room_lock.write().await; - room.receive_state_event(event) + + if let StateEvent::RoomMember(e) = event { + let changed = room.handle_membership(e); + + // The memberlist of the room changed, invalidate the group session + // of the room. + if changed { + #[cfg(feature = "encryption")] + self.invalidate_group_session(room_id).await; + } + + changed + } else { + room.receive_state_event(event) + } } /// Receive a state event for a room the user has been invited to.