From 0d1213a241724dfc628c57a33b2a4d86b9b5cf4d Mon Sep 17 00:00:00 2001 From: neon_arch Date: Mon, 24 Apr 2023 13:12:44 +0300 Subject: [PATCH] Adds temporary fixes for #1 --- Cargo.lock | 128 ++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 1 + src/bin/websurfx.rs | 35 +++++++++++- 3 files changed, 163 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 62c9313..1f49de9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -268,6 +268,55 @@ dependencies = [ "alloc-no-stdlib", ] +[[package]] +name = "anstream" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e579a7752471abc2a8268df8b20005e3eadd975f585398f17efcfd8d4927371" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is-terminal", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d" + +[[package]] +name = "anstyle-parse" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "anstyle-wincon" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bcd8291a340dd8ac70e18878bc4501dd7b4ff970cfa21c207d36ece51ea88fd" +dependencies = [ + "anstyle", + "windows-sys 0.48.0", +] + [[package]] name = "askama_escape" version = "0.10.3" @@ -429,6 +478,48 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "clap" +version = "4.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956ac1f6381d8d82ab4684768f89c0ea3afe66925ceadb4eeb3fc452ffc55d62" +dependencies = [ + "clap_builder", + "clap_derive", + "once_cell", +] + +[[package]] +name = "clap_builder" +version = "4.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84080e799e54cff944f4b4a4b0e71630b0e0443b25b985175c7dddc1a859b749" +dependencies = [ + "anstream", + "anstyle", + "bitflags", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" +dependencies = [ + "heck", + "proc-macro2 1.0.56", + "quote 1.0.26", + "syn 2.0.15", +] + +[[package]] +name = "clap_lex" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" + [[package]] name = "cloudabi" version = "0.0.3" @@ -438,6 +529,12 @@ dependencies = [ "bitflags", ] +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + [[package]] name = "convert_case" version = "0.4.0" @@ -965,6 +1062,12 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + [[package]] name = "hermit-abi" version = "0.2.6" @@ -1228,6 +1331,18 @@ version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" +[[package]] +name = "is-terminal" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" +dependencies = [ + "hermit-abi 0.3.1", + "io-lifetimes", + "rustix", + "windows-sys 0.48.0", +] + [[package]] name = "itoa" version = "0.4.8" @@ -2585,6 +2700,12 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1884d1bc09741d466d9b14e6d37ac89d6909cbcac41dd9ae982d4d063bbedfc" +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "syn" version = "0.15.44" @@ -3044,6 +3165,12 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + [[package]] name = "uuid" version = "0.7.4" @@ -3196,6 +3323,7 @@ version = "0.1.0" dependencies = [ "actix-files", "actix-web", + "clap", "fake-useragent", "handlebars", "reqwest 0.11.16", diff --git a/Cargo.toml b/Cargo.toml index b1f418e..98b283a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,3 +15,4 @@ actix-web = {version="4"} actix-files = {version="0.6.2"} serde_json = {version="*"} fake-useragent = {version="*"} +clap = {version="*", features = ["derive"] } diff --git a/src/bin/websurfx.rs b/src/bin/websurfx.rs index b13aee2..5230994 100644 --- a/src/bin/websurfx.rs +++ b/src/bin/websurfx.rs @@ -1,12 +1,45 @@ +use std::ops::RangeInclusive; + use websurfx::server::routes; use actix_files as fs; use actix_web::{web, App, HttpServer}; +use clap::{command, Parser}; use handlebars::Handlebars; +#[derive(Parser, Debug, Default)] +#[clap(author = "neon_arch", version, about = "Websurfx server application")] +#[command(propagate_version = true)] +struct CliArgs { + #[clap(default_value_t = 8080, short, long,value_parser = is_port_in_range)] + /// provide port number in range [1024-65536] to launch the server on. + port: u16, +} + +const PORT_RANGE: RangeInclusive = 1024..=65535; + +fn is_port_in_range(s: &str) -> Result { + let port: usize = s + .parse() + .map_err(|_| format!("`{s}` is not a valid port number"))?; + if PORT_RANGE.contains(&port) { + Ok(port as u16) + } else { + Err(format!( + "port not found in range {}-{}", + PORT_RANGE.start(), + PORT_RANGE.end() + )) + } +} + // The function that launches the main server and handle routing functionality #[actix_web::main] async fn main() -> std::io::Result<()> { + let args = CliArgs::parse(); + + println!("started server on port {}", args.port); + let mut handlebars: Handlebars = Handlebars::new(); handlebars @@ -29,7 +62,7 @@ async fn main() -> std::io::Result<()> { .default_service(web::route().to(routes::not_found)) // error page }) // Start server on 127.0.0.1:8080 - .bind(("127.0.0.1", 8080))? + .bind(("127.0.0.1", args.port))? .run() .await }