Move Router to main, Setup AppState

This commit is contained in:
Samuel Lorch 2023-10-25 18:42:07 +02:00
parent eaf9f2d3b1
commit 93c5eca7cd
6 changed files with 44 additions and 28 deletions

View file

@ -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();

8
src/state.rs Normal file
View file

@ -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,
}

View file

@ -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<String, Session>,
pub struct SessionState {
pub sessions: Arc<RwLock<HashMap<String, Session>>>,
}
#[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<super::super::AppState> {
Router::new()
.route("/session", post(session_handler))
.route("/login", post(login_handler))

View file

@ -1,3 +1,2 @@
pub mod auth;
pub mod router;
pub mod rpc;

View file

@ -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)
}

View file

@ -1,5 +1,5 @@
use axum::Router;
pub fn routes() -> Router {
pub fn routes() -> Router<super::super::AppState> {
Router::new()
}