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.69 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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)
                                .service(service::remove_page),
    
    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