use std::env; use async_std::task; use async_std::fs::create_dir_all; use sdk_storage::{StorageService, create_app}; use tide::log; // Configuration via variables d'environnement avec valeurs par défaut const DEFAULT_STORAGE_DIR: &str = "./storage"; const DEFAULT_PORT: u16 = 8080; const DEFAULT_TTL: u64 = 86400; #[async_std::main] async fn main() -> tide::Result<()> { // Initialize logging env_logger::init(); log::info!("Starting server"); // Configuration via variables d'environnement let storage_dir = std::env::var("STORAGE_DIR").unwrap_or_else(|_| DEFAULT_STORAGE_DIR.to_string()); let port = std::env::var("PORT") .ok() .and_then(|p| p.parse::().ok()) .unwrap_or(DEFAULT_PORT); // Parse command line arguments let args: Vec = env::args().collect(); let no_ttl_permanent = args.iter().any(|arg| arg == "--permanent"); if no_ttl_permanent { println!("No-TTL requests will be treated as permanent"); } else { println!("No-TTL requests will use default TTL of {} seconds", DEFAULT_TTL); } let svc = StorageService::new(&storage_dir); create_dir_all(&storage_dir).await.expect("Failed to create storage directory."); // background cleanup loop let svc_clone = svc.clone(); task::spawn(async move { loop { if let Err(e) = svc_clone.cleanup_expired_files_once().await { eprintln!("cleanup error: {}", e); } task::sleep(std::time::Duration::from_secs(60)).await; } }); let mut app = create_app(no_ttl_permanent, &storage_dir); app.listen(format!("0.0.0.0:{}", port)).await?; println!("Server running at http://0.0.0.0:{}", port); Ok(()) }