1
0
Fork 0
mirror of https://gitlab.com/famedly/conduit.git synced 2025-08-16 18:01:35 +00:00

fix: stripped state conversion on invite

by making the caller pass the room version rules, instead of trying to lookup the create event
This commit is contained in:
Matthias Ahouansou 2025-08-15 23:57:11 +02:00
parent 92ce47aa71
commit 44051ff631
No known key found for this signature in database
3 changed files with 5 additions and 11 deletions

View file

@ -231,7 +231,7 @@ pub async fn knock_room_route(
.to_stripped_state_event() .to_stripped_state_event()
.into(), .into(),
); );
let stripped_state = utils::convert_stripped_state(stripped_state, &room_id)?; let stripped_state = utils::convert_stripped_state(stripped_state, &rules)?;
services().rooms.state_cache.update_membership( services().rooms.state_cache.update_membership(
&room_id, &room_id,

View file

@ -2169,7 +2169,7 @@ pub async fn create_invite_route(
})?; })?;
invite_state.push(pdu.to_stripped_state_event().into()); invite_state.push(pdu.to_stripped_state_event().into());
let invite_state = utils::convert_stripped_state(invite_state, &room_id)?; let invite_state = utils::convert_stripped_state(invite_state, &rules)?;
// If we are active in the room, the remote server will notify us about the join via /send // If we are active in the room, the remote server will notify us about the join via /send
if !services() if !services()

View file

@ -22,7 +22,7 @@ use std::{
time::{SystemTime, UNIX_EPOCH}, time::{SystemTime, UNIX_EPOCH},
}; };
use crate::{service::pdu::gen_event_id_canonical_json, services, Result}; use crate::{service::pdu::gen_event_id_canonical_json, Result};
pub fn millis_since_unix_epoch() -> u64 { pub fn millis_since_unix_epoch() -> u64 {
SystemTime::now() SystemTime::now()
@ -202,20 +202,14 @@ impl fmt::Display for HtmlEscape<'_> {
/// Converts `RawStrippedState` (federation format) into `Raw<StrippedState>` (client format) /// Converts `RawStrippedState` (federation format) into `Raw<StrippedState>` (client format)
pub fn convert_stripped_state( pub fn convert_stripped_state(
stripped_state: Vec<RawStrippedState>, stripped_state: Vec<RawStrippedState>,
room_id: &RoomId, rules: &RoomVersionRules,
) -> Result<Vec<Raw<StrippedState>>> { ) -> Result<Vec<Raw<StrippedState>>> {
stripped_state stripped_state
.into_iter() .into_iter()
.map(|stripped_state| match stripped_state { .map(|stripped_state| match stripped_state {
RawStrippedState::Stripped(state) => Ok(state.cast()), RawStrippedState::Stripped(state) => Ok(state.cast()),
RawStrippedState::Pdu(state) => { RawStrippedState::Pdu(state) => {
let rules = services() let (event_id, mut event) = gen_event_id_canonical_json(&state, rules)?;
.rooms
.state
.get_room_version(room_id)?
.rules()
.expect("Supported room version must have rules.");
let (event_id, mut event) = gen_event_id_canonical_json(&state, &rules)?;
event.retain(|k, _| { event.retain(|k, _| {
matches!( matches!(