diff options
Diffstat (limited to 'src/cli.rs')
| -rw-r--r-- | src/cli.rs | 32 |
1 files changed, 23 insertions, 9 deletions
@@ -15,7 +15,12 @@ use clap::{CommandFactory, Parser}; use sqlx::sqlite::SqlitePool; use tokio::net; -use crate::{app::App, boot, channel, clock, db, event, expire, login, message, ui}; +use crate::{ + app::App, + boot, channel, clock, db, event, expire, login, message, + setup::{self, middleware::setup_required}, + ui, +}; /// Command-line entry point for running the `hi` server. /// @@ -81,7 +86,7 @@ impl Args { let pool = self.pool().await?; let app = App::from(pool); - let app = routers() + let app = routers(&app) .route_layer(middleware::from_fn_with_state( app.clone(), expire::middleware, @@ -126,14 +131,23 @@ impl Args { } } -fn routers() -> Router<App> { +fn routers(app: &App) -> Router<App> { [ - boot::router(), - channel::router(), - event::router(), - login::router(), - message::router(), - ui::router(), + [ + // API endpoints that require setup to function + boot::router(), + channel::router(), + event::router(), + login::router(), + message::router(), + ] + .into_iter() + .fold(Router::default(), Router::merge) + .route_layer(middleware::from_fn_with_state(app.clone(), setup_required)), + // API endpoints that handle setup + setup::router(), + // The UI (handles setup state itself) + ui::router(app), ] .into_iter() .fold(Router::default(), Router::merge) |
