From c731ec5421fbe3b7f7797533c6763bfdd018114d Mon Sep 17 00:00:00 2001 From: Erwan Leboucher Date: Thu, 27 Aug 2026 08:40:06 +0200 Subject: [PATCH] fix: Stop applying MSC4155 invite filtering to outgoing invites --- changelog.d/msc4155-outbound-invites.bugfix.md | 1 + src/api/client/membership/invite.rs | 11 +++++------ src/api/client/room/create.rs | 14 ++++++-------- 3 files changed, 12 insertions(+), 14 deletions(-) create mode 100644 changelog.d/msc4155-outbound-invites.bugfix.md diff --git a/changelog.d/msc4155-outbound-invites.bugfix.md b/changelog.d/msc4155-outbound-invites.bugfix.md new file mode 100644 index 000000000..fc479293f --- /dev/null +++ b/changelog.d/msc4155-outbound-invites.bugfix.md @@ -0,0 +1 @@ +Fixed MSC4155 invite filtering being applied to outgoing invites, which prevented users from inviting anyone they had blocked or ignored invites from. Contributed by @eleboucher. diff --git a/src/api/client/membership/invite.rs b/src/api/client/membership/invite.rs index cf88de8f9..eda4a276e 100644 --- a/src/api/client/membership/invite.rs +++ b/src/api/client/membership/invite.rs @@ -49,13 +49,12 @@ pub(crate) async fn invite_user_route( reason, .. }) => { - let sender_filter_level = services + // silently drop invites to users the sender has ignored + if services .users - .invite_filter_level(recipient_user, sender_user) - .await; - - if !matches!(sender_filter_level, FilterLevel::Allow) { - // drop invites if the sender has the recipient filtered + .user_is_ignored(recipient_user, sender_user) + .await + { return Ok(invite_user::v3::Response::new()); } diff --git a/src/api/client/room/create.rs b/src/api/client/room/create.rs index 157acf72a..03bf0b449 100644 --- a/src/api/client/room/create.rs +++ b/src/api/client/room/create.rs @@ -156,14 +156,12 @@ pub(crate) async fn create_room_route( let mut invitees = BTreeSet::new(); for recipient_user in &body.invite { - if !matches!( - services - .users - .invite_filter_level(recipient_user, sender_user) - .await, - FilterLevel::Allow - ) { - // drop invites if the creator has them blocked + // silently drop invites to users the creator has ignored + if services + .users + .user_is_ignored(recipient_user, sender_user) + .await + { continue; }