diff options
| author | salmonik <salmonik@tuta.io> | 2026-10-28 22:55:51 +0100 |
|---|---|---|
| committer | salmonik <salmonik@tuta.io> | 2026-10-28 22:55:51 +0100 |
| commit | 87440d5a23f0fd894d949295a7c1ff85043550fc (patch) | |
| tree | 53b2bada6872b6e565bb79982213616a50419b1c /src/bin/server/args.rs | |
| parent | v0.3.1: clean up dependencies, stale tests and document verification (diff) | |
| download | zagan-bet-87440d5a23f0fd894d949295a7c1ff85043550fc.tar.gz zagan-bet-87440d5a23f0fd894d949295a7c1ff85043550fc.zip | |
v0.4.0: add first-time TLS setup and server help
Diffstat (limited to '')
| -rw-r--r-- | src/bin/server/args.rs | 85 |
1 files changed, 62 insertions, 23 deletions
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 { | |||
| 2 | pub ip: String, | 2 | pub ip: String, |
| 3 | pub port: u16, | 3 | pub port: u16, |
| 4 | pub unsafe_mode: bool, | 4 | pub unsafe_mode: bool, |
| 5 | pub init: bool, | ||
| 5 | } | 6 | } |
| 6 | 7 | ||
| 7 | pub fn parse_args() -> Args { | 8 | pub fn parse_args() -> Args { |
| @@ -9,42 +10,80 @@ pub fn parse_args() -> Args { | |||
| 9 | let mut ip = "127.0.0.1".to_string(); | 10 | let mut ip = "127.0.0.1".to_string(); |
| 10 | let mut port = 11525; | 11 | let mut port = 11525; |
| 11 | let mut unsafe_mode = false; | 12 | let mut unsafe_mode = false; |
| 13 | let mut init = false; | ||
| 12 | let mut i = 1; | 14 | let mut i = 1; |
| 15 | |||
| 13 | while i < args.len() { | 16 | while i < args.len() { |
| 14 | if args[i] == "-p" { | 17 | match args[i].as_str() { |
| 15 | if i + 1 < args.len() { | 18 | "-p" => { |
| 16 | port = args[i + 1].parse::<u16>().unwrap_or_else(|_| { | 19 | if i + 1 < args.len() { |
| 17 | eprintln!("Invalid port number: {}", args[i + 1]); | 20 | port = args[i + 1].parse::<u16>().unwrap_or_else(|_| { |
| 21 | eprintln!("Invalid port number: {}", args[i + 1]); | ||
| 22 | std::process::exit(1); | ||
| 23 | }); | ||
| 24 | i += 2; | ||
| 25 | } else { | ||
| 26 | eprintln!("-p requires a port number"); | ||
| 18 | std::process::exit(1); | 27 | std::process::exit(1); |
| 19 | }); | 28 | } |
| 20 | i += 2; | ||
| 21 | } else { | ||
| 22 | eprintln!("-p requires a port number"); | ||
| 23 | std::process::exit(1); | ||
| 24 | } | 29 | } |
| 25 | } else if args[i] == "-i" { | 30 | "-i" => { |
| 26 | if i + 1 < args.len() { | 31 | if i + 1 < args.len() { |
| 27 | ip = args[i + 1].clone(); | 32 | ip = args[i + 1].clone(); |
| 28 | if ip != "127.0.0.1" && ip != "0.0.0.0" { | 33 | if ip != "127.0.0.1" && ip != "0.0.0.0" { |
| 29 | eprintln!("Invalid IP address: {}. Must be 127.0.0.1 or 0.0.0.0", ip); | 34 | eprintln!( |
| 35 | "Invalid IP address: {}. Must be 127.0.0.1 or 0.0.0.0", | ||
| 36 | ip | ||
| 37 | ); | ||
| 38 | std::process::exit(1); | ||
| 39 | } | ||
| 40 | i += 2; | ||
| 41 | } else { | ||
| 42 | eprintln!("-i requires an IP address"); | ||
| 30 | std::process::exit(1); | 43 | std::process::exit(1); |
| 31 | } | 44 | } |
| 32 | i += 2; | 45 | } |
| 33 | } else { | 46 | "--unsafe" => { |
| 34 | eprintln!("-i requires an IP address"); | 47 | unsafe_mode = true; |
| 48 | i += 1; | ||
| 49 | } | ||
| 50 | "--init" => { | ||
| 51 | init = true; | ||
| 52 | i += 1; | ||
| 53 | } | ||
| 54 | "-h" | "--help" => { | ||
| 55 | print_usage(); | ||
| 56 | std::process::exit(0); | ||
| 57 | } | ||
| 58 | other => { | ||
| 59 | eprintln!("Unknown argument: {other}"); | ||
| 60 | print_usage(); | ||
| 35 | std::process::exit(1); | 61 | std::process::exit(1); |
| 36 | } | 62 | } |
| 37 | } else if args[i] == "--unsafe" { | ||
| 38 | unsafe_mode = true; | ||
| 39 | i += 1; | ||
| 40 | } else { | ||
| 41 | eprintln!("Unknown argument: {}", args[i]); | ||
| 42 | std::process::exit(1); | ||
| 43 | } | 63 | } |
| 44 | } | 64 | } |
| 65 | |||
| 45 | Args { | 66 | Args { |
| 46 | ip, | 67 | ip, |
| 47 | port, | 68 | port, |
| 48 | unsafe_mode, | 69 | unsafe_mode, |
| 70 | init, | ||
| 49 | } | 71 | } |
| 50 | } | 72 | } |
| 73 | |||
| 74 | fn print_usage() { | ||
| 75 | println!( | ||
| 76 | "Usage: server [OPTIONS]\n\ | ||
| 77 | \n\ | ||
| 78 | Options:\n\ | ||
| 79 | \x20 -i <ip> Bind address (127.0.0.1 or 0.0.0.0)\n\ | ||
| 80 | \x20 -p <port> Bind port (default 11525)\n\ | ||
| 81 | \x20 --init Generate identity.p12, key.pem and cert.pem, then exit\n\ | ||
| 82 | \x20 --unsafe Run in unsafe mode (warning only)\n\ | ||
| 83 | \x20 -h, --help Show this help\n\ | ||
| 84 | \n\ | ||
| 85 | First run:\n\ | ||
| 86 | \x20 cargo run --bin server -- --init\n\ | ||
| 87 | \x20 cargo run --bin server" | ||
| 88 | ); | ||
| 89 | } | ||
