cebolla 0.3.0

A convenience layer over Arti for building and connecting to Tor hidden services
Documentation
use cebolla::*;

use poem::{EndpointExt, Route, Server, get, handler, middleware::Tracing, web::Path};
use snafu::{ResultExt, Whatever};

#[handler]
fn hello(Path(name): Path<String>) -> String {
    format!("hello: {name}")
}

#[tokio::main]
async fn main() -> Result<(), Whatever> {
    println!("Connecting to tor network");
    let tor = Tor::new(TorConfig::default())
        .await
        .whatever_context("unable to connect to tor network")?;
    println!("Connected!");
    let service = tor
        .service("hello")
        .whatever_context("unable to create service")?;

    println!(
        "Onion address: {}",
        service.onion_address().unwrap().display_unredacted()
    );

    let app = Route::new().at("/hello/:name", get(hello)).with(Tracing);
    Server::new(service)
        .name("hello-world")
        .run(app)
        .await
        .expect("server error");
    Ok(())
}