From 87440d5a23f0fd894d949295a7c1ff85043550fc Mon Sep 17 00:00:00 2001 From: salmonik Date: Wed, 28 Oct 2026 22:55:51 +0100 Subject: v0.4.0: add first-time TLS setup and server help --- src/bin/server/args.rs | 85 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 62 insertions(+), 23 deletions(-) (limited to 'src/bin/server/args.rs') diff --git a/src/bin/server/args.rs b/src/bin/server/args.rs index fc844ea..1babd1d 100644 --- a/src/bin/server/args.rs +++ b/src/bin/server/args.rs @@ -2,6 +2,7 @@ pub struct Args { pub ip: String, pub port: u16, pub unsafe_mode: bool, + pub init: bool, } pub fn parse_args() -> Args { @@ -9,42 +10,80 @@ pub fn parse_args() -> Args { let mut ip = "127.0.0.1".to_string(); let mut port = 11525; let mut unsafe_mode = false; + let mut init = false; let mut i = 1; + while i < args.len() { - if args[i] == "-p" { - if i + 1 < args.len() { - port = args[i + 1].parse::().unwrap_or_else(|_| { - eprintln!("Invalid port number: {}", args[i + 1]); + match args[i].as_str() { + "-p" => { + if i + 1 < args.len() { + port = args[i + 1].parse::().unwrap_or_else(|_| { + eprintln!("Invalid port number: {}", args[i + 1]); + std::process::exit(1); + }); + i += 2; + } else { + eprintln!("-p requires a port number"); std::process::exit(1); - }); - i += 2; - } else { - eprintln!("-p requires a port number"); - std::process::exit(1); + } } - } else if args[i] == "-i" { - if i + 1 < args.len() { - ip = args[i + 1].clone(); - if ip != "127.0.0.1" && ip != "0.0.0.0" { - eprintln!("Invalid IP address: {}. Must be 127.0.0.1 or 0.0.0.0", ip); + "-i" => { + if i + 1 < args.len() { + ip = args[i + 1].clone(); + if ip != "127.0.0.1" && ip != "0.0.0.0" { + eprintln!( + "Invalid IP address: {}. Must be 127.0.0.1 or 0.0.0.0", + ip + ); + std::process::exit(1); + } + i += 2; + } else { + eprintln!("-i requires an IP address"); std::process::exit(1); } - i += 2; - } else { - eprintln!("-i requires an IP address"); + } + "--unsafe" => { + unsafe_mode = true; + i += 1; + } + "--init" => { + init = true; + i += 1; + } + "-h" | "--help" => { + print_usage(); + std::process::exit(0); + } + other => { + eprintln!("Unknown argument: {other}"); + print_usage(); std::process::exit(1); } - } else if args[i] == "--unsafe" { - unsafe_mode = true; - i += 1; - } else { - eprintln!("Unknown argument: {}", args[i]); - std::process::exit(1); } } + Args { ip, port, unsafe_mode, + init, } } + +fn print_usage() { + println!( + "Usage: server [OPTIONS]\n\ + \n\ + Options:\n\ + \x20 -i Bind address (127.0.0.1 or 0.0.0.0)\n\ + \x20 -p Bind port (default 11525)\n\ + \x20 --init Generate identity.p12, key.pem and cert.pem, then exit\n\ + \x20 --unsafe Run in unsafe mode (warning only)\n\ + \x20 -h, --help Show this help\n\ + \n\ + First run:\n\ + \x20 cargo run --bin server -- --init\n\ + \x20 cargo run --bin server" + ); +} -- cgit v1.2.3