diff --git a/src/main.rs b/src/main.rs index 0ae1674..8731df7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,10 +1,21 @@ #![allow(dead_code)] +use std::{ + collections::HashMap, + sync::{Arc, RwLock}, +}; + +use axum::{middleware, Router}; +use config_manager::ConfigManager; +use state::AppState; +use tower_cookies::CookieManagerLayer; use tracing::info; use tracing_subscriber; +use web::auth::SessionState; mod config_manager; mod definitions; +mod state; mod web; #[tokio::main] @@ -12,13 +23,29 @@ async fn main() { tracing_subscriber::fmt::init(); info!("Starting..."); - // let mut config_manager = config_manager::new_config_manager().unwrap(); + // TODO Check Config Manager Setup Error + let config_manager = ConfigManager::new().unwrap(); - let main_router = web::router::get_router(); + let session_state = SessionState { + sessions: Arc::new(RwLock::new(HashMap::new())), + }; + + let app_state = AppState { + config_manager, + session_state, + }; + + let main_router = Router::new() + .merge(web::auth::routes()) + .merge(web::rpc::routes()) + .with_state(app_state) + .layer(middleware::from_fn_with_state((), web::auth::mw_auth)) + .layer(CookieManagerLayer::new()); + // .fallback_service(service) info!("Server started successfully"); axum::Server::bind(&"[::]:8080".parse().unwrap()) - .serve(main_router.await.into_make_service()) + .serve(main_router.into_make_service()) .await .unwrap(); diff --git a/src/state.rs b/src/state.rs new file mode 100644 index 0000000..26f5551 --- /dev/null +++ b/src/state.rs @@ -0,0 +1,8 @@ +use super::config_manager::ConfigManager; +use super::web::auth::SessionState; + +#[derive(Clone)] +pub struct AppState { + pub config_manager: ConfigManager, + pub session_state: SessionState, +} diff --git a/src/web/auth.rs b/src/web/auth.rs index 9c851d0..0915bed 100644 --- a/src/web/auth.rs +++ b/src/web/auth.rs @@ -1,5 +1,6 @@ use std::collections::HashMap; use std::hash::Hash; +use std::sync::{Arc, RwLock}; use axum::routing::post; use axum::{Json, Router}; @@ -16,12 +17,12 @@ use axum::{ const SESSION_COOKIE: &str = "session"; #[derive(Clone, Debug)] -struct SessionState { - sessions: HashMap, +pub struct SessionState { + pub sessions: Arc>>, } #[derive(Clone, Debug)] -struct Session { +pub struct Session { username: String, //expires: time, } @@ -32,11 +33,7 @@ struct LoginParameters { password: String, } -pub fn routes() -> Router { - let state = SessionState { - sessions: HashMap::new(), - }; - +pub fn routes() -> Router { Router::new() .route("/session", post(session_handler)) .route("/login", post(login_handler)) diff --git a/src/web/mod.rs b/src/web/mod.rs index cf24610..6a60678 100644 --- a/src/web/mod.rs +++ b/src/web/mod.rs @@ -1,3 +1,2 @@ pub mod auth; -pub mod router; pub mod rpc; diff --git a/src/web/router.rs b/src/web/router.rs deleted file mode 100644 index 171556e..0000000 --- a/src/web/router.rs +++ /dev/null @@ -1,15 +0,0 @@ -use axum::{middleware, Router}; - -use tower_cookies::CookieManagerLayer; - -#[derive(Clone)] -struct tmp {} - -pub async fn get_router() -> Router { - Router::new() - .merge(super::auth::routes()) - .nest("/api", super::rpc::routes()) - .layer(middleware::from_fn_with_state(tmp {}, super::auth::mw_auth)) - .layer(CookieManagerLayer::new()) - // .fallback_service(service) -} diff --git a/src/web/rpc.rs b/src/web/rpc.rs index 77e3e45..5340a97 100644 --- a/src/web/rpc.rs +++ b/src/web/rpc.rs @@ -1,5 +1,5 @@ use axum::Router; -pub fn routes() -> Router { +pub fn routes() -> Router { Router::new() }