mod auth; mod config; mod handlers; mod storage; use std::sync::Arc; use axum::{ routing::{delete, get, post}, Router, }; pub struct AppState { pub config: config::Config, pub http_client: reqwest::Client, } #[tokio::main] async fn main() { tracing_subscriber::fmt() .with_env_filter(tracing_subscriber::EnvFilter::from_default_env()) .init(); let config = config::Config::from_env(); let port = config.port; let state = Arc::new(AppState { config, http_client: reqwest::Client::new(), }); let app = Router::new() .route("/admin/files", get(handlers::list_all_files_meta)) .route("/admin/files/get", post(handlers::download_files)) .route("/admin/files", delete(handlers::delete_files)) .route("/files", post(handlers::upload_file)) .with_state(state); let addr = format!("0.0.0.0:{port}"); let listener = tokio::net::TcpListener::bind(&addr).await.unwrap(); tracing::info!("Listening on {addr}"); axum::serve(listener, app).await.unwrap(); }