mod app_state; mod service; mod static_files; mod testing; mod tls_config; mod website; use actix_web::{App, HttpServer}; use actix_web_lab::middleware::RedirectHttps; use app_state::AppState; use static_files::StaticFilesManager; use tls_config::tls_config; use website::WebSite; #[actix_web::main] async fn main() -> std::io::Result<()> { let app_state = AppState::new(); env_logger::Builder::from_env( env_logger::Env::default().default_filter_or(&app_state.config.get_log_level()), ) .init(); let website = WebSite::load(&app_state.config); let mut static_files_manager = StaticFilesManager::new(&app_state).unwrap(); static_files_manager.build_index(); let host = app_state.config.host.clone(); let port = app_state.config.port; let port_tls = app_state.config.port_tls; let srv_conf = tls_config(&app_state.config); let static_files_manager = actix_web::web::Data::new(std::sync::Mutex::new(static_files_manager)); let app_state = actix_web::web::Data::new(std::sync::Mutex::new(app_state)); HttpServer::new(move || { App::new() .wrap(actix_web::middleware::Logger::default()) .wrap(actix_web::middleware::Compress::default()) .wrap(RedirectHttps::default().to_port(port_tls)) .app_data(actix_web::web::Data::clone(&app_state)) .app_data(actix_web::web::Data::clone(&static_files_manager)) .app_data(actix_web::web::Data::new(website.clone())) .service(service::page) }) .bind(format!("{}:{}", host, port))? .bind_rustls(format!("{}:{}", host, port_tls), srv_conf)? .run() .await }