mirror of
https://github.com/speatzle/nfsense.git
synced 2025-05-12 19:28:20 +00:00
81 lines
2.1 KiB
Rust
81 lines
2.1 KiB
Rust
// #![allow(dead_code)]
|
|
|
|
use std::{
|
|
collections::HashMap,
|
|
sync::{Arc, RwLock},
|
|
};
|
|
|
|
use crate::state::RpcState;
|
|
use axum::{middleware, Router};
|
|
use config_manager::ConfigManager;
|
|
use state::AppState;
|
|
use std::env;
|
|
use std::fs;
|
|
use tower_cookies::CookieManagerLayer;
|
|
use tracing::info;
|
|
use tracing_subscriber;
|
|
use web::auth::SessionState;
|
|
|
|
#[macro_use]
|
|
extern crate lazy_static;
|
|
|
|
mod api;
|
|
mod apply;
|
|
mod config_manager;
|
|
mod definitions;
|
|
mod state;
|
|
mod templates;
|
|
mod web;
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
tracing_subscriber::fmt::init();
|
|
info!("Starting...");
|
|
|
|
let args: Vec<String> = env::args().collect();
|
|
|
|
if args.len() > 1 && args[1] == "generate-default" {
|
|
info!("Generating default config...");
|
|
config_manager::generate_default_config(config_manager::CURRENT_CONFIG_PATH).unwrap();
|
|
fs::copy(
|
|
config_manager::CURRENT_CONFIG_PATH,
|
|
config_manager::PENDING_CONFIG_PATH,
|
|
)
|
|
.unwrap();
|
|
info!("Done! Exiting...");
|
|
return;
|
|
}
|
|
|
|
// TODO Check Config Manager Setup Error
|
|
let config_manager = ConfigManager::new().unwrap();
|
|
let session_state = SessionState {
|
|
sessions: Arc::new(RwLock::new(HashMap::new())),
|
|
};
|
|
|
|
let app_state = AppState {
|
|
config_manager: config_manager.clone(),
|
|
session_state: session_state.clone(),
|
|
rpc_module: api::new_rpc_module(RpcState {
|
|
config_manager,
|
|
session_state,
|
|
}),
|
|
};
|
|
|
|
// Note: The Router Works Bottom Up, So the auth middleware will only applies to everything above it.
|
|
let main_router = Router::new()
|
|
.merge(web::rpc::routes())
|
|
.layer(middleware::from_fn_with_state(
|
|
app_state.clone(),
|
|
web::auth::mw_auth,
|
|
))
|
|
.merge(web::auth::routes())
|
|
.with_state(app_state)
|
|
.layer(CookieManagerLayer::new());
|
|
// .fallback_service(service)
|
|
|
|
info!("Server started successfully");
|
|
axum::Server::bind(&"[::]:8080".parse().unwrap())
|
|
.serve(main_router.into_make_service())
|
|
.await
|
|
.unwrap();
|
|
}
|