Bump ruma to 2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b (RoomVersion -> RoomVersionRules)

<https://github.com/ruma/ruma/pull/2045>
This commit is contained in:
Olivia Lee 2025-07-13 22:17:29 -07:00 committed by Jonas Platte
parent 3f8d7d19ce
commit 6dd9adc5af
No known key found for this signature in database
GPG key ID: 7D261D771D915378
9 changed files with 129 additions and 102 deletions

View file

@ -25,9 +25,10 @@ use ruma::{
},
StateEventType, TimelineEventType,
},
room_version_rules::RoomVersionRules,
state_res, CanonicalJsonObject, CanonicalJsonValue, EventId,
MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedRoomId, OwnedServerName,
OwnedUserId, RoomId, RoomVersionId, UserId,
OwnedUserId, RoomId, UserId,
};
use serde_json::value::{to_raw_value, RawValue as RawJsonValue};
use tokio::sync::RwLock;
@ -662,6 +663,10 @@ async fn join_room_by_id_helper(
))
}
};
let room_version_rules = room_version_id
.rules()
.expect("ruma should support all room versions we advertise");
let mut join_event_stub: CanonicalJsonObject = serde_json::from_str(
make_join_response.event.get(),
)
@ -716,7 +721,7 @@ async fn join_room_by_id_helper(
services().globals.server_name().as_str(),
services().globals.keypair(),
&mut join_event_stub,
&room_version_id,
&room_version_rules.redaction,
)
.expect("event is valid, we just created it");
@ -725,7 +730,7 @@ async fn join_room_by_id_helper(
"${}",
ruma::signatures::reference_hash(
&join_event_stub,
&room_version_id
&room_version_rules
)
.expect("ruma can calculate reference hashes")
);
@ -761,7 +766,7 @@ async fn join_room_by_id_helper(
};
let Ok((signed_event_id, signed_value)) =
gen_event_id_canonical_json(&signed_raw, &room_version_id)
gen_event_id_canonical_json(&signed_raw, &room_version_rules)
else {
// Event could not be converted to canonical json
return Err(Error::BadRequest(
@ -814,6 +819,9 @@ async fn join_room_by_id_helper(
))
}
};
let room_version_rules = room_version_id
.rules()
.expect("ruma should support all room versions we advertise");
let mut join_event_stub: CanonicalJsonObject = serde_json::from_str(
make_join_response.event.get(),
@ -871,7 +879,7 @@ async fn join_room_by_id_helper(
services().globals.server_name().as_str(),
services().globals.keypair(),
&mut join_event_stub,
&room_version_id,
&room_version_rules.redaction,
)
.expect("event is valid, we just created it");
@ -880,7 +888,7 @@ async fn join_room_by_id_helper(
"${}",
ruma::signatures::reference_hash(
&join_event_stub,
&room_version_id
&room_version_rules
)
.expect("ruma can calculate reference hashes")
);
@ -920,7 +928,7 @@ async fn join_room_by_id_helper(
restricted joins. Adding signature to our event"
);
let Ok((signed_event_id, signed_value)) =
gen_event_id_canonical_json(signed_raw, &room_version_id)
gen_event_id_canonical_json(signed_raw, &room_version_rules)
else {
// Event could not be converted to canonical json
return Err(Error::BadRequest(
@ -985,14 +993,14 @@ async fn join_room_by_id_helper(
.event_handler
.fetch_join_signing_keys(
&send_join_response,
&room_version_id,
&room_version_rules,
&pub_key_map,
)
.await?;
info!("Going through send_join response room_state");
for result in send_join_response.room_state.state.iter().map(|pdu| {
validate_and_add_event_id(pdu, &room_version_id, &pub_key_map)
validate_and_add_event_id(pdu, &room_version_rules, &pub_key_map)
}) {
let Ok((event_id, value)) = result.await else {
continue;
@ -1025,7 +1033,11 @@ async fn join_room_by_id_helper(
info!("Going through send_join response auth_chain");
for result in
send_join_response.room_state.auth_chain.iter().map(|pdu| {
validate_and_add_event_id(pdu, &room_version_id, &pub_key_map)
validate_and_add_event_id(
pdu,
&room_version_rules,
&pub_key_map,
)
})
{
let Ok((event_id, value)) = result.await else {
@ -1037,9 +1049,7 @@ async fn join_room_by_id_helper(
info!("Running send_join auth check");
state_res::event_auth::auth_check(
&state_res::RoomVersion::new(&room_version_id).map_err(|_| {
Error::UnsupportedRoomVersion(room_version_id.clone())
})?,
&room_version_rules.authorization,
&parsed_join_pdu,
|k, s| {
services()
@ -1171,7 +1181,7 @@ async fn make_join_request(
async fn validate_and_add_event_id(
pdu: &RawJsonValue,
room_version: &RoomVersionId,
room_version_rules: &RoomVersionRules,
pub_key_map: &RwLock<BTreeMap<String, SigningKeys>>,
) -> Result<(OwnedEventId, CanonicalJsonObject)> {
let mut value: CanonicalJsonObject = serde_json::from_str(pdu.get())
@ -1181,7 +1191,7 @@ async fn validate_and_add_event_id(
})?;
let event_id = EventId::parse(format!(
"${}",
ruma::signatures::reference_hash(&value, room_version)
ruma::signatures::reference_hash(&value, room_version_rules)
.expect("ruma can calculate reference hashes")
))
.expect("ruma's reference hashes are valid event ids");
@ -1246,7 +1256,7 @@ async fn validate_and_add_event_id(
.filter_keys_server_map(unfiltered_keys, origin_server_ts);
if let Err(error) =
ruma::signatures::verify_event(&keys, &value, room_version)
ruma::signatures::verify_event(&keys, &value, room_version_rules)
{
warn!(
%event_id,
@ -1319,6 +1329,9 @@ pub(crate) async fn invite_helper(
.rooms
.state
.get_create_content::<ExtractVersion>(room_id)?;
let Some(room_version_rules) = room_version_id.rules() else {
return Err(Error::UnsupportedRoomVersion(room_version_id));
};
let response = services()
.sending
@ -1341,7 +1354,7 @@ pub(crate) async fn invite_helper(
// We do not add the event_id field to the pdu here because of signature
// and hashes checks
let Ok((event_id, value)) =
gen_event_id_canonical_json(&response.event, &room_version_id)
gen_event_id_canonical_json(&response.event, &room_version_rules)
else {
// Event could not be converted to canonical json
return Err(Error::BadRequest(
@ -1631,6 +1644,9 @@ async fn remote_leave_room(user_id: &UserId, room_id: &RoomId) -> Result<()> {
))
}
};
let room_version_rules = room_version_id
.rules()
.expect("ruma should support all room versions we advertise");
let mut leave_event_stub = serde_json::from_str::<CanonicalJsonObject>(
make_leave_response.event.get(),
@ -1666,15 +1682,18 @@ async fn remote_leave_room(user_id: &UserId, room_id: &RoomId) -> Result<()> {
services().globals.server_name().as_str(),
services().globals.keypair(),
&mut leave_event_stub,
&room_version_id,
&room_version_rules.redaction,
)
.expect("event is valid, we just created it");
// Generate event id
let event_id = EventId::parse(format!(
"${}",
ruma::signatures::reference_hash(&leave_event_stub, &room_version_id)
.expect("ruma can calculate reference hashes")
ruma::signatures::reference_hash(
&leave_event_stub,
&room_version_rules
)
.expect("ruma can calculate reference hashes")
))
.expect("ruma's reference hashes are valid event ids");