From 3f8d7d19ce011b8fd89beef5ec83e951ed7f78c3 Mon Sep 17 00:00:00 2001 From: Olivia Lee Date: Tue, 29 Jul 2025 22:37:33 -0700 Subject: [PATCH 1/6] Bump ruma to 3924283c5e94d2020f0991ce35c27667f8c61f0a (add RoomVersion arg to auth_types_for_event) --- Cargo.lock | 23 ++++++++++++----------- Cargo.toml | 2 +- src/service/rooms/event_handler.rs | 1 + src/service/rooms/state.rs | 14 ++++++++++---- src/service/rooms/timeline.rs | 1 + 5 files changed, 25 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7569469c..16e2913b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2442,7 +2442,7 @@ dependencies = [ [[package]] name = "ruma" version = "0.12.1" -source = "git+https://github.com/ruma/ruma.git?rev=e8b0876dda083433a7f9181d47d0aff5a5e05497#e8b0876dda083433a7f9181d47d0aff5a5e05497" +source = "git+https://github.com/ruma/ruma.git?rev=3924283c5e94d2020f0991ce35c27667f8c61f0a#3924283c5e94d2020f0991ce35c27667f8c61f0a" dependencies = [ "assign", "js_int", @@ -2461,7 +2461,7 @@ dependencies = [ [[package]] name = "ruma-appservice-api" version = "0.12.1" -source = "git+https://github.com/ruma/ruma.git?rev=e8b0876dda083433a7f9181d47d0aff5a5e05497#e8b0876dda083433a7f9181d47d0aff5a5e05497" +source = "git+https://github.com/ruma/ruma.git?rev=3924283c5e94d2020f0991ce35c27667f8c61f0a#3924283c5e94d2020f0991ce35c27667f8c61f0a" dependencies = [ "js_int", "ruma-common", @@ -2473,7 +2473,7 @@ dependencies = [ [[package]] name = "ruma-client-api" version = "0.20.1" -source = "git+https://github.com/ruma/ruma.git?rev=e8b0876dda083433a7f9181d47d0aff5a5e05497#e8b0876dda083433a7f9181d47d0aff5a5e05497" +source = "git+https://github.com/ruma/ruma.git?rev=3924283c5e94d2020f0991ce35c27667f8c61f0a#3924283c5e94d2020f0991ce35c27667f8c61f0a" dependencies = [ "as_variant", "assign", @@ -2496,7 +2496,7 @@ dependencies = [ [[package]] name = "ruma-common" version = "0.15.1" -source = "git+https://github.com/ruma/ruma.git?rev=e8b0876dda083433a7f9181d47d0aff5a5e05497#e8b0876dda083433a7f9181d47d0aff5a5e05497" +source = "git+https://github.com/ruma/ruma.git?rev=3924283c5e94d2020f0991ce35c27667f8c61f0a#3924283c5e94d2020f0991ce35c27667f8c61f0a" dependencies = [ "as_variant", "base64", @@ -2527,7 +2527,7 @@ dependencies = [ [[package]] name = "ruma-events" version = "0.30.1" -source = "git+https://github.com/ruma/ruma.git?rev=e8b0876dda083433a7f9181d47d0aff5a5e05497#e8b0876dda083433a7f9181d47d0aff5a5e05497" +source = "git+https://github.com/ruma/ruma.git?rev=3924283c5e94d2020f0991ce35c27667f8c61f0a#3924283c5e94d2020f0991ce35c27667f8c61f0a" dependencies = [ "as_variant", "indexmap 2.10.0", @@ -2550,7 +2550,7 @@ dependencies = [ [[package]] name = "ruma-federation-api" version = "0.11.0" -source = "git+https://github.com/ruma/ruma.git?rev=e8b0876dda083433a7f9181d47d0aff5a5e05497#e8b0876dda083433a7f9181d47d0aff5a5e05497" +source = "git+https://github.com/ruma/ruma.git?rev=3924283c5e94d2020f0991ce35c27667f8c61f0a#3924283c5e94d2020f0991ce35c27667f8c61f0a" dependencies = [ "bytes", "headers", @@ -2572,7 +2572,7 @@ dependencies = [ [[package]] name = "ruma-identifiers-validation" version = "0.10.1" -source = "git+https://github.com/ruma/ruma.git?rev=e8b0876dda083433a7f9181d47d0aff5a5e05497#e8b0876dda083433a7f9181d47d0aff5a5e05497" +source = "git+https://github.com/ruma/ruma.git?rev=3924283c5e94d2020f0991ce35c27667f8c61f0a#3924283c5e94d2020f0991ce35c27667f8c61f0a" dependencies = [ "js_int", "thiserror 2.0.12", @@ -2581,7 +2581,7 @@ dependencies = [ [[package]] name = "ruma-macros" version = "0.15.1" -source = "git+https://github.com/ruma/ruma.git?rev=e8b0876dda083433a7f9181d47d0aff5a5e05497#e8b0876dda083433a7f9181d47d0aff5a5e05497" +source = "git+https://github.com/ruma/ruma.git?rev=3924283c5e94d2020f0991ce35c27667f8c61f0a#3924283c5e94d2020f0991ce35c27667f8c61f0a" dependencies = [ "cfg-if", "proc-macro-crate", @@ -2596,7 +2596,7 @@ dependencies = [ [[package]] name = "ruma-push-gateway-api" version = "0.11.0" -source = "git+https://github.com/ruma/ruma.git?rev=e8b0876dda083433a7f9181d47d0aff5a5e05497#e8b0876dda083433a7f9181d47d0aff5a5e05497" +source = "git+https://github.com/ruma/ruma.git?rev=3924283c5e94d2020f0991ce35c27667f8c61f0a#3924283c5e94d2020f0991ce35c27667f8c61f0a" dependencies = [ "js_int", "ruma-common", @@ -2608,7 +2608,7 @@ dependencies = [ [[package]] name = "ruma-signatures" version = "0.17.0" -source = "git+https://github.com/ruma/ruma.git?rev=e8b0876dda083433a7f9181d47d0aff5a5e05497#e8b0876dda083433a7f9181d47d0aff5a5e05497" +source = "git+https://github.com/ruma/ruma.git?rev=3924283c5e94d2020f0991ce35c27667f8c61f0a#3924283c5e94d2020f0991ce35c27667f8c61f0a" dependencies = [ "base64", "ed25519-dalek", @@ -2624,11 +2624,12 @@ dependencies = [ [[package]] name = "ruma-state-res" version = "0.13.0" -source = "git+https://github.com/ruma/ruma.git?rev=e8b0876dda083433a7f9181d47d0aff5a5e05497#e8b0876dda083433a7f9181d47d0aff5a5e05497" +source = "git+https://github.com/ruma/ruma.git?rev=3924283c5e94d2020f0991ce35c27667f8c61f0a#3924283c5e94d2020f0991ce35c27667f8c61f0a" dependencies = [ "js_int", "ruma-common", "ruma-events", + "ruma-signatures", "serde", "serde_json", "thiserror 2.0.12", diff --git a/Cargo.toml b/Cargo.toml index 9f864aed..12b71382 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -145,7 +145,7 @@ xdg = "2.5.2" [dependencies.ruma] git = "https://github.com/ruma/ruma.git" -rev = "e8b0876dda083433a7f9181d47d0aff5a5e05497" +rev = "3924283c5e94d2020f0991ce35c27667f8c61f0a" features = [ "compat-server-signing-key-version", "compat-empty-string-null", diff --git a/src/service/rooms/event_handler.rs b/src/service/rooms/event_handler.rs index e53e883d..5ae78863 100644 --- a/src/service/rooms/event_handler.rs +++ b/src/service/rooms/event_handler.rs @@ -895,6 +895,7 @@ impl Service { // Soft fail check before doing state res let auth_events = services().rooms.state.get_auth_events( room_id, + &ruma_room_version, &incoming_pdu.kind, &incoming_pdu.sender, incoming_pdu.state_key.as_deref(), diff --git a/src/service/rooms/state.rs b/src/service/rooms/state.rs index e692251d..72051f57 100644 --- a/src/service/rooms/state.rs +++ b/src/service/rooms/state.rs @@ -430,10 +430,11 @@ impl Service { } /// This fetches auth events from the current state. - #[tracing::instrument(skip(self))] + #[tracing::instrument(skip(self, room_version))] pub(crate) fn get_auth_events( &self, room_id: &RoomId, + room_version: &state_res::RoomVersion, kind: &TimelineEventType, sender: &UserId, state_key: Option<&str>, @@ -444,9 +445,14 @@ impl Service { return Ok(HashMap::new()); }; - let auth_events = - state_res::auth_types_for_event(kind, sender, state_key, content) - .expect("content is a valid JSON object"); + let auth_events = state_res::auth_types_for_event( + kind, + sender, + state_key, + content, + room_version, + ) + .expect("content is a valid JSON object"); let mut sauthevents = auth_events .into_iter() diff --git a/src/service/rooms/timeline.rs b/src/service/rooms/timeline.rs index 7ea2e3dc..9e934ad9 100644 --- a/src/service/rooms/timeline.rs +++ b/src/service/rooms/timeline.rs @@ -777,6 +777,7 @@ impl Service { let auth_events = services().rooms.state.get_auth_events( room_id, + &ruma_room_version, &event_type, sender, state_key.as_deref(), From 6dd9adc5af23f340cec82f177f6c6a685ba10b80 Mon Sep 17 00:00:00 2001 From: Olivia Lee Date: Sun, 13 Jul 2025 22:17:29 -0700 Subject: [PATCH 2/6] Bump ruma to 2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b (RoomVersion -> RoomVersionRules) --- Cargo.lock | 22 +++++----- Cargo.toml | 2 +- src/api/client_server/membership.rs | 59 +++++++++++++++++--------- src/api/server_server.rs | 19 +++++++-- src/service/admin.rs | 5 ++- src/service/pdu.rs | 21 ++++----- src/service/rooms/event_handler.rs | 66 ++++++++++++++--------------- src/service/rooms/state.rs | 11 ++--- src/service/rooms/timeline.rs | 26 +++++++----- 9 files changed, 129 insertions(+), 102 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 16e2913b..f3fd8056 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2442,7 +2442,7 @@ dependencies = [ [[package]] name = "ruma" version = "0.12.1" -source = "git+https://github.com/ruma/ruma.git?rev=3924283c5e94d2020f0991ce35c27667f8c61f0a#3924283c5e94d2020f0991ce35c27667f8c61f0a" +source = "git+https://github.com/ruma/ruma.git?rev=2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b#2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" dependencies = [ "assign", "js_int", @@ -2461,7 +2461,7 @@ dependencies = [ [[package]] name = "ruma-appservice-api" version = "0.12.1" -source = "git+https://github.com/ruma/ruma.git?rev=3924283c5e94d2020f0991ce35c27667f8c61f0a#3924283c5e94d2020f0991ce35c27667f8c61f0a" +source = "git+https://github.com/ruma/ruma.git?rev=2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b#2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" dependencies = [ "js_int", "ruma-common", @@ -2473,7 +2473,7 @@ dependencies = [ [[package]] name = "ruma-client-api" version = "0.20.1" -source = "git+https://github.com/ruma/ruma.git?rev=3924283c5e94d2020f0991ce35c27667f8c61f0a#3924283c5e94d2020f0991ce35c27667f8c61f0a" +source = "git+https://github.com/ruma/ruma.git?rev=2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b#2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" dependencies = [ "as_variant", "assign", @@ -2496,7 +2496,7 @@ dependencies = [ [[package]] name = "ruma-common" version = "0.15.1" -source = "git+https://github.com/ruma/ruma.git?rev=3924283c5e94d2020f0991ce35c27667f8c61f0a#3924283c5e94d2020f0991ce35c27667f8c61f0a" +source = "git+https://github.com/ruma/ruma.git?rev=2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b#2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" dependencies = [ "as_variant", "base64", @@ -2527,7 +2527,7 @@ dependencies = [ [[package]] name = "ruma-events" version = "0.30.1" -source = "git+https://github.com/ruma/ruma.git?rev=3924283c5e94d2020f0991ce35c27667f8c61f0a#3924283c5e94d2020f0991ce35c27667f8c61f0a" +source = "git+https://github.com/ruma/ruma.git?rev=2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b#2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" dependencies = [ "as_variant", "indexmap 2.10.0", @@ -2550,7 +2550,7 @@ dependencies = [ [[package]] name = "ruma-federation-api" version = "0.11.0" -source = "git+https://github.com/ruma/ruma.git?rev=3924283c5e94d2020f0991ce35c27667f8c61f0a#3924283c5e94d2020f0991ce35c27667f8c61f0a" +source = "git+https://github.com/ruma/ruma.git?rev=2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b#2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" dependencies = [ "bytes", "headers", @@ -2572,7 +2572,7 @@ dependencies = [ [[package]] name = "ruma-identifiers-validation" version = "0.10.1" -source = "git+https://github.com/ruma/ruma.git?rev=3924283c5e94d2020f0991ce35c27667f8c61f0a#3924283c5e94d2020f0991ce35c27667f8c61f0a" +source = "git+https://github.com/ruma/ruma.git?rev=2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b#2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" dependencies = [ "js_int", "thiserror 2.0.12", @@ -2581,7 +2581,7 @@ dependencies = [ [[package]] name = "ruma-macros" version = "0.15.1" -source = "git+https://github.com/ruma/ruma.git?rev=3924283c5e94d2020f0991ce35c27667f8c61f0a#3924283c5e94d2020f0991ce35c27667f8c61f0a" +source = "git+https://github.com/ruma/ruma.git?rev=2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b#2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" dependencies = [ "cfg-if", "proc-macro-crate", @@ -2596,7 +2596,7 @@ dependencies = [ [[package]] name = "ruma-push-gateway-api" version = "0.11.0" -source = "git+https://github.com/ruma/ruma.git?rev=3924283c5e94d2020f0991ce35c27667f8c61f0a#3924283c5e94d2020f0991ce35c27667f8c61f0a" +source = "git+https://github.com/ruma/ruma.git?rev=2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b#2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" dependencies = [ "js_int", "ruma-common", @@ -2608,7 +2608,7 @@ dependencies = [ [[package]] name = "ruma-signatures" version = "0.17.0" -source = "git+https://github.com/ruma/ruma.git?rev=3924283c5e94d2020f0991ce35c27667f8c61f0a#3924283c5e94d2020f0991ce35c27667f8c61f0a" +source = "git+https://github.com/ruma/ruma.git?rev=2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b#2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" dependencies = [ "base64", "ed25519-dalek", @@ -2624,7 +2624,7 @@ dependencies = [ [[package]] name = "ruma-state-res" version = "0.13.0" -source = "git+https://github.com/ruma/ruma.git?rev=3924283c5e94d2020f0991ce35c27667f8c61f0a#3924283c5e94d2020f0991ce35c27667f8c61f0a" +source = "git+https://github.com/ruma/ruma.git?rev=2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b#2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" dependencies = [ "js_int", "ruma-common", diff --git a/Cargo.toml b/Cargo.toml index 12b71382..1c8b224a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -145,7 +145,7 @@ xdg = "2.5.2" [dependencies.ruma] git = "https://github.com/ruma/ruma.git" -rev = "3924283c5e94d2020f0991ce35c27667f8c61f0a" +rev = "2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" features = [ "compat-server-signing-key-version", "compat-empty-string-null", diff --git a/src/api/client_server/membership.rs b/src/api/client_server/membership.rs index 9415e77c..e0afec6b 100644 --- a/src/api/client_server/membership.rs +++ b/src/api/client_server/membership.rs @@ -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>, ) -> 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::(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::( 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"); diff --git a/src/api/server_server.rs b/src/api/server_server.rs index 0f20a858..39b208f0 100644 --- a/src/api/server_server.rs +++ b/src/api/server_server.rs @@ -718,9 +718,12 @@ pub(crate) fn parse_incoming_pdu( .rooms .state .get_create_content::(&room_id)?; + let Some(room_version_rules) = room_version_id.rules() else { + return Err(Error::UnsupportedRoomVersion(room_version_id)); + }; let Ok((event_id, value)) = - gen_event_id_canonical_json(pdu, &room_version_id) + gen_event_id_canonical_json(pdu, &room_version_rules) else { // Event could not be converted to canonical json return Err(Error::BadRequest( @@ -1634,8 +1637,12 @@ async fn create_join_event( // hashes checks let room_version_id = services().rooms.state.get_create_content::(room_id)?; + let Some(room_version_rules) = room_version_id.rules() else { + return Err(Error::UnsupportedRoomVersion(room_version_id)); + }; + let Ok((event_id, value)) = - gen_event_id_canonical_json(pdu, &room_version_id) + gen_event_id_canonical_json(pdu, &room_version_rules) else { // Event could not be converted to canonical json return Err(Error::BadRequest( @@ -1787,6 +1794,10 @@ pub(crate) async fn create_invite_route( "Server does not support this room version.", )); } + let room_version_rules = body + .room_version + .rules() + .expect("ruma should support all room versions we advertise"); let mut signed_event = utils::to_canonical_object(&body.event).map_err(|_| { @@ -1800,7 +1811,7 @@ pub(crate) async fn create_invite_route( services().globals.server_name().as_str(), services().globals.keypair(), &mut signed_event, - &body.room_version, + &room_version_rules.redaction, ) .map_err(|_| { Error::BadRequest(ErrorKind::InvalidParam, "Failed to sign event.") @@ -1809,7 +1820,7 @@ pub(crate) async fn create_invite_route( // Generate event id let event_id = EventId::parse(format!( "${}", - ruma::signatures::reference_hash(&signed_event, &body.room_version) + ruma::signatures::reference_hash(&signed_event, &room_version_rules) .expect("ruma can calculate reference hashes") )) .expect("ruma's reference hashes are valid event ids"); diff --git a/src/service/admin.rs b/src/service/admin.rs index dcd971af..a63c3133 100644 --- a/src/service/admin.rs +++ b/src/service/admin.rs @@ -22,10 +22,11 @@ use ruma::{ }, TimelineEventType, }, + room_version_rules::RoomVersionRules, serde::Raw, signatures::verify_json, EventId, MilliSecondsSinceUnixEpoch, OwnedMxcUri, OwnedRoomId, - OwnedServerName, RoomId, RoomVersionId, ServerName, UserId, + OwnedServerName, RoomId, ServerName, UserId, }; use serde_json::value::to_raw_value; use tokio::sync::{mpsc, Mutex, RwLock}; @@ -592,7 +593,7 @@ impl Service { Ok(value) => { match ruma::signatures::reference_hash( &value, - &RoomVersionId::V6, + &RoomVersionRules::V6, ) { Ok(hash) => { let event_id = diff --git a/src/service/pdu.rs b/src/service/pdu.rs index 35a6e43a..59e870d3 100644 --- a/src/service/pdu.rs +++ b/src/service/pdu.rs @@ -8,10 +8,11 @@ use ruma::{ AnyStateEvent, AnyStrippedStateEvent, AnySyncStateEvent, AnySyncTimelineEvent, AnyTimelineEvent, StateEvent, TimelineEventType, }, + room_version_rules::{RedactionRules, RoomVersionRules}, serde::Raw, state_res, CanonicalJsonObject, CanonicalJsonValue, EventId, MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedRoomId, OwnedUserId, RoomId, - RoomVersionId, UInt, UserId, + UInt, UserId, }; use serde::{Deserialize, Serialize}; use serde_json::{ @@ -59,7 +60,7 @@ impl PduEvent { #[tracing::instrument(skip(self))] pub(crate) fn redact( &mut self, - room_version_id: &RoomVersionId, + rules: &RedactionRules, reason: &PduEvent, ) -> crate::Result<()> { self.unsigned = None; @@ -68,14 +69,10 @@ impl PduEvent { serde_json::from_str(self.content.get()).map_err(|_| { Error::bad_database("PDU in db has invalid content.") })?; - redact_content_in_place( - &mut content, - room_version_id, - self.kind.to_string(), - ) - .map_err(|e| { - Error::Redaction(self.sender.server_name().to_owned(), e) - })?; + redact_content_in_place(&mut content, rules, self.kind.to_string()) + .map_err(|e| { + Error::Redaction(self.sender.server_name().to_owned(), e) + })?; self.unsigned = Some(to_raw_value(&json!({ "redacted_because": serde_json::to_value(reason).expect("to_value(PduEvent) always works") @@ -489,7 +486,7 @@ impl Ord for PduEvent { /// CanonicalJsonValue>`. pub(crate) fn gen_event_id_canonical_json( pdu: &RawJsonValue, - room_version_id: &RoomVersionId, + rules: &RoomVersionRules, ) -> crate::Result<(OwnedEventId, CanonicalJsonObject)> { let value: CanonicalJsonObject = serde_json::from_str(pdu.get()).map_err(|error| { @@ -500,7 +497,7 @@ pub(crate) fn gen_event_id_canonical_json( let event_id = format!( "${}", // Anything higher than version3 behaves the same - ruma::signatures::reference_hash(&value, room_version_id) + ruma::signatures::reference_hash(&value, rules) .expect("ruma can calculate reference hashes") ) .try_into() diff --git a/src/service/rooms/event_handler.rs b/src/service/rooms/event_handler.rs index 5ae78863..2c28c025 100644 --- a/src/service/rooms/event_handler.rs +++ b/src/service/rooms/event_handler.rs @@ -23,6 +23,7 @@ use ruma::{ TimelineEventType, }, int, + room_version_rules::RoomVersionRules, state_res::{self, StateMap}, uint, CanonicalJsonObject, CanonicalJsonValue, EventId, MilliSecondsSinceUnixEpoch, OwnedServerName, OwnedServerSigningKeyId, @@ -121,13 +122,16 @@ impl Service { .rooms .state .get_create_content::(room_id)?; + let Some(room_version_rules) = room_version_id.rules() else { + return Err(Error::UnsupportedRoomVersion(room_version_id.clone())); + }; let (incoming_pdu, val) = self .handle_outlier_pdu( origin, event_id, room_id, - &room_version_id, + &room_version_rules, value, false, pub_key_map, @@ -151,7 +155,7 @@ impl Service { .fetch_unknown_prev_events( origin, room_id, - &room_version_id, + &room_version_rules, pub_key_map, incoming_pdu.prev_events.clone(), ) @@ -303,7 +307,7 @@ impl Service { origin: &'a ServerName, event_id: &'a EventId, room_id: &'a RoomId, - room_version_id: &'a RoomVersionId, + room_version_rules: &'a RoomVersionRules, mut value: CanonicalJsonObject, auth_events_known: bool, pub_key_map: &'a RwLock>, @@ -315,11 +319,6 @@ impl Service { // 2. Check signatures, otherwise drop // 3. check content hash, redact if doesn't match - let ruma_room_version = - state_res::RoomVersion::new(room_version_id).map_err(|_| { - Error::UnsupportedRoomVersion(room_version_id.clone()) - })?; - // TODO: For RoomVersion6 we must check that Raw<..> is canonical, // do we anywhere? // @@ -369,7 +368,7 @@ impl Service { let mut val = match ruma::signatures::verify_event( &filtered_keys, &value, - room_version_id, + room_version_rules, ) { Err(error) => { // Drop @@ -384,7 +383,7 @@ impl Service { warn!(%event_id, "Calculated hash does not match"); let Ok(obj) = ruma::canonical_json::redact( value, - room_version_id, + &room_version_rules.redaction, None, ) else { return Err(Error::BadRequest( @@ -445,7 +444,7 @@ impl Service { .map(|x| Arc::from(&**x)) .collect::>(), room_id, - room_version_id, + room_version_rules, pub_key_map, ) .await; @@ -502,7 +501,7 @@ impl Service { } state_res::event_auth::auth_check( - &ruma_room_version, + &room_version_rules.authorization, &incoming_pdu, |k, s| auth_events.get(&(k.to_string().into(), s.to_owned())), ) @@ -560,10 +559,9 @@ impl Service { "Upgrading event to timeline pdu", ); - let ruma_room_version = state_res::RoomVersion::new(room_version_id) - .map_err(|_| { - Error::UnsupportedRoomVersion(room_version_id.clone()) - })?; + let Some(room_version_rules) = room_version_id.rules() else { + return Err(Error::UnsupportedRoomVersion(room_version_id.clone())); + }; // 10. Fetch missing state and auth chain events by calling /state_ids // at backwards extremities doing all the checks in this list @@ -710,7 +708,7 @@ impl Service { let lock = services().globals.stateres_mutex.lock(); let result = state_res::resolve( - room_version_id, + &room_version_rules.authorization, &fork_states, auth_chain_sets, |event_id| { @@ -779,7 +777,7 @@ impl Service { origin, &collect, room_id, - room_version_id, + &room_version_rules, pub_key_map, ) .await; @@ -865,7 +863,7 @@ impl Service { // 11. Check the auth of the event passes based on the state of the // event state_res::event_auth::auth_check( - &ruma_room_version, + &room_version_rules.authorization, &incoming_pdu, |k, s| { services() @@ -895,7 +893,7 @@ impl Service { // Soft fail check before doing state res let auth_events = services().rooms.state.get_auth_events( room_id, - &ruma_room_version, + &room_version_rules.authorization, &incoming_pdu.kind, &incoming_pdu.sender, incoming_pdu.state_key.as_deref(), @@ -903,7 +901,7 @@ impl Service { )?; let auth_fail_against_current = state_res::event_auth::auth_check( - &ruma_room_version, + &room_version_rules.authorization, &incoming_pdu, |k, s| auth_events.get(&(k.clone(), s.to_owned())), ) @@ -979,7 +977,7 @@ impl Service { } let new_room_state = self - .resolve_state(room_id, room_version_id, state_after) + .resolve_state(room_id, &room_version_rules, state_after) .await?; // Set the new room state to the resolved state @@ -1055,11 +1053,11 @@ impl Service { Ok(pdu_id) } - #[tracing::instrument(skip(self, room_version_id, incoming_state))] + #[tracing::instrument(skip(self, room_version_rules, incoming_state))] async fn resolve_state( &self, room_id: &RoomId, - room_version_id: &RoomVersionId, + room_version_rules: &RoomVersionRules, incoming_state: HashMap>, ) -> Result>> { debug!("Loading current room state ids"); @@ -1121,7 +1119,7 @@ impl Service { let lock = services().globals.stateres_mutex.lock(); let Ok(state) = state_res::resolve( - room_version_id, + &room_version_rules.authorization, &fork_states, auth_chain_sets, fetch_event, @@ -1169,7 +1167,7 @@ impl Service { origin: &'a ServerName, events: &'a [Arc], room_id: &'a RoomId, - room_version_id: &'a RoomVersionId, + room_version_rules: &'a RoomVersionRules, pub_key_map: &'a RwLock>, ) -> BoxFuture<'a, Vec<(Arc, Option)>> { Box::pin(async move { @@ -1271,7 +1269,7 @@ impl Service { let Ok((calculated_event_id, value)) = pdu::gen_event_id_canonical_json( &res.pdu, - room_version_id, + room_version_rules, ) else { back_off((*next_id).to_owned()).await; @@ -1344,7 +1342,7 @@ impl Service { origin, next_id, room_id, - room_version_id, + room_version_rules, value.clone(), true, pub_key_map, @@ -1377,7 +1375,7 @@ impl Service { &self, origin: &ServerName, room_id: &RoomId, - room_version_id: &RoomVersionId, + room_version_rules: &RoomVersionRules, pub_key_map: &RwLock>, initial_set: Vec>, ) -> Result<( @@ -1401,7 +1399,7 @@ impl Service { origin, &[prev_event_id.clone()], room_id, - room_version_id, + room_version_rules, pub_key_map, ) .await @@ -1534,7 +1532,7 @@ impl Service { OwnedServerName, BTreeMap, >, - room_version: &RoomVersionId, + room_version_rules: &RoomVersionRules, pub_key_map: &mut RwLockWriteGuard<'_, BTreeMap>, ) -> Result<()> { let value: CanonicalJsonObject = serde_json::from_str(pdu.get()) @@ -1545,7 +1543,7 @@ impl Service { let event_id = format!( "${}", - ruma::signatures::reference_hash(&value, room_version) + ruma::signatures::reference_hash(&value, room_version_rules) .expect("ruma can calculate reference hashes") ); let event_id = <&EventId>::try_from(event_id.as_str()) @@ -1649,7 +1647,7 @@ impl Service { pub(crate) async fn fetch_join_signing_keys( &self, event: &create_join_event::v2::Response, - room_version: &RoomVersionId, + room_version_rules: &RoomVersionRules, pub_key_map: &RwLock>, ) -> Result<()> { let mut servers: BTreeMap< @@ -1672,7 +1670,7 @@ impl Service { .get_server_keys_from_cache( pdu, &mut servers, - room_version, + room_version_rules, &mut pkm, ) .await diff --git a/src/service/rooms/state.rs b/src/service/rooms/state.rs index 72051f57..91a27049 100644 --- a/src/service/rooms/state.rs +++ b/src/service/rooms/state.rs @@ -11,6 +11,7 @@ use ruma::{ AnyStrippedStateEvent, StateEventType, TimelineEventType, }, room::RoomType, + room_version_rules::AuthorizationRules, serde::Raw, state_res::{self, StateMap}, EventId, OwnedEventId, OwnedRoomId, RoomId, RoomVersionId, UserId, @@ -430,11 +431,11 @@ impl Service { } /// This fetches auth events from the current state. - #[tracing::instrument(skip(self, room_version))] + #[tracing::instrument(skip(self, rules))] pub(crate) fn get_auth_events( &self, room_id: &RoomId, - room_version: &state_res::RoomVersion, + rules: &AuthorizationRules, kind: &TimelineEventType, sender: &UserId, state_key: Option<&str>, @@ -446,11 +447,7 @@ impl Service { }; let auth_events = state_res::auth_types_for_event( - kind, - sender, - state_key, - content, - room_version, + kind, sender, state_key, content, rules, ) .expect("content is a valid JSON object"); diff --git a/src/service/rooms/timeline.rs b/src/service/rooms/timeline.rs index 9e934ad9..bffd52ca 100644 --- a/src/service/rooms/timeline.rs +++ b/src/service/rooms/timeline.rs @@ -770,14 +770,13 @@ impl Service { } })?; - let ruma_room_version = state_res::RoomVersion::new(&room_version_id) - .map_err(|_| { - Error::UnsupportedRoomVersion(room_version_id.clone()) - })?; + let Some(room_version_rules) = room_version_id.rules() else { + return Err(Error::UnsupportedRoomVersion(room_version_id)); + }; let auth_events = services().rooms.state.get_auth_events( room_id, - &ruma_room_version, + &room_version_rules.authorization, &event_type, sender, state_key.as_deref(), @@ -845,9 +844,11 @@ impl Service { signatures: None, }; - state_res::auth_check(&ruma_room_version, &pdu, |k, s| { - auth_events.get(&(k.clone(), s.to_owned())) - }) + state_res::auth_check( + &room_version_rules.authorization, + &pdu, + |k, s| auth_events.get(&(k.clone(), s.to_owned())), + ) .map_err(|error| { error!(%error, "Auth check failed"); Error::BadRequest(ErrorKind::InvalidParam, "Auth check failed.") @@ -870,7 +871,7 @@ impl Service { services().globals.server_name().as_str(), services().globals.keypair(), &mut pdu_json, - &room_version_id, + &room_version_rules.redaction, ) { Ok(()) => {} Err(e) => { @@ -890,7 +891,7 @@ impl Service { // Generate event id pdu.event_id = EventId::parse_arc(format!( "${}", - ruma::signatures::reference_hash(&pdu_json, &room_version_id) + ruma::signatures::reference_hash(&pdu_json, &room_version_rules) .expect("ruma can calculate reference hashes") )) .expect("ruma's reference hashes are valid event ids"); @@ -1199,7 +1200,10 @@ impl Service { .rooms .state .get_create_content::(&pdu.room_id)?; - pdu.redact(&room_version_id, reason)?; + let Some(room_version_rules) = room_version_id.rules() else { + return Err(Error::UnsupportedRoomVersion(room_version_id)); + }; + pdu.redact(&room_version_rules.redaction, reason)?; self.replace_pdu( &pdu_id, From 792f69e3167e590664073f87753c4c356242aaea Mon Sep 17 00:00:00 2001 From: Olivia Lee Date: Sat, 2 Aug 2025 17:48:45 -0700 Subject: [PATCH 3/6] Bump ruma to daa3c8b014a601fa277e8653dea86e8897b17552 (optional UiaaInfo::params) We could just set None now, but the ruma changelog states that > Servers are encouraged to keep sending it for compatibility with > clients that required it. --- Cargo.lock | 38 ++++++++++++++++---------------- Cargo.toml | 2 +- src/api/client_server/account.rs | 8 +++---- src/api/client_server/device.rs | 4 ++-- src/api/client_server/keys.rs | 2 +- 5 files changed, 27 insertions(+), 27 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f3fd8056..e744dc60 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -369,9 +369,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.30" +version = "1.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" +checksum = "c3a42d84bb6b69d3a8b3eaacf0d88f179e1929695e1ad012b6cf64d9caaa5fd2" dependencies = [ "jobserver", "libc", @@ -2442,7 +2442,7 @@ dependencies = [ [[package]] name = "ruma" version = "0.12.1" -source = "git+https://github.com/ruma/ruma.git?rev=2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b#2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" +source = "git+https://github.com/ruma/ruma.git?rev=daa3c8b014a601fa277e8653dea86e8897b17552#daa3c8b014a601fa277e8653dea86e8897b17552" dependencies = [ "assign", "js_int", @@ -2461,7 +2461,7 @@ dependencies = [ [[package]] name = "ruma-appservice-api" version = "0.12.1" -source = "git+https://github.com/ruma/ruma.git?rev=2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b#2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" +source = "git+https://github.com/ruma/ruma.git?rev=daa3c8b014a601fa277e8653dea86e8897b17552#daa3c8b014a601fa277e8653dea86e8897b17552" dependencies = [ "js_int", "ruma-common", @@ -2473,7 +2473,7 @@ dependencies = [ [[package]] name = "ruma-client-api" version = "0.20.1" -source = "git+https://github.com/ruma/ruma.git?rev=2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b#2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" +source = "git+https://github.com/ruma/ruma.git?rev=daa3c8b014a601fa277e8653dea86e8897b17552#daa3c8b014a601fa277e8653dea86e8897b17552" dependencies = [ "as_variant", "assign", @@ -2496,7 +2496,7 @@ dependencies = [ [[package]] name = "ruma-common" version = "0.15.1" -source = "git+https://github.com/ruma/ruma.git?rev=2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b#2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" +source = "git+https://github.com/ruma/ruma.git?rev=daa3c8b014a601fa277e8653dea86e8897b17552#daa3c8b014a601fa277e8653dea86e8897b17552" dependencies = [ "as_variant", "base64", @@ -2527,7 +2527,7 @@ dependencies = [ [[package]] name = "ruma-events" version = "0.30.1" -source = "git+https://github.com/ruma/ruma.git?rev=2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b#2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" +source = "git+https://github.com/ruma/ruma.git?rev=daa3c8b014a601fa277e8653dea86e8897b17552#daa3c8b014a601fa277e8653dea86e8897b17552" dependencies = [ "as_variant", "indexmap 2.10.0", @@ -2550,7 +2550,7 @@ dependencies = [ [[package]] name = "ruma-federation-api" version = "0.11.0" -source = "git+https://github.com/ruma/ruma.git?rev=2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b#2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" +source = "git+https://github.com/ruma/ruma.git?rev=daa3c8b014a601fa277e8653dea86e8897b17552#daa3c8b014a601fa277e8653dea86e8897b17552" dependencies = [ "bytes", "headers", @@ -2572,7 +2572,7 @@ dependencies = [ [[package]] name = "ruma-identifiers-validation" version = "0.10.1" -source = "git+https://github.com/ruma/ruma.git?rev=2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b#2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" +source = "git+https://github.com/ruma/ruma.git?rev=daa3c8b014a601fa277e8653dea86e8897b17552#daa3c8b014a601fa277e8653dea86e8897b17552" dependencies = [ "js_int", "thiserror 2.0.12", @@ -2581,7 +2581,7 @@ dependencies = [ [[package]] name = "ruma-macros" version = "0.15.1" -source = "git+https://github.com/ruma/ruma.git?rev=2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b#2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" +source = "git+https://github.com/ruma/ruma.git?rev=daa3c8b014a601fa277e8653dea86e8897b17552#daa3c8b014a601fa277e8653dea86e8897b17552" dependencies = [ "cfg-if", "proc-macro-crate", @@ -2596,7 +2596,7 @@ dependencies = [ [[package]] name = "ruma-push-gateway-api" version = "0.11.0" -source = "git+https://github.com/ruma/ruma.git?rev=2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b#2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" +source = "git+https://github.com/ruma/ruma.git?rev=daa3c8b014a601fa277e8653dea86e8897b17552#daa3c8b014a601fa277e8653dea86e8897b17552" dependencies = [ "js_int", "ruma-common", @@ -2608,7 +2608,7 @@ dependencies = [ [[package]] name = "ruma-signatures" version = "0.17.0" -source = "git+https://github.com/ruma/ruma.git?rev=2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b#2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" +source = "git+https://github.com/ruma/ruma.git?rev=daa3c8b014a601fa277e8653dea86e8897b17552#daa3c8b014a601fa277e8653dea86e8897b17552" dependencies = [ "base64", "ed25519-dalek", @@ -2624,7 +2624,7 @@ dependencies = [ [[package]] name = "ruma-state-res" version = "0.13.0" -source = "git+https://github.com/ruma/ruma.git?rev=2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b#2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" +source = "git+https://github.com/ruma/ruma.git?rev=daa3c8b014a601fa277e8653dea86e8897b17552#daa3c8b014a601fa277e8653dea86e8897b17552" dependencies = [ "js_int", "ruma-common", @@ -2867,9 +2867,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.141" +version = "1.0.142" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" +checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7" dependencies = [ "itoa", "memchr", @@ -3274,9 +3274,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.47.0" +version = "1.47.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43864ed400b6043a4757a25c7a64a8efde741aed79a056a2fb348a406701bb35" +checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" dependencies = [ "backtrace", "bytes", @@ -4296,9 +4296,9 @@ checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" [[package]] name = "zune-jpeg" -version = "0.4.19" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9e525af0a6a658e031e95f14b7f889976b74a11ba0eca5a5fc9ac8a1c43a6a" +checksum = "fc1f7e205ce79eb2da3cd71c5f55f3589785cb7c79f6a03d1c8d1491bda5d089" dependencies = [ "zune-core", ] diff --git a/Cargo.toml b/Cargo.toml index 1c8b224a..78a5d948 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -145,7 +145,7 @@ xdg = "2.5.2" [dependencies.ruma] git = "https://github.com/ruma/ruma.git" -rev = "2ea8b833e3a80c1d650964a1f3e83ee569cf5c0b" +rev = "daa3c8b014a601fa277e8653dea86e8897b17552" features = [ "compat-server-signing-key-version", "compat-empty-string-null", diff --git a/src/api/client_server/account.rs b/src/api/client_server/account.rs index b45af7df..8d729439 100644 --- a/src/api/client_server/account.rs +++ b/src/api/client_server/account.rs @@ -165,7 +165,7 @@ pub(crate) async fn register_route( stages: vec![AuthType::RegistrationToken], }], completed: Vec::new(), - params: Box::default(), + params: Some(Box::default()), session: None, auth_error: None, }; @@ -178,7 +178,7 @@ pub(crate) async fn register_route( stages: vec![AuthType::Dummy], }], completed: Vec::new(), - params: Box::default(), + params: Some(Box::default()), session: None, auth_error: None, }; @@ -333,7 +333,7 @@ pub(crate) async fn change_password_route( stages: vec![AuthType::Password], }], completed: Vec::new(), - params: Box::default(), + params: Some(Box::default()), session: None, auth_error: None, }; @@ -421,7 +421,7 @@ pub(crate) async fn deactivate_route( stages: vec![AuthType::Password], }], completed: Vec::new(), - params: Box::default(), + params: Some(Box::default()), session: None, auth_error: None, }; diff --git a/src/api/client_server/device.rs b/src/api/client_server/device.rs index adecd073..28130c00 100644 --- a/src/api/client_server/device.rs +++ b/src/api/client_server/device.rs @@ -94,7 +94,7 @@ pub(crate) async fn delete_device_route( stages: vec![AuthType::Password], }], completed: Vec::new(), - params: Box::default(), + params: Some(Box::default()), session: None, auth_error: None, }; @@ -148,7 +148,7 @@ pub(crate) async fn delete_devices_route( stages: vec![AuthType::Password], }], completed: Vec::new(), - params: Box::default(), + params: Some(Box::default()), session: None, auth_error: None, }; diff --git a/src/api/client_server/keys.rs b/src/api/client_server/keys.rs index 7c22d56e..5437a7da 100644 --- a/src/api/client_server/keys.rs +++ b/src/api/client_server/keys.rs @@ -122,7 +122,7 @@ pub(crate) async fn upload_signing_keys_route( stages: vec![AuthType::Password], }], completed: Vec::new(), - params: Box::default(), + params: Some(Box::default()), session: None, auth_error: None, }; From d11731b74f9b7a3cd3fb1f20eb5bb463490fcbfb Mon Sep 17 00:00:00 2001 From: Olivia Lee Date: Sat, 2 Aug 2025 17:45:42 -0700 Subject: [PATCH 4/6] Bump ruma to c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337 (refactor Capabilities) --- Cargo.lock | 34 +++++++++++++-------------- Cargo.toml | 2 +- src/api/client_server/capabilities.rs | 3 ++- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e744dc60..6c7c97d8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2441,8 +2441,8 @@ dependencies = [ [[package]] name = "ruma" -version = "0.12.1" -source = "git+https://github.com/ruma/ruma.git?rev=daa3c8b014a601fa277e8653dea86e8897b17552#daa3c8b014a601fa277e8653dea86e8897b17552" +version = "0.12.2" +source = "git+https://github.com/ruma/ruma.git?rev=c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337#c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" dependencies = [ "assign", "js_int", @@ -2461,7 +2461,7 @@ dependencies = [ [[package]] name = "ruma-appservice-api" version = "0.12.1" -source = "git+https://github.com/ruma/ruma.git?rev=daa3c8b014a601fa277e8653dea86e8897b17552#daa3c8b014a601fa277e8653dea86e8897b17552" +source = "git+https://github.com/ruma/ruma.git?rev=c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337#c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" dependencies = [ "js_int", "ruma-common", @@ -2472,8 +2472,8 @@ dependencies = [ [[package]] name = "ruma-client-api" -version = "0.20.1" -source = "git+https://github.com/ruma/ruma.git?rev=daa3c8b014a601fa277e8653dea86e8897b17552#daa3c8b014a601fa277e8653dea86e8897b17552" +version = "0.20.2" +source = "git+https://github.com/ruma/ruma.git?rev=c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337#c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" dependencies = [ "as_variant", "assign", @@ -2495,8 +2495,8 @@ dependencies = [ [[package]] name = "ruma-common" -version = "0.15.1" -source = "git+https://github.com/ruma/ruma.git?rev=daa3c8b014a601fa277e8653dea86e8897b17552#daa3c8b014a601fa277e8653dea86e8897b17552" +version = "0.15.2" +source = "git+https://github.com/ruma/ruma.git?rev=c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337#c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" dependencies = [ "as_variant", "base64", @@ -2526,8 +2526,8 @@ dependencies = [ [[package]] name = "ruma-events" -version = "0.30.1" -source = "git+https://github.com/ruma/ruma.git?rev=daa3c8b014a601fa277e8653dea86e8897b17552#daa3c8b014a601fa277e8653dea86e8897b17552" +version = "0.30.2" +source = "git+https://github.com/ruma/ruma.git?rev=c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337#c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" dependencies = [ "as_variant", "indexmap 2.10.0", @@ -2549,8 +2549,8 @@ dependencies = [ [[package]] name = "ruma-federation-api" -version = "0.11.0" -source = "git+https://github.com/ruma/ruma.git?rev=daa3c8b014a601fa277e8653dea86e8897b17552#daa3c8b014a601fa277e8653dea86e8897b17552" +version = "0.11.1" +source = "git+https://github.com/ruma/ruma.git?rev=c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337#c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" dependencies = [ "bytes", "headers", @@ -2572,7 +2572,7 @@ dependencies = [ [[package]] name = "ruma-identifiers-validation" version = "0.10.1" -source = "git+https://github.com/ruma/ruma.git?rev=daa3c8b014a601fa277e8653dea86e8897b17552#daa3c8b014a601fa277e8653dea86e8897b17552" +source = "git+https://github.com/ruma/ruma.git?rev=c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337#c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" dependencies = [ "js_int", "thiserror 2.0.12", @@ -2581,7 +2581,7 @@ dependencies = [ [[package]] name = "ruma-macros" version = "0.15.1" -source = "git+https://github.com/ruma/ruma.git?rev=daa3c8b014a601fa277e8653dea86e8897b17552#daa3c8b014a601fa277e8653dea86e8897b17552" +source = "git+https://github.com/ruma/ruma.git?rev=c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337#c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" dependencies = [ "cfg-if", "proc-macro-crate", @@ -2596,7 +2596,7 @@ dependencies = [ [[package]] name = "ruma-push-gateway-api" version = "0.11.0" -source = "git+https://github.com/ruma/ruma.git?rev=daa3c8b014a601fa277e8653dea86e8897b17552#daa3c8b014a601fa277e8653dea86e8897b17552" +source = "git+https://github.com/ruma/ruma.git?rev=c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337#c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" dependencies = [ "js_int", "ruma-common", @@ -2607,8 +2607,8 @@ dependencies = [ [[package]] name = "ruma-signatures" -version = "0.17.0" -source = "git+https://github.com/ruma/ruma.git?rev=daa3c8b014a601fa277e8653dea86e8897b17552#daa3c8b014a601fa277e8653dea86e8897b17552" +version = "0.17.1" +source = "git+https://github.com/ruma/ruma.git?rev=c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337#c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" dependencies = [ "base64", "ed25519-dalek", @@ -2624,7 +2624,7 @@ dependencies = [ [[package]] name = "ruma-state-res" version = "0.13.0" -source = "git+https://github.com/ruma/ruma.git?rev=daa3c8b014a601fa277e8653dea86e8897b17552#daa3c8b014a601fa277e8653dea86e8897b17552" +source = "git+https://github.com/ruma/ruma.git?rev=c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337#c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" dependencies = [ "js_int", "ruma-common", diff --git a/Cargo.toml b/Cargo.toml index 78a5d948..3c722659 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -145,7 +145,7 @@ xdg = "2.5.2" [dependencies.ruma] git = "https://github.com/ruma/ruma.git" -rev = "daa3c8b014a601fa277e8653dea86e8897b17552" +rev = "c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" features = [ "compat-server-signing-key-version", "compat-empty-string-null", diff --git a/src/api/client_server/capabilities.rs b/src/api/client_server/capabilities.rs index 515ebfc1..f5542a10 100644 --- a/src/api/client_server/capabilities.rs +++ b/src/api/client_server/capabilities.rs @@ -1,7 +1,8 @@ use std::collections::BTreeMap; use ruma::api::client::discovery::get_capabilities::{ - self, Capabilities, RoomVersionStability, RoomVersionsCapability, + self, + v3::{Capabilities, RoomVersionStability, RoomVersionsCapability}, }; use crate::{services, Ar, Ra, Result}; From 3d7d28fba7ae6147eb9ebb9780fc40a310664455 Mon Sep 17 00:00:00 2001 From: Olivia Lee Date: Sat, 2 Aug 2025 17:59:35 -0700 Subject: [PATCH 5/6] Bump ruma to 5aebd8f81fc70226940c1a46eb57ef298230d34f (SupportedVersions refactor) --- Cargo.lock | 30 +++++++++++++++--------------- Cargo.toml | 2 +- src/api/appservice_server.rs | 7 +++++-- src/api/server_server.rs | 7 +++++-- src/service/pusher.rs | 6 +++++- 5 files changed, 31 insertions(+), 21 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6c7c97d8..9a9e4e93 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2441,8 +2441,8 @@ dependencies = [ [[package]] name = "ruma" -version = "0.12.2" -source = "git+https://github.com/ruma/ruma.git?rev=c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337#c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" +version = "0.12.3" +source = "git+https://github.com/ruma/ruma.git?rev=5aebd8f81fc70226940c1a46eb57ef298230d34f#5aebd8f81fc70226940c1a46eb57ef298230d34f" dependencies = [ "assign", "js_int", @@ -2460,8 +2460,8 @@ dependencies = [ [[package]] name = "ruma-appservice-api" -version = "0.12.1" -source = "git+https://github.com/ruma/ruma.git?rev=c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337#c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" +version = "0.12.2" +source = "git+https://github.com/ruma/ruma.git?rev=5aebd8f81fc70226940c1a46eb57ef298230d34f#5aebd8f81fc70226940c1a46eb57ef298230d34f" dependencies = [ "js_int", "ruma-common", @@ -2472,8 +2472,8 @@ dependencies = [ [[package]] name = "ruma-client-api" -version = "0.20.2" -source = "git+https://github.com/ruma/ruma.git?rev=c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337#c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" +version = "0.20.3" +source = "git+https://github.com/ruma/ruma.git?rev=5aebd8f81fc70226940c1a46eb57ef298230d34f#5aebd8f81fc70226940c1a46eb57ef298230d34f" dependencies = [ "as_variant", "assign", @@ -2496,7 +2496,7 @@ dependencies = [ [[package]] name = "ruma-common" version = "0.15.2" -source = "git+https://github.com/ruma/ruma.git?rev=c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337#c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" +source = "git+https://github.com/ruma/ruma.git?rev=5aebd8f81fc70226940c1a46eb57ef298230d34f#5aebd8f81fc70226940c1a46eb57ef298230d34f" dependencies = [ "as_variant", "base64", @@ -2526,8 +2526,8 @@ dependencies = [ [[package]] name = "ruma-events" -version = "0.30.2" -source = "git+https://github.com/ruma/ruma.git?rev=c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337#c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" +version = "0.30.3" +source = "git+https://github.com/ruma/ruma.git?rev=5aebd8f81fc70226940c1a46eb57ef298230d34f#5aebd8f81fc70226940c1a46eb57ef298230d34f" dependencies = [ "as_variant", "indexmap 2.10.0", @@ -2550,7 +2550,7 @@ dependencies = [ [[package]] name = "ruma-federation-api" version = "0.11.1" -source = "git+https://github.com/ruma/ruma.git?rev=c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337#c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" +source = "git+https://github.com/ruma/ruma.git?rev=5aebd8f81fc70226940c1a46eb57ef298230d34f#5aebd8f81fc70226940c1a46eb57ef298230d34f" dependencies = [ "bytes", "headers", @@ -2572,7 +2572,7 @@ dependencies = [ [[package]] name = "ruma-identifiers-validation" version = "0.10.1" -source = "git+https://github.com/ruma/ruma.git?rev=c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337#c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" +source = "git+https://github.com/ruma/ruma.git?rev=5aebd8f81fc70226940c1a46eb57ef298230d34f#5aebd8f81fc70226940c1a46eb57ef298230d34f" dependencies = [ "js_int", "thiserror 2.0.12", @@ -2581,7 +2581,7 @@ dependencies = [ [[package]] name = "ruma-macros" version = "0.15.1" -source = "git+https://github.com/ruma/ruma.git?rev=c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337#c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" +source = "git+https://github.com/ruma/ruma.git?rev=5aebd8f81fc70226940c1a46eb57ef298230d34f#5aebd8f81fc70226940c1a46eb57ef298230d34f" dependencies = [ "cfg-if", "proc-macro-crate", @@ -2596,7 +2596,7 @@ dependencies = [ [[package]] name = "ruma-push-gateway-api" version = "0.11.0" -source = "git+https://github.com/ruma/ruma.git?rev=c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337#c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" +source = "git+https://github.com/ruma/ruma.git?rev=5aebd8f81fc70226940c1a46eb57ef298230d34f#5aebd8f81fc70226940c1a46eb57ef298230d34f" dependencies = [ "js_int", "ruma-common", @@ -2608,7 +2608,7 @@ dependencies = [ [[package]] name = "ruma-signatures" version = "0.17.1" -source = "git+https://github.com/ruma/ruma.git?rev=c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337#c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" +source = "git+https://github.com/ruma/ruma.git?rev=5aebd8f81fc70226940c1a46eb57ef298230d34f#5aebd8f81fc70226940c1a46eb57ef298230d34f" dependencies = [ "base64", "ed25519-dalek", @@ -2624,7 +2624,7 @@ dependencies = [ [[package]] name = "ruma-state-res" version = "0.13.0" -source = "git+https://github.com/ruma/ruma.git?rev=c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337#c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" +source = "git+https://github.com/ruma/ruma.git?rev=5aebd8f81fc70226940c1a46eb57ef298230d34f#5aebd8f81fc70226940c1a46eb57ef298230d34f" dependencies = [ "js_int", "ruma-common", diff --git a/Cargo.toml b/Cargo.toml index 3c722659..92c95947 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -145,7 +145,7 @@ xdg = "2.5.2" [dependencies.ruma] git = "https://github.com/ruma/ruma.git" -rev = "c4f467781a7ef330dc0b7eb5d0d0cad77ebc3337" +rev = "5aebd8f81fc70226940c1a46eb57ef298230d34f" features = [ "compat-server-signing-key-version", "compat-empty-string-null", diff --git a/src/api/appservice_server.rs b/src/api/appservice_server.rs index 117d1914..ba2c4652 100644 --- a/src/api/appservice_server.rs +++ b/src/api/appservice_server.rs @@ -3,7 +3,7 @@ use std::{fmt::Debug, mem, time::Duration}; use bytes::BytesMut; use ruma::api::{ appservice::Registration, IncomingResponse, MatrixVersion, OutgoingRequest, - SendAccessToken, + SendAccessToken, SupportedVersions, }; use tracing::warn; @@ -31,7 +31,10 @@ where .try_into_http_request::( &destination, SendAccessToken::IfRequired(hs_token), - &[MatrixVersion::V1_0], + &SupportedVersions { + versions: [MatrixVersion::V1_0].into_iter().collect(), + features: vec![], + }, ) .unwrap() .map(BytesMut::freeze); diff --git a/src/api/server_server.rs b/src/api/server_server.rs index 39b208f0..aab20c89 100644 --- a/src/api/server_server.rs +++ b/src/api/server_server.rs @@ -42,7 +42,7 @@ use ruma::{ }, }, EndpointError, IncomingResponse, MatrixVersion, OutgoingRequest, - OutgoingResponse, SendAccessToken, + OutgoingResponse, SendAccessToken, SupportedVersions, }, directory::{Filter, RoomNetwork}, events::{ @@ -199,7 +199,10 @@ where .try_into_http_request::>( &actual_destination_str, SendAccessToken::IfRequired(""), - &[MatrixVersion::V1_11], + &SupportedVersions { + versions: [MatrixVersion::V1_11].into_iter().collect(), + features: vec![], + }, ) .map_err(|error| { warn!( diff --git a/src/service/pusher.rs b/src/service/pusher.rs index 8f58cea8..c55090d1 100644 --- a/src/service/pusher.rs +++ b/src/service/pusher.rs @@ -11,6 +11,7 @@ use ruma::{ }, }, IncomingResponse, MatrixVersion, OutgoingRequest, SendAccessToken, + SupportedVersions, }, events::{ room::power_levels::RoomPowerLevelsEventContent, AnySyncTimelineEvent, @@ -78,7 +79,10 @@ impl Service { .try_into_http_request::( &destination, SendAccessToken::IfRequired(""), - &[MatrixVersion::V1_0], + &SupportedVersions { + versions: [MatrixVersion::V1_0].into_iter().collect(), + features: vec![], + }, ) .map_err(|error| { warn!(%error, %destination, "Failed to find destination"); From a0b846baa3684568705e1fd483aa2e3e4a9d586b Mon Sep 17 00:00:00 2001 From: Olivia Lee Date: Sun, 13 Jul 2025 21:35:37 -0700 Subject: [PATCH 6/6] WIP: bump ruma to be19d07d850a69a5872dcc38f15a0bafb06828e5 (stateres refactor #2) --- Cargo.lock | 22 +++++++++++----------- Cargo.toml | 2 +- src/api/client_server/membership.rs | 16 +++++++++++++++- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9a9e4e93..3e6345f7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2442,7 +2442,7 @@ dependencies = [ [[package]] name = "ruma" version = "0.12.3" -source = "git+https://github.com/ruma/ruma.git?rev=5aebd8f81fc70226940c1a46eb57ef298230d34f#5aebd8f81fc70226940c1a46eb57ef298230d34f" +source = "git+https://github.com/ruma/ruma.git?rev=be19d07d850a69a5872dcc38f15a0bafb06828e5#be19d07d850a69a5872dcc38f15a0bafb06828e5" dependencies = [ "assign", "js_int", @@ -2461,7 +2461,7 @@ dependencies = [ [[package]] name = "ruma-appservice-api" version = "0.12.2" -source = "git+https://github.com/ruma/ruma.git?rev=5aebd8f81fc70226940c1a46eb57ef298230d34f#5aebd8f81fc70226940c1a46eb57ef298230d34f" +source = "git+https://github.com/ruma/ruma.git?rev=be19d07d850a69a5872dcc38f15a0bafb06828e5#be19d07d850a69a5872dcc38f15a0bafb06828e5" dependencies = [ "js_int", "ruma-common", @@ -2473,7 +2473,7 @@ dependencies = [ [[package]] name = "ruma-client-api" version = "0.20.3" -source = "git+https://github.com/ruma/ruma.git?rev=5aebd8f81fc70226940c1a46eb57ef298230d34f#5aebd8f81fc70226940c1a46eb57ef298230d34f" +source = "git+https://github.com/ruma/ruma.git?rev=be19d07d850a69a5872dcc38f15a0bafb06828e5#be19d07d850a69a5872dcc38f15a0bafb06828e5" dependencies = [ "as_variant", "assign", @@ -2496,7 +2496,7 @@ dependencies = [ [[package]] name = "ruma-common" version = "0.15.2" -source = "git+https://github.com/ruma/ruma.git?rev=5aebd8f81fc70226940c1a46eb57ef298230d34f#5aebd8f81fc70226940c1a46eb57ef298230d34f" +source = "git+https://github.com/ruma/ruma.git?rev=be19d07d850a69a5872dcc38f15a0bafb06828e5#be19d07d850a69a5872dcc38f15a0bafb06828e5" dependencies = [ "as_variant", "base64", @@ -2527,7 +2527,7 @@ dependencies = [ [[package]] name = "ruma-events" version = "0.30.3" -source = "git+https://github.com/ruma/ruma.git?rev=5aebd8f81fc70226940c1a46eb57ef298230d34f#5aebd8f81fc70226940c1a46eb57ef298230d34f" +source = "git+https://github.com/ruma/ruma.git?rev=be19d07d850a69a5872dcc38f15a0bafb06828e5#be19d07d850a69a5872dcc38f15a0bafb06828e5" dependencies = [ "as_variant", "indexmap 2.10.0", @@ -2550,7 +2550,7 @@ dependencies = [ [[package]] name = "ruma-federation-api" version = "0.11.1" -source = "git+https://github.com/ruma/ruma.git?rev=5aebd8f81fc70226940c1a46eb57ef298230d34f#5aebd8f81fc70226940c1a46eb57ef298230d34f" +source = "git+https://github.com/ruma/ruma.git?rev=be19d07d850a69a5872dcc38f15a0bafb06828e5#be19d07d850a69a5872dcc38f15a0bafb06828e5" dependencies = [ "bytes", "headers", @@ -2572,7 +2572,7 @@ dependencies = [ [[package]] name = "ruma-identifiers-validation" version = "0.10.1" -source = "git+https://github.com/ruma/ruma.git?rev=5aebd8f81fc70226940c1a46eb57ef298230d34f#5aebd8f81fc70226940c1a46eb57ef298230d34f" +source = "git+https://github.com/ruma/ruma.git?rev=be19d07d850a69a5872dcc38f15a0bafb06828e5#be19d07d850a69a5872dcc38f15a0bafb06828e5" dependencies = [ "js_int", "thiserror 2.0.12", @@ -2581,7 +2581,7 @@ dependencies = [ [[package]] name = "ruma-macros" version = "0.15.1" -source = "git+https://github.com/ruma/ruma.git?rev=5aebd8f81fc70226940c1a46eb57ef298230d34f#5aebd8f81fc70226940c1a46eb57ef298230d34f" +source = "git+https://github.com/ruma/ruma.git?rev=be19d07d850a69a5872dcc38f15a0bafb06828e5#be19d07d850a69a5872dcc38f15a0bafb06828e5" dependencies = [ "cfg-if", "proc-macro-crate", @@ -2596,7 +2596,7 @@ dependencies = [ [[package]] name = "ruma-push-gateway-api" version = "0.11.0" -source = "git+https://github.com/ruma/ruma.git?rev=5aebd8f81fc70226940c1a46eb57ef298230d34f#5aebd8f81fc70226940c1a46eb57ef298230d34f" +source = "git+https://github.com/ruma/ruma.git?rev=be19d07d850a69a5872dcc38f15a0bafb06828e5#be19d07d850a69a5872dcc38f15a0bafb06828e5" dependencies = [ "js_int", "ruma-common", @@ -2608,7 +2608,7 @@ dependencies = [ [[package]] name = "ruma-signatures" version = "0.17.1" -source = "git+https://github.com/ruma/ruma.git?rev=5aebd8f81fc70226940c1a46eb57ef298230d34f#5aebd8f81fc70226940c1a46eb57ef298230d34f" +source = "git+https://github.com/ruma/ruma.git?rev=be19d07d850a69a5872dcc38f15a0bafb06828e5#be19d07d850a69a5872dcc38f15a0bafb06828e5" dependencies = [ "base64", "ed25519-dalek", @@ -2624,7 +2624,7 @@ dependencies = [ [[package]] name = "ruma-state-res" version = "0.13.0" -source = "git+https://github.com/ruma/ruma.git?rev=5aebd8f81fc70226940c1a46eb57ef298230d34f#5aebd8f81fc70226940c1a46eb57ef298230d34f" +source = "git+https://github.com/ruma/ruma.git?rev=be19d07d850a69a5872dcc38f15a0bafb06828e5#be19d07d850a69a5872dcc38f15a0bafb06828e5" dependencies = [ "js_int", "ruma-common", diff --git a/Cargo.toml b/Cargo.toml index 92c95947..09920058 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -145,7 +145,7 @@ xdg = "2.5.2" [dependencies.ruma] git = "https://github.com/ruma/ruma.git" -rev = "5aebd8f81fc70226940c1a46eb57ef298230d34f" +rev = "be19d07d850a69a5872dcc38f15a0bafb06828e5" features = [ "compat-server-signing-key-version", "compat-empty-string-null", diff --git a/src/api/client_server/membership.rs b/src/api/client_server/membership.rs index e0afec6b..0ffca029 100644 --- a/src/api/client_server/membership.rs +++ b/src/api/client_server/membership.rs @@ -1048,7 +1048,21 @@ async fn join_room_by_id_helper( } info!("Running send_join auth check"); - state_res::event_auth::auth_check( + state_res::check_state_independent_auth_rules( + &room_version_rules.authorization, + &parsed_join_pdu, + |event_id| + services() + .rooms + .timeline + .get_pdu(event_id) + .ok()? + ) + .map_err(|error| { + warn!(%error, "Auth check failed"); + Error::BadRequest(ErrorKind::InvalidParam, "Auth check failed") + })?; + state_res::check_state_dependent_auth_rules( &room_version_rules.authorization, &parsed_join_pdu, |k, s| {