minauthator/lib/http_server/src/lib.rs

68 lines
1.5 KiB
Rust
Raw Normal View History

pub mod controllers;
pub mod router;
pub mod services;
pub mod middlewares;
pub mod renderer;
pub mod token_claims;
2024-10-15 10:10:46 +00:00
use fully_pub::fully_pub;
2024-11-02 16:37:57 +00:00
use anyhow::{Result, Context};
use kernel::{context::AppSecrets, models::config::Config, repositories::storage::Storage};
2024-10-15 10:10:46 +00:00
use log::info;
use minijinja::Environment;
2024-10-10 16:20:06 +00:00
use crate::{
router::build_router,
renderer::build_templating_env
};
2024-10-10 16:20:06 +00:00
pub const WEB_GUI_JWT_COOKIE_NAME: &str = "minauthator_jwt";
2024-10-10 16:20:06 +00:00
2024-10-15 10:10:46 +00:00
#[derive(Debug)]
#[fully_pub]
/// HTTP server arguments
pub struct ServerConfig {
listen_host: String,
listen_port: u32,
assets_path: String
}
#[derive(Debug, Clone)]
#[fully_pub]
pub struct AppState {
2024-10-20 22:05:20 +00:00
secrets: AppSecrets,
2024-10-15 10:10:46 +00:00
config: Config,
db: Storage,
2024-10-15 10:10:46 +00:00
templating_env: Environment<'static>
}
2024-10-20 22:05:20 +00:00
pub async fn start_http_server(
server_config: ServerConfig,
config: Config,
secrets: AppSecrets,
db_pool: Storage
2024-10-20 22:05:20 +00:00
) -> Result<()> {
2024-10-15 10:10:46 +00:00
// build state
let state = AppState {
templating_env: build_templating_env(&config),
config,
2024-10-20 22:05:20 +00:00
secrets,
2024-10-15 10:10:46 +00:00
db: db_pool
};
// build routes
2024-10-20 22:05:20 +00:00
let services = build_router(
&server_config,
state.clone()
)
2024-10-15 10:10:46 +00:00
.with_state(state);
let listen_addr = format!("{}:{}", server_config.listen_host, server_config.listen_port);
info!("Starting web server on http://{}", &listen_addr);
let listener = tokio::net::TcpListener::bind(listen_addr).await.unwrap();
axum::serve(listener, services).await.context("Axum serve")?;
Ok(())
}