main: Add arguments and the respective parsing

Signed-off-by: Gunwant Jain <mail@wantguns.dev>
This commit is contained in:
Gunwant Jain 2022-01-18 15:47:54 +05:30
parent f35bad75e5
commit 6961ed59b4
3 changed files with 128 additions and 0 deletions

91
Cargo.lock generated
View File

@ -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"

View File

@ -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"

View File

@ -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::<NoSniff>();
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(