From 5ff106e910544788bc916626ae7665cb26e5af30 Mon Sep 17 00:00:00 2001 From: Owen Jacobson Date: Fri, 11 Oct 2024 20:55:36 -0400 Subject: Provide a separate "initial setup" endpoint that creates a user. --- src/cli.rs | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) (limited to 'src/cli.rs') diff --git a/src/cli.rs b/src/cli.rs index 1c0d007..5ee9566 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -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 { +fn routers(app: &App) -> Router { [ - 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) -- cgit v1.2.3