Fix missing validations of federation member event stubs.

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk
2025-12-30 07:18:04 +00:00
parent b412aafaf8
commit 5a92a00939
3 changed files with 111 additions and 42 deletions

View File

@@ -168,6 +168,7 @@ pub async fn join_remote(
let room_version_rules = room_version::rules(&room_version_id)?;
let (mut join_event, event_id, join_authorized_via_users_server) = self
.create_join_event(
room_id,
sender_user,
&make_join_response.event,
&room_version_id,
@@ -636,6 +637,7 @@ pub async fn join_local(
let room_version_rules = room_version::rules(&room_version_id)?;
let (join_event, event_id, _) = self
.create_join_event(
room_id,
sender_user,
&make_join_response.event,
&room_version_id,
@@ -689,6 +691,7 @@ pub async fn join_local(
#[tracing::instrument(name = "make_join", level = "debug", skip_all)]
async fn create_join_event(
&self,
room_id: &RoomId,
sender_user: &UserId,
join_event_stub: &RawJsonValue,
room_version_id: &RoomVersionId,
@@ -711,22 +714,6 @@ async fn create_join_event(
})
.and_then(|s| OwnedUserId::try_from(s.as_str().unwrap_or_default()).ok());
event.insert(
"origin".into(),
CanonicalJsonValue::String(
self.services
.globals
.server_name()
.as_str()
.to_owned(),
),
);
event.insert(
"origin_server_ts".into(),
CanonicalJsonValue::Integer(utils::millis_since_unix_epoch().try_into()?),
);
let displayname = self.services.users.displayname(sender_user).ok();
let avatar_url = self.services.users.avatar_url(sender_user).ok();
@@ -747,6 +734,30 @@ async fn create_join_event(
})?,
);
event.insert(
"origin".into(),
CanonicalJsonValue::String(
self.services
.globals
.server_name()
.as_str()
.to_owned(),
),
);
event.insert(
"origin_server_ts".into(),
CanonicalJsonValue::Integer(utils::millis_since_unix_epoch().try_into()?),
);
event.insert("room_id".into(), CanonicalJsonValue::String(room_id.as_str().into()));
event.insert("sender".into(), CanonicalJsonValue::String(sender_user.as_str().into()));
event.insert("state_key".into(), CanonicalJsonValue::String(sender_user.as_str().into()));
event.insert("type".into(), CanonicalJsonValue::String("m.room.member".into()));
let event_id = self
.services
.server_keys