diff --git a/Cargo.lock b/Cargo.lock index 43814444c..7c6b9a74e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4174,7 +4174,7 @@ dependencies = [ [[package]] name = "ruma" version = "0.15.1" -source = "git+https://github.com/ruma/ruma.git?rev=9c9dccc93f054bbd28f23f630223fffa6289ecbc#9c9dccc93f054bbd28f23f630223fffa6289ecbc" +source = "git+https://github.com/timedoutuk/ruma.git?rev=9679644f410bf19fe71ec2ad55bce7faeee3de0f#9679644f410bf19fe71ec2ad55bce7faeee3de0f" dependencies = [ "assign", "js_int", @@ -4193,7 +4193,7 @@ dependencies = [ [[package]] name = "ruma-appservice-api" version = "0.15.0" -source = "git+https://github.com/ruma/ruma.git?rev=9c9dccc93f054bbd28f23f630223fffa6289ecbc#9c9dccc93f054bbd28f23f630223fffa6289ecbc" +source = "git+https://github.com/timedoutuk/ruma.git?rev=9679644f410bf19fe71ec2ad55bce7faeee3de0f#9679644f410bf19fe71ec2ad55bce7faeee3de0f" dependencies = [ "js_int", "ruma-common", @@ -4205,7 +4205,7 @@ dependencies = [ [[package]] name = "ruma-client-api" version = "0.23.1" -source = "git+https://github.com/ruma/ruma.git?rev=9c9dccc93f054bbd28f23f630223fffa6289ecbc#9c9dccc93f054bbd28f23f630223fffa6289ecbc" +source = "git+https://github.com/timedoutuk/ruma.git?rev=9679644f410bf19fe71ec2ad55bce7faeee3de0f#9679644f410bf19fe71ec2ad55bce7faeee3de0f" dependencies = [ "as_variant", "assign", @@ -4227,7 +4227,7 @@ dependencies = [ [[package]] name = "ruma-common" version = "0.18.0" -source = "git+https://github.com/ruma/ruma.git?rev=9c9dccc93f054bbd28f23f630223fffa6289ecbc#9c9dccc93f054bbd28f23f630223fffa6289ecbc" +source = "git+https://github.com/timedoutuk/ruma.git?rev=9679644f410bf19fe71ec2ad55bce7faeee3de0f#9679644f410bf19fe71ec2ad55bce7faeee3de0f" dependencies = [ "as_variant", "base64 0.22.1", @@ -4260,7 +4260,7 @@ dependencies = [ [[package]] name = "ruma-events" version = "0.33.0" -source = "git+https://github.com/ruma/ruma.git?rev=9c9dccc93f054bbd28f23f630223fffa6289ecbc#9c9dccc93f054bbd28f23f630223fffa6289ecbc" +source = "git+https://github.com/timedoutuk/ruma.git?rev=9679644f410bf19fe71ec2ad55bce7faeee3de0f#9679644f410bf19fe71ec2ad55bce7faeee3de0f" dependencies = [ "as_variant", "indexmap", @@ -4281,7 +4281,7 @@ dependencies = [ [[package]] name = "ruma-federation-api" version = "0.14.0" -source = "git+https://github.com/ruma/ruma.git?rev=9c9dccc93f054bbd28f23f630223fffa6289ecbc#9c9dccc93f054bbd28f23f630223fffa6289ecbc" +source = "git+https://github.com/timedoutuk/ruma.git?rev=9679644f410bf19fe71ec2ad55bce7faeee3de0f#9679644f410bf19fe71ec2ad55bce7faeee3de0f" dependencies = [ "bytes", "headers", @@ -4304,7 +4304,7 @@ dependencies = [ [[package]] name = "ruma-identifiers-validation" version = "0.12.1" -source = "git+https://github.com/ruma/ruma.git?rev=9c9dccc93f054bbd28f23f630223fffa6289ecbc#9c9dccc93f054bbd28f23f630223fffa6289ecbc" +source = "git+https://github.com/timedoutuk/ruma.git?rev=9679644f410bf19fe71ec2ad55bce7faeee3de0f#9679644f410bf19fe71ec2ad55bce7faeee3de0f" dependencies = [ "js_int", "thiserror", @@ -4313,7 +4313,7 @@ dependencies = [ [[package]] name = "ruma-macros" version = "0.18.0" -source = "git+https://github.com/ruma/ruma.git?rev=9c9dccc93f054bbd28f23f630223fffa6289ecbc#9c9dccc93f054bbd28f23f630223fffa6289ecbc" +source = "git+https://github.com/timedoutuk/ruma.git?rev=9679644f410bf19fe71ec2ad55bce7faeee3de0f#9679644f410bf19fe71ec2ad55bce7faeee3de0f" dependencies = [ "as_variant", "cfg-if", @@ -4329,7 +4329,7 @@ dependencies = [ [[package]] name = "ruma-push-gateway-api" version = "0.14.0" -source = "git+https://github.com/ruma/ruma.git?rev=9c9dccc93f054bbd28f23f630223fffa6289ecbc#9c9dccc93f054bbd28f23f630223fffa6289ecbc" +source = "git+https://github.com/timedoutuk/ruma.git?rev=9679644f410bf19fe71ec2ad55bce7faeee3de0f#9679644f410bf19fe71ec2ad55bce7faeee3de0f" dependencies = [ "js_int", "ruma-common", @@ -4341,7 +4341,7 @@ dependencies = [ [[package]] name = "ruma-signatures" version = "0.20.0" -source = "git+https://github.com/ruma/ruma.git?rev=9c9dccc93f054bbd28f23f630223fffa6289ecbc#9c9dccc93f054bbd28f23f630223fffa6289ecbc" +source = "git+https://github.com/timedoutuk/ruma.git?rev=9679644f410bf19fe71ec2ad55bce7faeee3de0f#9679644f410bf19fe71ec2ad55bce7faeee3de0f" dependencies = [ "base64 0.22.1", "ed25519-dalek", @@ -4357,7 +4357,7 @@ dependencies = [ [[package]] name = "ruma-state-res" version = "0.16.0" -source = "git+https://github.com/ruma/ruma.git?rev=9c9dccc93f054bbd28f23f630223fffa6289ecbc#9c9dccc93f054bbd28f23f630223fffa6289ecbc" +source = "git+https://github.com/timedoutuk/ruma.git?rev=9679644f410bf19fe71ec2ad55bce7faeee3de0f#9679644f410bf19fe71ec2ad55bce7faeee3de0f" dependencies = [ "js_int", "ruma-common", diff --git a/Cargo.toml b/Cargo.toml index b7dbb3441..efcea6136 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 = "9c9dccc93f054bbd28f23f630223fffa6289ecbc" +#git = "https://github.com/ruma/ruma.git" +git = "https://github.com/timedoutuk/ruma.git" +rev = "9679644f410bf19fe71ec2ad55bce7faeee3de0f" features = [ "appservice-api-c", "client-api", @@ -379,6 +380,7 @@ features = [ "unstable-msc4293", "unstable-msc4406", "unstable-msc4439", + "unstable-msc4472", "unstable-extensible-events", ] diff --git a/src/api/client/capabilities.rs b/src/api/client/capabilities.rs index 5f3cabe49..d2cbb0571 100644 --- a/src/api/client/capabilities.rs +++ b/src/api/client/capabilities.rs @@ -1,7 +1,11 @@ use std::collections::BTreeMap; use axum::extract::State; -use conduwuit::{Result, Server}; +use conduwuit::{ + Result, Server, + info::room_version::{STABLE_ROOM_VERSIONS, UNSTABLE_ROOM_VERSIONS}, +}; +use itertools::Itertools; use ruma::{ RoomVersionId, api::client::discovery::get_capabilities::{ @@ -25,7 +29,13 @@ pub(crate) async fn get_capabilities_route( body: Ruma, ) -> Result { let available: BTreeMap = - Server::available_room_versions().collect(); + Server::available_room_versions() + .filter(|(version, _)| { + (services.config.allow_unstable_room_versions + && UNSTABLE_ROOM_VERSIONS.contains(version)) + || STABLE_ROOM_VERSIONS.contains(version) + }) + .collect(); let mut capabilities = Capabilities::default(); capabilities.room_versions = RoomVersionsCapability::new( diff --git a/src/core/info/room_version.rs b/src/core/info/room_version.rs index 65d55bb08..984191faa 100644 --- a/src/core/info/room_version.rs +++ b/src/core/info/room_version.rs @@ -21,6 +21,16 @@ pub const STABLE_ROOM_VERSIONS: &[RoomVersionId] = &[ pub const UNSTABLE_ROOM_VERSIONS: &[RoomVersionId] = &[RoomVersionId::V3, RoomVersionId::V4, RoomVersionId::V5]; +pub const DEPRECATED_ROOM_VERSIONS: &[RoomVersionId] = &[ + RoomVersionId::V3, + RoomVersionId::V4, + RoomVersionId::V5, + RoomVersionId::V6, + RoomVersionId::V7, + RoomVersionId::V8, + RoomVersionId::V9, +]; + type RoomVersion = (RoomVersionId, RoomVersionStability); impl crate::Server { @@ -29,6 +39,13 @@ impl crate::Server { self.supported_room_versions().any(is_equal_to!(*version)) } + pub fn version_is_deprecated(&self, version: &RoomVersionId) -> bool { + DEPRECATED_ROOM_VERSIONS + .iter() + .cloned() + .any(is_equal_to!(*version)) + } + #[inline] pub fn supported_room_versions(&self) -> impl Iterator + '_ { Self::available_room_versions() @@ -52,10 +69,15 @@ pub fn available_room_versions() -> impl Iterator { .iter() .cloned() .zip(once(RoomVersionStability::Unstable).cycle()); + let deprecated_room_versions = DEPRECATED_ROOM_VERSIONS + .iter() + .cloned() + .zip(once(RoomVersionStability::Deprecated).cycle()); STABLE_ROOM_VERSIONS .iter() .cloned() .zip(once(RoomVersionStability::Stable).cycle()) .chain(unstable_room_versions) + .chain(deprecated_room_versions) } 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 {