fix(PR977): Omitting redundant entries from the auth_chain caused problems

This commit is contained in:
nexy7574 2025-09-03 15:08:28 +01:00
commit 53da294e53
No known key found for this signature in database

View file

@ -1,6 +1,6 @@
#![allow(deprecated)] #![allow(deprecated)]
use std::{borrow::Borrow, time::Instant}; use std::{borrow::Borrow, time::Instant, vec};
use axum::extract::State; use axum::extract::State;
use conduwuit::{ use conduwuit::{
@ -258,17 +258,17 @@ async fn create_join_event(
.rooms .rooms
.auth_chain .auth_chain
.event_ids_iter(room_id, starting_events) .event_ids_iter(room_id, starting_events)
.broad_filter_map(|event_id| async { // .broad_filter_map(|event_id| async {
if omit_members && event_id.as_ref().is_ok_and(|e| state_ids.contains(e)) { // if omit_members && event_id.as_ref().is_ok_and(|e| state_ids.contains(e)) {
// Don't include this event if it's already in the state // // Don't include this event if it's already in the state
trace!( // trace!(
"omitting member event {event_id:?} from returned auth chain as it is \ // "omitting member event {event_id:?} from returned auth chain as it is \
already in state" // already in state"
); // );
return None; // return None;
} // }
Some(event_id) // Some(event_id)
}) // })
.broad_and_then(|event_id| async move { .broad_and_then(|event_id| async move {
services.rooms.timeline.get_pdu_json(&event_id).await services.rooms.timeline.get_pdu_json(&event_id).await
}) })
@ -283,19 +283,24 @@ async fn create_join_event(
.await?; .await?;
services.sending.send_pdu_room(room_id, &pdu_id).await?; services.sending.send_pdu_room(room_id, &pdu_id).await?;
let servers_in_room: Option<Vec<_>> = if omit_members { let servers_in_room: Option<Vec<_>> = if !omit_members {
None None
} else { } else {
debug!("Fetching list of servers in room"); debug!("Fetching list of servers in room");
Some( let servers: Vec<String> = services
services
.rooms .rooms
.state_cache .state_cache
.room_servers(room_id) .room_servers(room_id)
.map(|sn| sn.as_str().to_owned()) .map(|sn| sn.as_str().to_owned())
.collect() .collect()
.await, .await;
) // If there's no servers, just add us
let servers = if servers.is_empty() {
vec![services.globals.server_name().to_string()]
} else {
servers
};
Some(servers)
}; };
debug!("Returning send_join data"); debug!("Returning send_join data");
Ok(create_join_event::v2::RoomState { Ok(create_join_event::v2::RoomState {