diff --git a/src/admin/debug/commands.rs b/src/admin/debug/commands.rs index af7bd79f..855941fd 100644 --- a/src/admin/debug/commands.rs +++ b/src/admin/debug/commands.rs @@ -554,7 +554,7 @@ pub(super) async fn first_pdu_in_room( .services .rooms .state_cache - .server_in_room(&self.services.server.config.server_name, &room_id) + .server_in_room(&self.services.server.name, &room_id) .await { return Ok(RoomMessageEventContent::text_plain( @@ -583,7 +583,7 @@ pub(super) async fn latest_pdu_in_room( .services .rooms .state_cache - .server_in_room(&self.services.server.config.server_name, &room_id) + .server_in_room(&self.services.server.name, &room_id) .await { return Ok(RoomMessageEventContent::text_plain( @@ -613,7 +613,7 @@ pub(super) async fn force_set_room_state_from_server( .services .rooms .state_cache - .server_in_room(&self.services.server.config.server_name, &room_id) + .server_in_room(&self.services.server.name, &room_id) .await { return Ok(RoomMessageEventContent::text_plain( @@ -757,7 +757,7 @@ pub(super) async fn get_signing_keys( query: bool, ) -> Result { let server_name = - server_name.unwrap_or_else(|| self.services.server.config.server_name.clone().into()); + server_name.unwrap_or_else(|| self.services.server.name.clone().into()); if let Some(notary) = notary { let signing_keys = self @@ -794,7 +794,7 @@ pub(super) async fn get_verify_keys( server_name: Option>, ) -> Result { let server_name = - server_name.unwrap_or_else(|| self.services.server.config.server_name.clone().into()); + server_name.unwrap_or_else(|| self.services.server.name.clone().into()); let keys = self .services @@ -824,7 +824,7 @@ pub(super) async fn resolve_true_destination( )); } - if server_name == self.services.server.config.server_name { + if server_name == self.services.server.name { return Ok(RoomMessageEventContent::text_plain( "Not allowed to send federation requests to ourselves. Please use `get-pdu` for \ fetching local PDUs.", diff --git a/src/admin/federation/commands.rs b/src/admin/federation/commands.rs index be91ef0a..13bc8da4 100644 --- a/src/admin/federation/commands.rs +++ b/src/admin/federation/commands.rs @@ -92,7 +92,7 @@ pub(super) async fn remote_user_in_rooms( &self, user_id: Box, ) -> Result { - if user_id.server_name() == self.services.server.config.server_name { + if user_id.server_name() == self.services.server.name { return Ok(RoomMessageEventContent::text_plain( "User belongs to our server, please use `list-joined-rooms` user admin command \ instead.", diff --git a/src/admin/server/commands.rs b/src/admin/server/commands.rs index 3ea27883..47509bad 100644 --- a/src/admin/server/commands.rs +++ b/src/admin/server/commands.rs @@ -34,7 +34,7 @@ pub(super) async fn reload_config( ) -> Result { let path = path.as_deref().into_iter(); let config = Config::load(path).and_then(|raw| Config::new(&raw))?; - if config.server_name != self.services.server.config.server_name { + if config.server_name != self.services.server.name { return Err!("You can't change the server name."); } diff --git a/src/api/client/openid.rs b/src/api/client/openid.rs index 3547d284..671d0c6d 100644 --- a/src/api/client/openid.rs +++ b/src/api/client/openid.rs @@ -37,7 +37,7 @@ pub(crate) async fn create_openid_token_route( Ok(account::request_openid_token::v3::Response { access_token, token_type: TokenType::Bearer, - matrix_server_name: services.server.config.server_name.clone(), + matrix_server_name: services.server.name.clone(), expires_in: Duration::from_secs(expires_in), }) } diff --git a/src/api/client/report.rs b/src/api/client/report.rs index 2b25b518..57de3f12 100644 --- a/src/api/client/report.rs +++ b/src/api/client/report.rs @@ -50,7 +50,7 @@ pub(crate) async fn report_room_route( if !services .rooms .state_cache - .server_in_room(&services.server.config.server_name, &body.room_id) + .server_in_room(&services.server.name, &body.room_id) .await { return Err!(Request(NotFound( diff --git a/src/api/client/room/create.rs b/src/api/client/room/create.rs index 1b6e8667..a401b63d 100644 --- a/src/api/client/room/create.rs +++ b/src/api/client/room/create.rs @@ -71,7 +71,7 @@ pub(crate) async fn create_room_route( let room_id: OwnedRoomId = if let Some(custom_room_id) = &body.room_id { custom_room_id_check(&services, custom_room_id)? } else { - RoomId::new(&services.server.config.server_name) + RoomId::new(&services.server.name) }; // check if room ID doesn't already exist instead of erroring on auth check diff --git a/src/api/client/voip.rs b/src/api/client/voip.rs index c08b1fdf..70ad4913 100644 --- a/src/api/client/voip.rs +++ b/src/api/client/voip.rs @@ -38,7 +38,7 @@ pub(crate) async fn turn_server_route( let user = body.sender_user.unwrap_or_else(|| { UserId::parse_with_server_name( utils::random_string(RANDOM_USER_ID_LENGTH).to_lowercase(), - &services.server.config.server_name, + &services.server.name, ) .unwrap() }); diff --git a/src/core/server.rs b/src/core/server.rs index 6838c9c9..05a4aae7 100644 --- a/src/core/server.rs +++ b/src/core/server.rs @@ -6,12 +6,17 @@ use std::{ time::SystemTime, }; +use ruma::OwnedServerName; use tokio::{runtime, sync::broadcast}; use crate::{config, config::Config, err, log::Log, metrics::Metrics, Err, Result}; /// Server runtime state; public portion pub struct Server { + /// Configured name of server. This is the same as the one in the config + /// but developers can (and should) reference this string instead. + pub name: OwnedServerName, + /// Server-wide configuration instance pub config: config::Manager, @@ -46,6 +51,7 @@ impl Server { #[must_use] pub fn new(config: Config, runtime: Option, log: Log) -> Self { Self { + name: config.server_name.clone(), config: config::Manager::new(config), started: SystemTime::now(), stopping: AtomicBool::new(false), diff --git a/src/service/globals/mod.rs b/src/service/globals/mod.rs index ef34054f..485d5020 100644 --- a/src/service/globals/mod.rs +++ b/src/service/globals/mod.rs @@ -61,11 +61,11 @@ impl crate::Service for Service { db, server: args.server.clone(), bad_event_ratelimiter: Arc::new(RwLock::new(HashMap::new())), - admin_alias: OwnedRoomAliasId::try_from(format!("#admins:{}", &config.server_name)) + admin_alias: OwnedRoomAliasId::try_from(format!("#admins:{}", &args.server.name)) .expect("#admins:server_name is valid alias name"), server_user: UserId::parse_with_server_name( String::from("conduit"), - &config.server_name, + &args.server.name, ) .expect("@conduit:server_name is valid"), turn_secret, @@ -107,7 +107,7 @@ impl Service { pub fn current_count(&self) -> Result { Ok(self.db.current_count()) } #[inline] - pub fn server_name(&self) -> &ServerName { self.server.config.server_name.as_ref() } + pub fn server_name(&self) -> &ServerName { self.server.name.as_ref() } pub fn allow_registration(&self) -> bool { self.server.config.allow_registration } @@ -207,7 +207,7 @@ impl Service { #[inline] pub fn server_is_ours(&self, server_name: &ServerName) -> bool { - server_name == self.server.config.server_name + server_name == self.server_name() } #[inline] diff --git a/src/service/migrations.rs b/src/service/migrations.rs index c42c0324..27b4ab5a 100644 --- a/src/service/migrations.rs +++ b/src/service/migrations.rs @@ -218,8 +218,6 @@ async fn migrate(services: &Services) -> Result<()> { } async fn db_lt_12(services: &Services) -> Result<()> { - let config = &services.server.config; - for username in &services .users .list_local_users() @@ -227,7 +225,8 @@ async fn db_lt_12(services: &Services) -> Result<()> { .collect::>() .await { - let user = match UserId::parse_with_server_name(username.as_str(), &config.server_name) { + let user = match UserId::parse_with_server_name(username.as_str(), &services.server.name) + { | Ok(u) => u, | Err(e) => { warn!("Invalid username {username}: {e}"); @@ -297,8 +296,6 @@ async fn db_lt_12(services: &Services) -> Result<()> { } async fn db_lt_13(services: &Services) -> Result<()> { - let config = &services.server.config; - for username in &services .users .list_local_users() @@ -306,7 +303,8 @@ async fn db_lt_13(services: &Services) -> Result<()> { .collect::>() .await { - let user = match UserId::parse_with_server_name(username.as_str(), &config.server_name) { + let user = match UserId::parse_with_server_name(username.as_str(), &services.server.name) + { | Ok(u) => u, | Err(e) => { warn!("Invalid username {username}: {e}"); diff --git a/src/service/resolver/actual.rs b/src/service/resolver/actual.rs index 33374240..66854764 100644 --- a/src/service/resolver/actual.rs +++ b/src/service/resolver/actual.rs @@ -401,8 +401,7 @@ impl super::Service { } fn validate_dest(&self, dest: &ServerName) -> Result<()> { - let config = &self.services.server.config; - if dest == config.server_name && !config.federation_loopback { + if dest == self.services.server.name && !self.services.server.config.federation_loopback { return Err!("Won't send federation request to ourselves"); } diff --git a/src/service/rooms/alias/mod.rs b/src/service/rooms/alias/mod.rs index 91797d01..17ed5e13 100644 --- a/src/service/rooms/alias/mod.rs +++ b/src/service/rooms/alias/mod.rs @@ -150,7 +150,7 @@ impl Service { let servers_contains_ours = || { servers .as_ref() - .is_some_and(|servers| servers.contains(&self.services.server.config.server_name)) + .is_some_and(|servers| servers.contains(&self.services.server.name)) }; if !server_is_ours && !servers_contains_ours() { diff --git a/src/service/sending/sender.rs b/src/service/sending/sender.rs index 5fd4cf91..122e75c5 100644 --- a/src/service/sending/sender.rs +++ b/src/service/sending/sender.rs @@ -850,7 +850,7 @@ impl Service { let txn_id = &*general_purpose::URL_SAFE_NO_PAD.encode(txn_hash); let request = send_transaction_message::v1::Request { - origin: self.server.config.server_name.clone(), + origin: self.server.name.clone(), pdus: pdu_jsons, edus: edu_jsons, origin_server_ts: MilliSecondsSinceUnixEpoch::now(),