diff --git a/src/router/run.rs b/src/router/run.rs index 5af7876a..34cdfb0f 100644 --- a/src/router/run.rs +++ b/src/router/run.rs @@ -39,7 +39,15 @@ pub(crate) async fn run(services: Arc) -> Result<()> { .runtime() .spawn(serve::serve(services.clone(), handle.clone(), tx.subscribe())); - // Focal point + // Run startup admin commands. + // This has to be done after the admin service is initialized otherwise it + // panics. + services.admin.startup_execute().await?; + + // Print first-run banner if necessary. This needs to be done after the startup + // admin commands are run in case one of them created the first user. + services.firstrun.print_first_run_banner(); + debug!("Running"); let res = tokio::select! { res = &mut listener => res.map_err(Error::from).unwrap_or_else(Err), diff --git a/src/service/admin/execute.rs b/src/service/admin/execute.rs index 9e7e9600..0df7b988 100644 --- a/src/service/admin/execute.rs +++ b/src/service/admin/execute.rs @@ -26,7 +26,7 @@ pub(super) async fn console_auto_stop(&self) { /// Execute admin commands after startup #[implement(super::Service)] -pub(crate) async fn startup_execute(&self) -> Result { +pub async fn startup_execute(&self) -> Result { // List of commands to execute let commands = &self.services.server.config.admin_execute; diff --git a/src/service/firstrun/mod.rs b/src/service/firstrun/mod.rs index 413c3c05..ba80fe82 100644 --- a/src/service/firstrun/mod.rs +++ b/src/service/firstrun/mod.rs @@ -5,7 +5,7 @@ use std::{ use askama::Template; use async_trait::async_trait; -use conduwuit::{Result, utils::ReadyExt}; +use conduwuit::{Result, info, utils::ReadyExt}; use futures::StreamExt; use ruma::{UserId, events::room::message::RoomMessageEventContent}; @@ -146,6 +146,8 @@ impl Service { .send_loud_message(RoomMessageEventContent::text_markdown(welcome_message)) .await?; + info!("{user} has been invited to the admin room as the first user."); + Ok(true) } @@ -162,7 +164,7 @@ impl Service { } } - pub(crate) fn print_first_run_banner(&self) { + pub fn print_first_run_banner(&self) { use yansi::Paint; // This function is specially called by the core after all other // services have started. It runs last to ensure that the banner it diff --git a/src/service/services.rs b/src/service/services.rs index dcf8364e..f976a5b1 100644 --- a/src/service/services.rs +++ b/src/service/services.rs @@ -149,13 +149,6 @@ impl Services { debug_info!("Services startup complete."); - // Run startup admin commands - self.admin.startup_execute().await?; - - // Prin first-run banner if necessary. This needs to be done after the startup - // admin commands are run in case one of them created the first user. - self.firstrun.print_first_run_banner(); - Ok(Arc::clone(self)) }