deaddrop-app 2.6.0

DeadDrop CLI, daemon, relay, simulator, and examples
Documentation
use clap::Parser;
use deaddrop_core::config::Config;
use deaddrop_core::store::Store;
use deaddrop_net::Node;
use std::net::SocketAddr;
use std::path::PathBuf;

#[derive(Parser)]
struct Args {
    #[arg(long)]
    data_dir: PathBuf,
    #[arg(long, default_value = "0.0.0.0:7947")]
    listen: SocketAddr,
    #[arg(long = "peer")]
    peers: Vec<SocketAddr>,
}

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    tracing_subscriber::fmt().init();
    let args = Args::parse();
    std::fs::create_dir_all(&args.data_dir)?;
    let node = match Node::open(&args.data_dir, Config::default()) {
        Ok(n) => n,
        Err(_) => {
            Store::open(&args.data_dir, Default::default())?
                .init_identity(false)
                .ok();
            Node::open(&args.data_dir, Config::default())?
        }
    };
    println!(
        "dd-relay (carrier only) {} — no plaintext access",
        node.identity.peer_id.short()
    );
    node.serve(args.listen, args.peers).await?;
    Ok(())
}