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.75 KiB
Newer Older
peterrabbit's avatar
peterrabbit committed
mod app;
mod cookie;
mod middleware;
mod service;
peterrabbit's avatar
peterrabbit committed
mod static_files;
mod testing;
peterrabbit's avatar
peterrabbit committed
mod tls_config;
peterrabbit's avatar
peterrabbit committed
mod website;
peterrabbit's avatar
peterrabbit committed
use actix_files::Files;
peterrabbit's avatar
peterrabbit committed
use actix_web::{web, App, HttpServer};
use actix_web_lab::middleware::RedirectHttps;
Pierre Jarriges's avatar
Pierre Jarriges committed
use app::{AppArgs, AppState};
use middleware::AuthService;
peterrabbit's avatar
peterrabbit committed
use static_files::StaticFilesManager;
use std::sync::RwLock;
Pierre Jarriges's avatar
Pierre Jarriges committed
use structopt::StructOpt;
peterrabbit's avatar
peterrabbit committed
use tls_config::tls_config;
use website::WebSiteBuilder;
peterrabbit's avatar
peterrabbit committed

peterrabbit's avatar
peterrabbit committed
#[actix_web::main]
async fn main() -> std::io::Result<()> {
Pierre Jarriges's avatar
Pierre Jarriges committed
    let app_state = AppState::builder().use_args(AppArgs::from_args()).build();

    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_assets_index(),
        )
        .build()
        .unwrap();

    website.save(&app_state.config).unwrap();
peterrabbit's avatar
peterrabbit committed
    let host = app_state.config.host.clone();
    let port = app_state.config.port;
    let port_tls = app_state.config.port_tls;
peterrabbit's avatar
peterrabbit committed
    let srv_conf = tls_config(&app_state.config);
    let dir = website.static_files_manager.dir.clone();
peterrabbit's avatar
peterrabbit committed

peterrabbit's avatar
peterrabbit committed
    HttpServer::new(move || {
        App::new()
            .wrap(actix_web::middleware::Logger::default())
peterrabbit's avatar
peterrabbit committed
            .wrap(actix_web::middleware::Compress::default())
            .wrap(RedirectHttps::default().to_port(port_tls))
            .app_data(web::Data::new(RwLock::new(app_state.clone())))
            .app_data(web::Data::new(RwLock::new(website.clone())))
            .service(
                web::scope("/admin")
                    .service(service::admin_login)
                    .service(service::admin_authenticate)
                    .service(
                        web::scope("/auth")
                            .wrap(AuthService {})
Pierre Jarriges's avatar
Pierre Jarriges committed
                            .service(service::admin_workspace)
                            .service(service::add_page)
Pierre Jarriges's avatar
Pierre Jarriges committed
                            .service(service::get_page_data)
Pierre Jarriges's avatar
Pierre Jarriges committed
                            .service(service::update_page)
Pierre Jarriges's avatar
Pierre Jarriges committed
                            .service(service::files::post_files)
Pierre Jarriges's avatar
Pierre Jarriges committed
                            .service(service::files::delete_static_file)
                            .service(service::add_template)
Pierre Jarriges's avatar
Pierre Jarriges committed
                            .service(service::update_template)
Pierre Jarriges's avatar
Pierre Jarriges committed
                            .service(service::remove_page)
                            .service(service::remove_template),
peterrabbit's avatar
peterrabbit committed
            .service(service::files::favicon)
            .service(Files::new("/", &dir).index_file("index.html"))
peterrabbit's avatar
peterrabbit committed
    })
peterrabbit's avatar
peterrabbit committed
    .bind(format!("{}:{}", host, port))?
    .bind_rustls(format!("{}:{}", host, port_tls), srv_conf)?
peterrabbit's avatar
peterrabbit committed
    .run()
    .await