summaryrefslogtreecommitdiff
path: root/src/cli.rs
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2024-10-11 20:55:36 -0400
committerOwen Jacobson <owen@grimoire.ca>2024-10-11 20:55:36 -0400
commit5ff106e910544788bc916626ae7665cb26e5af30 (patch)
treef03f98677293a9d892e2d21d1a9a80aeedab60a3 /src/cli.rs
parentd33c8af14c4adc1c15ab048299e06f9f35ae4de6 (diff)
Provide a separate "initial setup" endpoint that creates a user.
Diffstat (limited to 'src/cli.rs')
-rw-r--r--src/cli.rs32
1 files changed, 23 insertions, 9 deletions
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<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)