Skip to content

Commit 03138b3

Browse files
committed
feat(sdk): Attempt state event decryption in Room::try_decrypt_event
Signed-off-by: Skye Elliot <[email protected]>
1 parent bc45b90 commit 03138b3

File tree

1 file changed

+13
-6
lines changed
  • crates/matrix-sdk/src/room

1 file changed

+13
-6
lines changed

crates/matrix-sdk/src/room/mod.rs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ use reply::Reply;
6060
use ruma::events::room::message::GalleryItemType;
6161
#[cfg(feature = "e2e-encryption")]
6262
use ruma::events::{
63-
room::encrypted::OriginalSyncRoomEncryptedEvent, AnySyncMessageLikeEvent, AnySyncTimelineEvent,
64-
SyncMessageLikeEvent,
63+
room::encrypted::OriginalSyncRoomEncryptedEvent, AnySyncMessageLikeEvent, AnySyncStateEvent,
64+
AnySyncTimelineEvent, SyncMessageLikeEvent,
6565
};
6666
use ruma::{
6767
api::client::{
@@ -637,11 +637,18 @@ impl Room {
637637
event: Raw<AnyTimelineEvent>,
638638
push_ctx: Option<&PushContext>,
639639
) -> TimelineEvent {
640+
// If we have either an encrypted message-like or state event, try to decrypt.
640641
#[cfg(feature = "e2e-encryption")]
641-
if let Ok(AnySyncTimelineEvent::MessageLike(AnySyncMessageLikeEvent::RoomEncrypted(
642-
SyncMessageLikeEvent::Original(_),
643-
))) = event.deserialize_as::<AnySyncTimelineEvent>()
644-
{
642+
if matches!(
643+
event.deserialize_as::<AnySyncTimelineEvent>(),
644+
Ok(AnySyncTimelineEvent::MessageLike(AnySyncMessageLikeEvent::RoomEncrypted(
645+
SyncMessageLikeEvent::Original(_),
646+
)) | AnySyncTimelineEvent::State(AnySyncStateEvent::RoomEncrypted(
647+
SyncStateEvent::Original(_)
648+
)))
649+
) {
650+
// Cast safety: The state key is not used during decryption, and the types
651+
// overlap sufficiently.
645652
if let Ok(event) = self.decrypt_event(event.cast_ref_unchecked(), push_ctx).await {
646653
return event;
647654
}

0 commit comments

Comments
 (0)