From e6d3eeb7c055a2941600f048697298b0e77b2e2c Mon Sep 17 00:00:00 2001 From: Daniel Hader Date: Sat, 30 May 2026 18:28:16 -0500 Subject: admin account registration as part of server init --- src/main.rs | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 36ef319..b1979b1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ use std::env; mod database; mod routes; +mod utils; use axum::{ routing::{get, post}, @@ -13,7 +14,7 @@ use routes::user::{create_user, me}; use routes::auth::{login, logout}; use tower_http::services::ServeDir; -use crate::database::Database; +use crate::{database::Database, utils::register_admin}; #[derive(Clone)] struct AppState { @@ -24,13 +25,31 @@ struct AppState { #[tokio::main] async fn main() { + let database = Database::new_in_memory().unwrap(); + database.initialize().unwrap(); + + // TODO: generically load environment variables, this is tedious let Ok(secret) = env::var("JWT_SECRET") else { eprintln!("missing environment variable JWT_SECRET"); return; }; - - let database = Database::new_in_memory().unwrap(); - database.initialize().unwrap(); + let Ok(admin_email) = env::var("ADMIN_EMAIL") else { + eprintln!("missing environment variable ADMIN_EMAIL"); + return; + }; + let Ok(admin_username) = env::var("ADMIN_USERNAME") else { + eprintln!("missing environment variable ADMIN_USERNAME"); + return; + }; + let Ok(admin_password) = env::var("ADMIN_PASSWORD") else { + eprintln!("missing environment variable ADMIN_PASSWORD"); + return; + }; + + let Ok(()) = register_admin(&database, &admin_email, &admin_username, &admin_password) else { + eprintln!("failed to register admin user"); + return; + }; let state = AppState { secret: secret, -- cgit v1.2.3