fix: Don't panic when running startup admin commands
This commit is contained in:
parent
7b21c3fd9f
commit
4e1dac32a5
4 changed files with 14 additions and 11 deletions
|
|
@ -39,7 +39,15 @@ pub(crate) async fn run(services: Arc<Services>) -> Result<()> {
|
||||||
.runtime()
|
.runtime()
|
||||||
.spawn(serve::serve(services.clone(), handle.clone(), tx.subscribe()));
|
.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");
|
debug!("Running");
|
||||||
let res = tokio::select! {
|
let res = tokio::select! {
|
||||||
res = &mut listener => res.map_err(Error::from).unwrap_or_else(Err),
|
res = &mut listener => res.map_err(Error::from).unwrap_or_else(Err),
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ pub(super) async fn console_auto_stop(&self) {
|
||||||
|
|
||||||
/// Execute admin commands after startup
|
/// Execute admin commands after startup
|
||||||
#[implement(super::Service)]
|
#[implement(super::Service)]
|
||||||
pub(crate) async fn startup_execute(&self) -> Result {
|
pub async fn startup_execute(&self) -> Result {
|
||||||
// List of commands to execute
|
// List of commands to execute
|
||||||
let commands = &self.services.server.config.admin_execute;
|
let commands = &self.services.server.config.admin_execute;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ use std::{
|
||||||
|
|
||||||
use askama::Template;
|
use askama::Template;
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use conduwuit::{Result, utils::ReadyExt};
|
use conduwuit::{Result, info, utils::ReadyExt};
|
||||||
use futures::StreamExt;
|
use futures::StreamExt;
|
||||||
use ruma::{UserId, events::room::message::RoomMessageEventContent};
|
use ruma::{UserId, events::room::message::RoomMessageEventContent};
|
||||||
|
|
||||||
|
|
@ -146,6 +146,8 @@ impl Service {
|
||||||
.send_loud_message(RoomMessageEventContent::text_markdown(welcome_message))
|
.send_loud_message(RoomMessageEventContent::text_markdown(welcome_message))
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
|
info!("{user} has been invited to the admin room as the first user.");
|
||||||
|
|
||||||
Ok(true)
|
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;
|
use yansi::Paint;
|
||||||
// This function is specially called by the core after all other
|
// This function is specially called by the core after all other
|
||||||
// services have started. It runs last to ensure that the banner it
|
// services have started. It runs last to ensure that the banner it
|
||||||
|
|
|
||||||
|
|
@ -149,13 +149,6 @@ impl Services {
|
||||||
|
|
||||||
debug_info!("Services startup complete.");
|
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))
|
Ok(Arc::clone(self))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue