@@ -10,7 +10,7 @@ use ruma::{
1010 relation:: RelationType ,
1111 room:: {
1212 member:: { MembershipState , SyncRoomMemberEvent } ,
13- message:: SyncRoomMessageEvent ,
13+ message:: { MessageType , SyncRoomMessageEvent } ,
1414 power_levels:: RoomPowerLevels ,
1515 } ,
1616 sticker:: SyncStickerEvent ,
@@ -67,8 +67,13 @@ pub fn is_suitable_for_latest_event<'a>(
6767 match event {
6868 // Suitable - we have an m.room.message that was not redacted or edited
6969 AnySyncTimelineEvent :: MessageLike ( AnySyncMessageLikeEvent :: RoomMessage ( message) ) => {
70- // Check if this is a replacement for another message. If it is, ignore it
7170 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
7277 let is_replacement =
7378 original_message. content . relates_to . as_ref ( ) . is_some_and ( |relates_to| {
7479 if let Some ( relation_type) = relates_to. rel_type ( ) {
@@ -589,6 +594,34 @@ mod tests {
589594 ) ;
590595 }
591596
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+
592625 #[ test]
593626 fn test_deserialize_latest_event ( ) {
594627 #[ derive( Debug , serde:: Serialize , serde:: Deserialize ) ]
0 commit comments