@@ -10,7 +10,7 @@ use ruma::{
10
10
relation:: RelationType ,
11
11
room:: {
12
12
member:: { MembershipState , SyncRoomMemberEvent } ,
13
- message:: SyncRoomMessageEvent ,
13
+ message:: { MessageType , SyncRoomMessageEvent } ,
14
14
power_levels:: RoomPowerLevels ,
15
15
} ,
16
16
sticker:: SyncStickerEvent ,
@@ -67,8 +67,13 @@ pub fn is_suitable_for_latest_event<'a>(
67
67
match event {
68
68
// Suitable - we have an m.room.message that was not redacted or edited
69
69
AnySyncTimelineEvent :: MessageLike ( AnySyncMessageLikeEvent :: RoomMessage ( message) ) => {
70
- // Check if this is a replacement for another message. If it is, ignore it
71
70
if let Some ( original_message) = message. as_original ( ) {
71
+ // Don't show incoming verification requests
72
+ if let MessageType :: VerificationRequest ( _) = original_message. content . msgtype {
73
+ return PossibleLatestEvent :: NoUnsupportedMessageLikeType ;
74
+ }
75
+
76
+ // Check if this is a replacement for another message. If it is, ignore it
72
77
let is_replacement =
73
78
original_message. content . relates_to . as_ref ( ) . is_some_and ( |relates_to| {
74
79
if let Some ( relation_type) = relates_to. rel_type ( ) {
@@ -589,6 +594,34 @@ mod tests {
589
594
) ;
590
595
}
591
596
597
+ #[ cfg( feature = "e2e-encryption" ) ]
598
+ #[ test]
599
+ fn test_verification_requests_are_unsuitable ( ) {
600
+ use ruma:: { device_id, events:: room:: message:: KeyVerificationRequestEventContent , user_id} ;
601
+
602
+ let event = AnySyncTimelineEvent :: MessageLike ( AnySyncMessageLikeEvent :: RoomMessage (
603
+ SyncRoomMessageEvent :: Original ( OriginalSyncMessageLikeEvent {
604
+ content : RoomMessageEventContent :: new ( MessageType :: VerificationRequest (
605
+ KeyVerificationRequestEventContent :: new (
606
+ "body" . to_owned ( ) ,
607
+ vec ! [ ] ,
608
+ device_id ! ( "device_id" ) . to_owned ( ) ,
609
+ user_id ! ( "@user_id:example.com" ) . to_owned ( ) ,
610
+ ) ,
611
+ ) ) ,
612
+ event_id : owned_event_id ! ( "$1" ) ,
613
+ sender : owned_user_id ! ( "@a:b.c" ) ,
614
+ origin_server_ts : MilliSecondsSinceUnixEpoch ( UInt :: new ( 123 ) . unwrap ( ) ) ,
615
+ unsigned : MessageLikeUnsigned :: new ( ) ,
616
+ } ) ,
617
+ ) ) ;
618
+
619
+ assert_let ! (
620
+ PossibleLatestEvent :: NoUnsupportedMessageLikeType =
621
+ is_suitable_for_latest_event( & event, None )
622
+ ) ;
623
+ }
624
+
592
625
#[ test]
593
626
fn test_deserialize_latest_event ( ) {
594
627
#[ derive( Debug , serde:: Serialize , serde:: Deserialize ) ]
0 commit comments