jwkserve-cli 0.8.0

CLI tool for jwkserve - a fake authentication service for local development
use jwkserve::{key::Key, Router, RouterState};
use poem::{listener::TcpListener, Server};
use std::{env, io::Error};
use tokio::signal;

#[tokio::main]
async fn main() -> Result<(), Error> {
    tracing_subscriber::fmt()
        .with_target(false)
        .with_thread_ids(false)
        .with_thread_names(false)
        .init();

    let host: String = match env::var("APP_HOST") {
        Ok(host) => host,
        Err(_) => "0.0.0.0".to_string(),
    };

    let port: String = match env::var("APP_PORT") {
        Ok(port) => port,
        Err(_) => "3000".to_string(),
    };

    let key: Key = match env::var("KEY_FILE") {
        Ok(key_path) => Key::from_file(&key_path),
        Err(_) => Key::new(),
    };

    let router_state = RouterState { key };

    let router = Router::with_state(router_state);

    Server::new(TcpListener::bind(format!("{host}:{port}")))
        .name("jwkserve".to_string())
        .run_with_graceful_shutdown(
            router.poem,
            async move {
                let _ = signal::ctrl_c().await;
            },
            None,
        )
        .await
}