From b9854662f3f7b6eb349be39f6a238cccfb98011f Mon Sep 17 00:00:00 2001 From: Jonathan Sutton Date: Sun, 22 Mar 2026 06:16:49 -0500 Subject: [PATCH] fix(room_member): Strip join_authorized_via_users_server (#1542) Realized code for fix did in fact require a check for `join_authorized_via_users_server` before stripping. Otherwise, waste processing power, most of the time. Signed-off-by: Jonathan Sutton --- src/api/client/state.rs | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/api/client/state.rs b/src/api/client/state.rs index 5a66594c1..0aea8ce6f 100644 --- a/src/api/client/state.rs +++ b/src/api/client/state.rs @@ -376,21 +376,24 @@ async fn allowed_to_send_state_event( ))); }; - // join_authorized_via_users_server must be thrown away, if user is already a - // member of the room. - if services - .rooms - .state_cache - .is_joined(state_key, room_id) - .await - { - membership_content.join_authorized_via_users_server = None; - *json = Raw::::from_json_string( - serde_json::to_string(&membership_content)?, - )?; - } else if let Some(authorising_user) = + if let Some(authorising_user) = membership_content.join_authorized_via_users_server { + // join_authorized_via_users_server must be thrown away, if user is already a + // member of the room. + if services + .rooms + .state_cache + .is_joined(state_key, room_id) + .await + { + membership_content.join_authorized_via_users_server = None; + *json = Raw::::from_json_string( + serde_json::to_string(&membership_content)?, + )?; + return Ok(()); + } + if membership_content.membership != MembershipState::Join { return Err!(Request(BadJson( "join_authorised_via_users_server is only for member joins"