use actix_identity::config::LogoutBehaviour; use actix_identity::IdentityMiddleware; use actix_remote_ip::RemoteIPConfig; use actix_session::storage::CookieSessionStore; use actix_session::SessionMiddleware; use actix_web::cookie::{Key, SameSite}; use actix_web::middleware::Logger; use actix_web::{web, App, HttpServer}; use std::time::Duration; use virtweb_backend::app_config::AppConfig; use virtweb_backend::constants::{ MAX_INACTIVITY_DURATION, MAX_SESSION_DURATION, SESSION_COOKIE_NAME, }; use virtweb_backend::controllers::{auth_controller, server_controller}; #[actix_web::main] async fn main() -> std::io::Result<()> { env_logger::init_from_env(env_logger::Env::new().default_filter_or("info")); log::info!("Start to listen on {}", AppConfig::get().listen_address); HttpServer::new(|| { let session_mw = SessionMiddleware::builder( CookieSessionStore::default(), Key::from(AppConfig::get().secret().as_bytes()), ) .cookie_name(SESSION_COOKIE_NAME.to_string()) .cookie_secure(AppConfig::get().cookie_secure) .cookie_same_site(SameSite::Strict) .build(); let identity_middleware = IdentityMiddleware::builder() .logout_behaviour(LogoutBehaviour::PurgeSession) .visit_deadline(Some(Duration::from_secs(MAX_INACTIVITY_DURATION))) .login_deadline(Some(Duration::from_secs(MAX_SESSION_DURATION))) .build(); App::new() .wrap(Logger::default()) .wrap(identity_middleware) .wrap(session_mw) .app_data(web::Data::new(RemoteIPConfig { proxy: AppConfig::get().proxy_ip.clone(), })) // Server controller .route("/", web::get().to(server_controller::root_index)) .route( "/api/server/static_config", web::get().to(server_controller::static_config), ) // Auth controller .route( "/api/auth/local", web::post().to(auth_controller::local_auth), ) }) .bind(&AppConfig::get().listen_address)? .run() .await }