From 1c1701040a605271d0ca910a370a36cdd4798e18 Mon Sep 17 00:00:00 2001 From: Paul Z Date: Fri, 20 Oct 2023 00:04:42 +0200 Subject: [PATCH] cli foundations --- Cargo.lock | 193 ++++++++++++++++++++++- Cargo.toml | 34 +--- cli/Cargo.toml | 14 ++ cli/src/main.rs | 57 +++++++ server/Cargo.toml | 28 ++++ {src => server/src}/error.rs | 0 {src => server/src}/garbage_collector.rs | 0 {src => server/src}/item_explanation.md | 0 {src => server/src}/main.rs | 0 {src => server/src}/metadata.rs | 0 {src => server/src}/util.rs | 0 {src => server/src}/web_util.rs | 0 12 files changed, 298 insertions(+), 28 deletions(-) create mode 100644 cli/Cargo.toml create mode 100644 cli/src/main.rs create mode 100644 server/Cargo.toml rename {src => server/src}/error.rs (100%) rename {src => server/src}/garbage_collector.rs (100%) rename {src => server/src}/item_explanation.md (100%) rename {src => server/src}/main.rs (100%) rename {src => server/src}/metadata.rs (100%) rename {src => server/src}/util.rs (100%) rename {src => server/src}/web_util.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index 2b5e8fd..7e511e9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -76,6 +76,54 @@ dependencies = [ "libc", ] +[[package]] +name = "anstream" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" + +[[package]] +name = "anstyle-parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" +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", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" +dependencies = [ + "anstyle", + "windows-sys", +] + [[package]] name = "async-trait" version = "0.1.74" @@ -256,7 +304,19 @@ dependencies = [ "thiserror", "tokio", "tokio-util", - "toml", + "toml 0.8.2", +] + +[[package]] +name = "binctl" +version = "0.1.0" +dependencies = [ + "clap", + "confy", + "openidconnect", + "reqwest", + "serde", + "thiserror", ] [[package]] @@ -349,6 +409,64 @@ dependencies = [ "inout", ] +[[package]] +name = "clap" +version = "4.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d04704f56c2cde07f43e8e2c154b43f216dc5c92fc98ada720177362f953b956" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e231faeaca65ebd1ea3c737966bf858971cd38c3849107aa3ea7de90a804e45" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.38", +] + +[[package]] +name = "clap_lex" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961" + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "confy" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e37668cb35145dcfaa1931a5f37fde375eeae8068b4c0d2f289da28a270b2d2c" +dependencies = [ + "directories", + "serde", + "thiserror", + "toml 0.5.11", +] + [[package]] name = "const-oid" version = "0.9.5" @@ -523,6 +641,26 @@ dependencies = [ "subtle", ] +[[package]] +name = "directories" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + [[package]] name = "dotenvy" version = "0.15.7" @@ -721,6 +859,7 @@ dependencies = [ "futures-core", "futures-io", "futures-macro", + "futures-sink", "futures-task", "memchr", "pin-project-lite", @@ -1385,7 +1524,7 @@ checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.4.1", "smallvec", "windows-targets", ] @@ -1584,6 +1723,15 @@ dependencies = [ "getrandom", ] +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags 1.3.2", +] + [[package]] name = "redox_syscall" version = "0.4.1" @@ -1593,6 +1741,17 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "redox_users" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom", + "redox_syscall 0.2.16", + "thiserror", +] + [[package]] name = "regex" version = "1.10.2" @@ -1672,10 +1831,12 @@ dependencies = [ "system-configuration", "tokio", "tokio-rustls", + "tokio-util", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", + "wasm-streams", "web-sys", "webpki-roots", "winreg", @@ -2253,6 +2414,15 @@ dependencies = [ "tracing", ] +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + [[package]] name = "toml" version = "0.8.2" @@ -2396,6 +2566,12 @@ dependencies = [ "serde", ] +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + [[package]] name = "version_check" version = "0.9.4" @@ -2483,6 +2659,19 @@ version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +[[package]] +name = "wasm-streams" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4609d447824375f43e1ffbc051b50ad8f4b3ae8219680c94452ea05eb240ac7" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "web-sys" version = "0.3.64" diff --git a/Cargo.toml b/Cargo.toml index f26cc6c..288cf11 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,28 +1,10 @@ -[package] +[workspace] +resolver = "2" +members = [ + "server", + "cli" +] + +[workspace.package] name = "bin" version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -tokio = { version = "1.33", features = ["full"] } -tokio-util = { version="0.7", features = ["io"]} -futures-util = "0.3" -axum = {version="0.6", features=["macros", "headers", "multipart"]} -serde = "1.0" -toml = "0.8" -render = { git="https://github.com/render-rs/render.rs" } -thiserror = "1.0" -rand = "0.8" -dotenvy = "0.15" -markdown = "0.3" -axum_oidc = {git="https://git2.zettoit.eu/pfz4/axum_oidc"} -log = "0.4" -env_logger = "0.10" - -chacha20 = "0.9" -sha3 = "0.10" -hex = "0.4" -bytes = "1.5" -pin-project-lite = "0.2" diff --git a/cli/Cargo.toml b/cli/Cargo.toml new file mode 100644 index 0000000..4cd7e0a --- /dev/null +++ b/cli/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "binctl" +edition = "2021" +version.workspace = true + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +clap = { version="4.4", features = ["derive"] } +reqwest = { version="0.11", features = ["rustls-tls", "stream"], default-features=false} +openidconnect = "3.4" +thiserror = "1.0" +confy = "0.5" +serde = { version="1.0", features = [ "derive" ] } diff --git a/cli/src/main.rs b/cli/src/main.rs new file mode 100644 index 0000000..1fa186f --- /dev/null +++ b/cli/src/main.rs @@ -0,0 +1,57 @@ +use std::path::PathBuf; + +use clap::{Parser, Subcommand}; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize)] +pub struct Config { + server: String, + client_id: String, + client_secret: String, + claims: Vec, + challenge_port: u32, +} + +#[derive(Debug, Parser)] +pub struct Args { + #[arg(short, long, value_name = "FILE")] + config: Option, + + #[command(subcommand)] + command: Option, +} + +#[derive(Debug, Subcommand)] +pub enum Command { + Create { + #[arg(short, long, action)] + stdin: bool, + }, + Upload {}, + Login { + /// challenge port to listen to + #[arg(short, long, value_name = "PORT")] + port: Option, + + /// OIDC server + #[arg(long, value_name = "URL")] + server: Option, + + /// OIDC client id + #[arg(long)] + client: Option, + + /// OIDC client secret + #[arg(long)] + secret: Option, + + /// OIDC claims + #[arg(long)] + claims: Option>, + }, +} + +fn main() { + let args = Args::parse(); + dbg!(args); +} diff --git a/server/Cargo.toml b/server/Cargo.toml new file mode 100644 index 0000000..e6a3181 --- /dev/null +++ b/server/Cargo.toml @@ -0,0 +1,28 @@ +[package] +name = "bin" +version.workspace = true +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +tokio = { version = "1.33", features = ["full"] } +tokio-util = { version="0.7", features = ["io"]} +futures-util = "0.3" +axum = {version="0.6", features=["macros", "headers", "multipart"]} +serde = "1.0" +toml = "0.8" +render = { git="https://github.com/render-rs/render.rs" } +thiserror = "1.0" +rand = "0.8" +dotenvy = "0.15" +markdown = "0.3" +axum_oidc = {git="https://git2.zettoit.eu/pfz4/axum_oidc"} +log = "0.4" +env_logger = "0.10" + +chacha20 = "0.9" +sha3 = "0.10" +hex = "0.4" +bytes = "1.5" +pin-project-lite = "0.2" diff --git a/src/error.rs b/server/src/error.rs similarity index 100% rename from src/error.rs rename to server/src/error.rs diff --git a/src/garbage_collector.rs b/server/src/garbage_collector.rs similarity index 100% rename from src/garbage_collector.rs rename to server/src/garbage_collector.rs diff --git a/src/item_explanation.md b/server/src/item_explanation.md similarity index 100% rename from src/item_explanation.md rename to server/src/item_explanation.md diff --git a/src/main.rs b/server/src/main.rs similarity index 100% rename from src/main.rs rename to server/src/main.rs diff --git a/src/metadata.rs b/server/src/metadata.rs similarity index 100% rename from src/metadata.rs rename to server/src/metadata.rs diff --git a/src/util.rs b/server/src/util.rs similarity index 100% rename from src/util.rs rename to server/src/util.rs diff --git a/src/web_util.rs b/server/src/web_util.rs similarity index 100% rename from src/web_util.rs rename to server/src/web_util.rs