Pour tout problème contactez-nous par mail : support@froggit.fr | La FAQ :grey_question: | Rejoignez-nous sur le Chat :speech_balloon:

Skip to content
Snippets Groups Projects
main.rs 2.14 KiB
mod app;
mod middleware;
mod service;
mod static_files;
mod testing;
mod tls_config;
mod website;
use actix_files::Files;
use actix_web::{web, App, HttpServer};
use actix_web_lab::middleware::RedirectHttps;
use app::AppState;
use middleware::AuthService;
use static_files::StaticFilesManager;
use tls_config::tls_config;
use website::WebSiteBuilder;

#[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 = WebSiteBuilder::load(&app_state.config)
        .with_static_files_manager(StaticFilesManager::new(&app_state).unwrap().build())
        .build();

    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_dir = website.static_files_manager.dir.clone();
    let mut_app_state = std::sync::Mutex::new(app_state);
    let app_state = web::Data::new(mut_app_state);
    let mut_website = web::Data::new(std::sync::Mutex::new(website));

    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(web::Data::clone(&app_state))
            .app_data(web::Data::clone(&mut_website))
            .service(Files::new("/static/", &static_dir))
            .service(
                web::scope("/admin")
                    .service(service::admin_login)
                    .service(service::admin_authenticate)
                    .service(
                        web::scope("/auth")
                            .wrap(AuthService {})
                            .service(service::admin_workspace),
                    ),
            )
            .service(service::files::favicon)
            .service(service::page)
    })
    .bind(format!("{}:{}", host, port))?
    .bind_rustls(format!("{}:{}", host, port_tls), srv_conf)?
    .run()
    .await
}