diff --git a/src/api/client/capabilities.rs b/src/api/client/capabilities.rs index 87cdb43d..7188aa23 100644 --- a/src/api/client/capabilities.rs +++ b/src/api/client/capabilities.rs @@ -1,6 +1,7 @@ use std::collections::BTreeMap; use axum::extract::State; +use conduwuit::{Result, Server}; use ruma::{ api::client::discovery::get_capabilities::{ self, Capabilities, GetLoginTokenCapability, RoomVersionStability, @@ -10,7 +11,7 @@ use ruma::{ }; use serde_json::json; -use crate::{Result, Ruma}; +use crate::Ruma; /// # `GET /_matrix/client/v3/capabilities` /// @@ -21,7 +22,7 @@ pub(crate) async fn get_capabilities_route( _body: Ruma, ) -> Result { let available: BTreeMap = - services.server.available_room_versions().collect(); + Server::available_room_versions().collect(); let mut capabilities = Capabilities::default(); capabilities.room_versions = RoomVersionsCapability { diff --git a/src/core/config/check.rs b/src/core/config/check.rs index 06ae5ebb..d7be54b1 100644 --- a/src/core/config/check.rs +++ b/src/core/config/check.rs @@ -4,7 +4,7 @@ use either::Either; use figment::Figment; use super::DEPRECATED_KEYS; -use crate::{debug, debug_info, debug_warn, error, warn, Config, Err, Result}; +use crate::{debug, debug_info, debug_warn, error, warn, Config, Err, Result, Server}; #[allow(clippy::cognitive_complexity)] pub fn check(config: &Config) -> Result<()> { @@ -233,6 +233,16 @@ pub fn check(config: &Config) -> Result<()> { } } + if !Server::available_room_versions() + .any(|(version, _)| version == config.default_room_version) + { + return Err!(Config( + "default_room_version", + "Room version {:?} is not available", + config.default_room_version + )); + } + Ok(()) } diff --git a/src/core/info/room_version.rs b/src/core/info/room_version.rs index 40f0cf0a..b33a8562 100644 --- a/src/core/info/room_version.rs +++ b/src/core/info/room_version.rs @@ -20,6 +20,8 @@ pub const STABLE_ROOM_VERSIONS: &[RoomVersionId] = &[ pub const UNSTABLE_ROOM_VERSIONS: &[RoomVersionId] = &[RoomVersionId::V2, RoomVersionId::V3, RoomVersionId::V4, RoomVersionId::V5]; +type RoomVersion = (RoomVersionId, RoomVersionStability); + impl crate::Server { #[inline] pub fn supported_room_version(&self, version: &RoomVersionId) -> bool { @@ -28,15 +30,13 @@ impl crate::Server { #[inline] pub fn supported_room_versions(&self) -> impl Iterator + '_ { - self.available_room_versions() + Self::available_room_versions() .filter(|(_, stability)| self.supported_stability(stability)) .map(at!(0)) } #[inline] - pub fn available_room_versions( - &self, - ) -> impl Iterator { + pub fn available_room_versions() -> impl Iterator { available_room_versions() } @@ -46,7 +46,7 @@ impl crate::Server { } } -pub fn available_room_versions() -> impl Iterator { +pub fn available_room_versions() -> impl Iterator { let unstable_room_versions = UNSTABLE_ROOM_VERSIONS .iter() .cloned() diff --git a/src/service/globals/mod.rs b/src/service/globals/mod.rs index f6ff2b09..fe84578a 100644 --- a/src/service/globals/mod.rs +++ b/src/service/globals/mod.rs @@ -72,14 +72,6 @@ impl crate::Service for Service { registration_token, }; - if !args - .server - .supported_room_version(&config.default_room_version) - { - error!(config=?s.config.default_room_version, fallback=?conduwuit::config::default_default_room_version(), "Room version in config isn't supported, falling back to default version"); - s.config.default_room_version = conduwuit::config::default_default_room_version(); - }; - Ok(Arc::new(s)) }