bjorn-acme 0.3.0

Building blocks for an ACME server
Documentation
#[macro_use]
extern crate log;
#[macro_use]
extern crate serde;

use std::net::ToSocketAddrs;

#[derive(Deserialize)]
struct ValidatorConfig {
    caa_identities: Vec<String>,
    tor_storage: Option<std::path::PathBuf>
}

fn main() {
    pretty_env_logger::init();

    let fig = rocket::config::Config::figment();
    let config = fig.extract::<rocket::config::Config>().expect("Unable to load config");

    let rt = tokio::runtime::Runtime::new().expect("failed to obtain a new Runtime object");

    let conf = fig.extract::<ValidatorConfig>().expect("Unable to load validator config");
    let serve_addr = (config.address, config.port).to_socket_addrs()
        .expect("Invalid listen address").next().unwrap();

    let validator = rt.block_on(match conf.tor_storage {
        Some(s) => {
            let s =  rt.block_on(torrosion::storage::FileStorage::new(s)).expect("Unable to initialize Tor storage");
            bjorn::validator::Validator::new(conf.caa_identities, Some(s))
        },
        None => bjorn::validator::Validator::new(conf.caa_identities, None)
    });

    let server_future = tonic::transport::Server::builder()
                        .add_service(bjorn::cert_order::validator_server::ValidatorServer::new(validator))
                        .serve(serve_addr);
    info!("Listening for requests on {}", serve_addr);
    rt.block_on(server_future).expect("failed to successfully run the future on Runtime");
}