From f3d3d4346273586ba548d25c06963aa71b6a882b Mon Sep 17 00:00:00 2001 From: timedout Date: Sat, 13 Jun 2026 22:56:40 +0100 Subject: [PATCH] feat: Implement MSC4491 support Requires forked ruma, if this is merged as-is I'll confiscate your fish. --- Cargo.lock | 42 ++++++++++++------------- Cargo.toml | 6 ++-- src/api/client/room/create.rs | 14 ++++++--- src/core/error/mod.rs | 4 +-- src/core/matrix/state_res/event_auth.rs | 4 +-- 5 files changed, 39 insertions(+), 31 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 24a48e381..9b7647d0d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4250,8 +4250,8 @@ dependencies = [ [[package]] name = "ruma" -version = "0.15.1" -source = "git+https://github.com/ruma/ruma.git?rev=3ecd80b92794d2d93f657a7b3db62d4be237526b#3ecd80b92794d2d93f657a7b3db62d4be237526b" +version = "0.16.0" +source = "git+https://github.com/timedoutuk/ruma.git?rev=7cafe7507d1c1f6d09bd4d453f52afc9d124fd7b#7cafe7507d1c1f6d09bd4d453f52afc9d124fd7b" dependencies = [ "assign", "js_int", @@ -4269,8 +4269,8 @@ dependencies = [ [[package]] name = "ruma-appservice-api" -version = "0.15.0" -source = "git+https://github.com/ruma/ruma.git?rev=3ecd80b92794d2d93f657a7b3db62d4be237526b#3ecd80b92794d2d93f657a7b3db62d4be237526b" +version = "0.16.0" +source = "git+https://github.com/timedoutuk/ruma.git?rev=7cafe7507d1c1f6d09bd4d453f52afc9d124fd7b#7cafe7507d1c1f6d09bd4d453f52afc9d124fd7b" dependencies = [ "js_int", "ruma-common", @@ -4281,8 +4281,8 @@ dependencies = [ [[package]] name = "ruma-client-api" -version = "0.23.1" -source = "git+https://github.com/ruma/ruma.git?rev=3ecd80b92794d2d93f657a7b3db62d4be237526b#3ecd80b92794d2d93f657a7b3db62d4be237526b" +version = "0.24.0" +source = "git+https://github.com/timedoutuk/ruma.git?rev=7cafe7507d1c1f6d09bd4d453f52afc9d124fd7b#7cafe7507d1c1f6d09bd4d453f52afc9d124fd7b" dependencies = [ "as_variant", "assign", @@ -4303,8 +4303,8 @@ dependencies = [ [[package]] name = "ruma-common" -version = "0.18.0" -source = "git+https://github.com/ruma/ruma.git?rev=3ecd80b92794d2d93f657a7b3db62d4be237526b#3ecd80b92794d2d93f657a7b3db62d4be237526b" +version = "0.19.0" +source = "git+https://github.com/timedoutuk/ruma.git?rev=7cafe7507d1c1f6d09bd4d453f52afc9d124fd7b#7cafe7507d1c1f6d09bd4d453f52afc9d124fd7b" dependencies = [ "as_variant", "base64 0.22.1", @@ -4336,8 +4336,8 @@ dependencies = [ [[package]] name = "ruma-events" -version = "0.33.0" -source = "git+https://github.com/ruma/ruma.git?rev=3ecd80b92794d2d93f657a7b3db62d4be237526b#3ecd80b92794d2d93f657a7b3db62d4be237526b" +version = "0.34.0" +source = "git+https://github.com/timedoutuk/ruma.git?rev=7cafe7507d1c1f6d09bd4d453f52afc9d124fd7b#7cafe7507d1c1f6d09bd4d453f52afc9d124fd7b" dependencies = [ "as_variant", "indexmap", @@ -4357,8 +4357,8 @@ dependencies = [ [[package]] name = "ruma-federation-api" -version = "0.14.0" -source = "git+https://github.com/ruma/ruma.git?rev=3ecd80b92794d2d93f657a7b3db62d4be237526b#3ecd80b92794d2d93f657a7b3db62d4be237526b" +version = "0.15.0" +source = "git+https://github.com/timedoutuk/ruma.git?rev=7cafe7507d1c1f6d09bd4d453f52afc9d124fd7b#7cafe7507d1c1f6d09bd4d453f52afc9d124fd7b" dependencies = [ "bytes", "headers", @@ -4381,7 +4381,7 @@ dependencies = [ [[package]] name = "ruma-identifiers-validation" version = "0.12.1" -source = "git+https://github.com/ruma/ruma.git?rev=3ecd80b92794d2d93f657a7b3db62d4be237526b#3ecd80b92794d2d93f657a7b3db62d4be237526b" +source = "git+https://github.com/timedoutuk/ruma.git?rev=7cafe7507d1c1f6d09bd4d453f52afc9d124fd7b#7cafe7507d1c1f6d09bd4d453f52afc9d124fd7b" dependencies = [ "js_int", "thiserror", @@ -4389,8 +4389,8 @@ dependencies = [ [[package]] name = "ruma-macros" -version = "0.18.0" -source = "git+https://github.com/ruma/ruma.git?rev=3ecd80b92794d2d93f657a7b3db62d4be237526b#3ecd80b92794d2d93f657a7b3db62d4be237526b" +version = "0.19.0" +source = "git+https://github.com/timedoutuk/ruma.git?rev=7cafe7507d1c1f6d09bd4d453f52afc9d124fd7b#7cafe7507d1c1f6d09bd4d453f52afc9d124fd7b" dependencies = [ "as_variant", "cfg-if", @@ -4405,8 +4405,8 @@ dependencies = [ [[package]] name = "ruma-push-gateway-api" -version = "0.14.0" -source = "git+https://github.com/ruma/ruma.git?rev=3ecd80b92794d2d93f657a7b3db62d4be237526b#3ecd80b92794d2d93f657a7b3db62d4be237526b" +version = "0.15.0" +source = "git+https://github.com/timedoutuk/ruma.git?rev=7cafe7507d1c1f6d09bd4d453f52afc9d124fd7b#7cafe7507d1c1f6d09bd4d453f52afc9d124fd7b" dependencies = [ "js_int", "ruma-common", @@ -4417,8 +4417,8 @@ dependencies = [ [[package]] name = "ruma-signatures" -version = "0.20.0" -source = "git+https://github.com/ruma/ruma.git?rev=3ecd80b92794d2d93f657a7b3db62d4be237526b#3ecd80b92794d2d93f657a7b3db62d4be237526b" +version = "0.21.0" +source = "git+https://github.com/timedoutuk/ruma.git?rev=7cafe7507d1c1f6d09bd4d453f52afc9d124fd7b#7cafe7507d1c1f6d09bd4d453f52afc9d124fd7b" dependencies = [ "base64 0.22.1", "ed25519-dalek", @@ -4433,8 +4433,8 @@ dependencies = [ [[package]] name = "ruma-state-res" -version = "0.16.0" -source = "git+https://github.com/ruma/ruma.git?rev=3ecd80b92794d2d93f657a7b3db62d4be237526b#3ecd80b92794d2d93f657a7b3db62d4be237526b" +version = "0.17.0" +source = "git+https://github.com/timedoutuk/ruma.git?rev=7cafe7507d1c1f6d09bd4d453f52afc9d124fd7b#7cafe7507d1c1f6d09bd4d453f52afc9d124fd7b" dependencies = [ "js_int", "ruma-common", diff --git a/Cargo.toml b/Cargo.toml index a832265c3..13c6b7aa1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -343,8 +343,9 @@ version = "1.1.1" # Used for matrix spec type definitions and helpers [workspace.dependencies.ruma] # version = "0.14.1" -git = "https://github.com/ruma/ruma.git" -rev = "3ecd80b92794d2d93f657a7b3db62d4be237526b" +#git = "https://github.com/ruma/ruma.git" +git = "https://github.com/timedoutuk/ruma.git" +rev = "7cafe7507d1c1f6d09bd4d453f52afc9d124fd7b" features = [ "appservice-api-c", "client-api", @@ -379,6 +380,7 @@ features = [ "unstable-msc4406", "unstable-msc4439", "unstable-msc4466", + "unstable-msc4491", "unstable-extensible-events", ] diff --git a/src/api/client/room/create.rs b/src/api/client/room/create.rs index 259fb9a12..f9f1ff38d 100644 --- a/src/api/client/room/create.rs +++ b/src/api/client/room/create.rs @@ -563,10 +563,16 @@ pub(crate) async fn create_room_route( // 9. Events implied by invite (and TODO: invite_3pid) drop(state_lock); for recipient_user in &invitees { - if let Err(e) = - invite_helper(&services, sender_user, recipient_user, &room_id, None, body.is_direct) - .boxed() - .await + if let Err(e) = invite_helper( + &services, + sender_user, + recipient_user, + &room_id, + body.invite_reason.clone(), + body.is_direct, + ) + .boxed() + .await { warn!(?e, "Failed to send invite"); } diff --git a/src/core/error/mod.rs b/src/core/error/mod.rs index 703726043..88528c43b 100644 --- a/src/core/error/mod.rs +++ b/src/core/error/mod.rs @@ -117,8 +117,8 @@ pub enum Error { Mxc(#[from] ruma::MxcUriError), #[error(transparent)] Mxid(#[from] ruma::IdParseError), - #[error("from {0}: {1}")] - Redaction(ruma::OwnedServerName, ruma::canonical_json::RedactionError), + // #[error("from {0}: {1}")] + // Redaction(ruma::OwnedServerName, ruma::canonical_json::RedactionError), #[error("{0:?}: {1}")] Request(ErrorKind, Cow<'static, str>, http::StatusCode), #[error(transparent)] diff --git a/src/core/matrix/state_res/event_auth.rs b/src/core/matrix/state_res/event_auth.rs index b40babc36..8abc4a25e 100644 --- a/src/core/matrix/state_res/event_auth.rs +++ b/src/core/matrix/state_res/event_auth.rs @@ -1,4 +1,4 @@ -use std::{borrow::Borrow, collections::BTreeSet}; +use std::collections::BTreeSet; use futures::{ Future, @@ -824,7 +824,7 @@ where let prev_event_is_create_event = prev_events .next() - .is_some_and(|event_id| event_id.borrow() == create_room.event_id().borrow()); + .is_some_and(|event_id| event_id == create_room.event_id()); let no_more_prev_events = prev_events.next().is_none(); if prev_event_is_create_event && no_more_prev_events {