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.19 KiB
Newer Older
  • Learn to ignore specific revisions
  • use actix_web::{get, App, HttpResponse, HttpServer, Responder};
    
    peterrabbit's avatar
    peterrabbit committed
    
    
    #[get("/{pth:.*}")]
    async fn page(pth: actix_web::web::Path<String>) -> impl Responder {
        HttpResponse::Ok().body(format!("Page path {}", pth))
    }
    
    #[get("/admin/dashboard")]
    async fn admin_dashboard() -> impl Responder {
        HttpResponse::Ok().body("Admin")
    }
    
    #[get("/admin/login")]
    async fn admin_login() -> impl Responder {
        HttpResponse::Ok().body("Login")
    
    peterrabbit's avatar
    peterrabbit committed
    }
    
    #[actix_web::main]
    async fn main() -> std::io::Result<()> {
    
        // GET HOST AND CERTS DIR FROM CLI ARGUMENT
        // Get port from arg, or get context from arg and define default port, or set default port to standard
    
        // LOAD A WEBSITE SCHEMA (JSON) FROM CLI ARGUMENT PATH OR CREATE A NEW ONE
        // create pages resources with templates and the contents from the json file
        // Save the resources in an appstate
    
        // create the static dir
        // create the static files index (like Arc<Mutex<Index>>)
    
        // create a Rest service at root with extensive path argument: like #[get(/{pth:.*})]
        // Then parse the website document and return the corresponding template, or 404 template
    
        let host = "localhost";
        let certs_dir = std::path::PathBuf::from("/etc/letsencrypt/live").join(host);
        let cert_file =
            &mut std::io::BufReader::new(std::fs::File::open(certs_dir.join("fullchain.pem")).unwrap());
        let key_file =
            &mut std::io::BufReader::new(std::fs::File::open(certs_dir.join("privkey.pem")).unwrap());
    
        let cert = rustls::Certificate(rustls_pemfile::certs(cert_file).unwrap().remove(0).to_vec());
        let key = rustls::PrivateKey(
            rustls_pemfile::pkcs8_private_keys(key_file)
                .unwrap()
                .remove(0)
                .to_vec(),
        );
    
        let srv_conf = rustls::ServerConfig::builder()
            .with_safe_defaults()
            .with_no_client_auth()
            .with_single_cert(vec![cert], key)
            .expect("bad certificate/key");
    
    
    peterrabbit's avatar
    peterrabbit committed
        HttpServer::new(|| {
    
            App::new()
                .wrap(actix_web::middleware::Logger::default())
                .service(admin_dashboard)
                .service(admin_login)
                .service(page)
    
    peterrabbit's avatar
    peterrabbit committed
        })
    
        .bind("127.0.0.1:8080")?
        .bind_rustls("127.0.0.1:8443", srv_conf)?
    
    peterrabbit's avatar
    peterrabbit committed
        .run()
        .await