From 6961ed59b49fd5a08f824e0937ba028bf509a89a Mon Sep 17 00:00:00 2001 From: Gunwant Jain Date: Tue, 18 Jan 2022 15:47:54 +0530 Subject: [PATCH] main: Add arguments and the respective parsing Signed-off-by: Gunwant Jain --- Cargo.lock | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 1 + src/main.rs | 36 +++++++++++++++++++++ 3 files changed, 128 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 621f49f..f28db5d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -100,6 +100,7 @@ checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" name = "bin" version = "0.1.0" dependencies = [ + "clap", "rand", "rocket", "rocket_dyn_templates", @@ -244,6 +245,36 @@ dependencies = [ "phf_codegen", ] +[[package]] +name = "clap" +version = "3.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c506244a13c87262f84bf16369740d0b7c3850901b6a642aa41b031a710c473" +dependencies = [ + "atty", + "bitflags", + "clap_derive", + "indexmap", + "lazy_static", + "os_str_bytes", + "strsim", + "termcolor", + "textwrap", +] + +[[package]] +name = "clap_derive" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "517358c28fcef6607bf6f76108e02afad7e82297d132a6b846dcc1fc3efcd153" +dependencies = [ + "heck", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "cloudabi" version = "0.0.3" @@ -663,6 +694,12 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +[[package]] +name = "heck" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" + [[package]] name = "hermit-abi" version = "0.1.19" @@ -1162,6 +1199,15 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +[[package]] +name = "os_str_bytes" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" +dependencies = [ + "memchr 2.4.1", +] + [[package]] name = "parking_lot" version = "0.10.2" @@ -1379,6 +1425,30 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + [[package]] name = "proc-macro-hack" version = "0.5.19" @@ -1928,6 +1998,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "syn" version = "1.0.85" @@ -1997,6 +2073,21 @@ dependencies = [ "unic-segment", ] +[[package]] +name = "termcolor" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "textwrap" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80" + [[package]] name = "thread_local" version = "1.1.3" diff --git a/Cargo.toml b/Cargo.toml index 3475c84..b204210 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,7 @@ rocket = "0.5.0-rc.1" tree_magic = "0.2.3" syntect = "4.6.0" rust-embed="6.3.0" +clap = { version = "3.0.9", features = ["derive"] } [dependencies.rocket_dyn_templates] version = "0.1.0-rc.1" diff --git a/src/main.rs b/src/main.rs index 7d644eb..4bec51a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,14 +1,50 @@ #[macro_use] extern crate rocket; +use std::{fs, net::IpAddr, path::PathBuf}; + +use clap::Parser; use rocket::shield::{NoSniff, Shield}; use rocket_dyn_templates::Template; mod models; mod routes; +/// A minimal, opinionated pastebin +#[derive(Parser, Debug)] +#[clap(author, version, about, long_about=None)] +pub struct Args { + /// Path to the uploads folder + #[clap(short, long, default_value = "./upload")] + upload: std::path::PathBuf, + + /// Port on which the webserver runs + #[clap(short, long, default_value_t = 6162)] + port: u16, + + /// Address on which the webserver runs + #[clap(short, long, default_value = "0.0.0.0")] + address: IpAddr, + + /// Binary uploads file size limit (in MiB) + #[clap(short, long, default_value_t = 100)] + binary_upload_limit: i32, +} + +pub fn get_parsed_args() -> Args { + Args::parse() +} + +pub fn get_upload_dir() -> PathBuf { + get_parsed_args().upload +} + #[launch] fn rocket() -> _ { let shield = Shield::default().disable::(); + let args = get_parsed_args(); + + // create the upload directory, if not already created + fs::create_dir_all(args.upload).expect("Could not create the upload directory"); rocket::build() .mount(