mirror of
https://gitlab.computer.surgery/matrix/grapevine.git
synced 2025-12-19 00:31:24 +01:00
Bump ruma to 2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b (RoomVersion -> RoomVersionRules)
<https://github.com/ruma/ruma/pull/2045>
This commit is contained in:
parent
3f8d7d19ce
commit
6dd9adc5af
9 changed files with 129 additions and 102 deletions
|
|
@ -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");
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue