From 795265ef974af2dbf525e606b1aade0c189e4391 Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Sun, 29 Dec 2024 13:05:27 +0800 Subject: [PATCH] feat: update makepassword-rs --- makepassword-rs/Cargo.lock | 230 +++++++++++++++++++++++++++++++++++- makepassword-rs/Cargo.toml | 1 + makepassword-rs/src/main.rs | 64 +++++++++- script-meta.json | 4 +- 4 files changed, 294 insertions(+), 5 deletions(-) mode change 100644 => 100755 makepassword-rs/src/main.rs diff --git a/makepassword-rs/Cargo.lock b/makepassword-rs/Cargo.lock index c950e26..45f6c3d 100644 --- a/makepassword-rs/Cargo.lock +++ b/makepassword-rs/Cargo.lock @@ -1,6 +1,55 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 + +[[package]] +name = "anstream" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" + +[[package]] +name = "anstyle-parse" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +dependencies = [ + "anstyle", + "windows-sys", +] [[package]] name = "cfg-if" @@ -8,6 +57,52 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "clap" +version = "4.5.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" + +[[package]] +name = "colorchoice" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" + [[package]] name = "getrandom" version = "0.2.8" @@ -19,6 +114,18 @@ dependencies = [ "wasi", ] +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + [[package]] name = "libc" version = "0.2.139" @@ -29,6 +136,7 @@ checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" name = "makepassword-rs" version = "0.1.0" dependencies = [ + "clap", "rand", ] @@ -38,6 +146,24 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +[[package]] +name = "proc-macro2" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +dependencies = [ + "proc-macro2", +] + [[package]] name = "rand" version = "0.8.5" @@ -68,8 +194,110 @@ dependencies = [ "getrandom", ] +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "syn" +version = "2.0.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c786062daee0d6db1132800e623df74274a0a87322d8e183338e01b3d98d058" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" diff --git a/makepassword-rs/Cargo.toml b/makepassword-rs/Cargo.toml index d69cf8b..d04b883 100644 --- a/makepassword-rs/Cargo.toml +++ b/makepassword-rs/Cargo.toml @@ -7,3 +7,4 @@ edition = "2021" [dependencies] rand = "0.8.5" +clap = { version = "4.1.8", features = ["derive"] } diff --git a/makepassword-rs/src/main.rs b/makepassword-rs/src/main.rs old mode 100644 new mode 100755 index ab2805e..b57d050 --- a/makepassword-rs/src/main.rs +++ b/makepassword-rs/src/main.rs @@ -3,21 +3,81 @@ //! ```cargo //! [dependencies] //! rand = "0.8.5" +//! clap = { version = "4.1.8", features = ["derive"] } //! ``` +use clap::{arg, Parser}; use rand::RngCore; +use std::process::exit; const ENGLISH_LOWER: &'static str = "abcdefghijklmnopqrstuvwxyz"; const ENGLISH_UPPER: &'static str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; const NUMBER: &'static str = "0123456789"; +const SPECIAL: &'static str = ".,/<>;:[]{}-=_+!@#$%^&*()~"; + +#[derive(Parser, Debug)] +#[command(author, version, about, long_about = None, bin_name = "makepassword.rs")] +struct Args { + /// Password length + #[arg(short, long)] + length: Option, + + /// Chars (e.g. a - lower case alphabet, A - UPPER CASE ALPHABET, n|N|# - number, * - special) + #[arg(short, long)] + chars: Option, +} fn main() { - let str = ENGLISH_LOWER.to_string() + ENGLISH_UPPER + NUMBER; + let args: Args = Args::parse(); + + let mut a = false; + let mut A = false; + let mut n = false; + let mut s = false; + match args.chars { + None => { + a = true; + A = true; + n = true; + } + Some(chars) => { + for c in chars.chars() { + match c { + 'a' => a = true, + 'A' => A = true, + 'n' | 'N' | '#' => n = true, + '*' => s = true, + _ => {} + } + } + } + } + + if !a && !A && !n && !s { + eprintln!("No chars selected."); + exit(1); + } + + let mut str = "".to_string(); + if a { + str += ENGLISH_LOWER; + } + if A { + str += ENGLISH_UPPER; + } + if n { + str += NUMBER; + } + if s { + str += SPECIAL; + } let chars = str.chars().collect::>(); let mut rng = rand::thread_rng(); let mut pass = String::new(); - for _ in 0..18 { + + let len = args.length.unwrap_or(18); + for _ in 0..len { pass.push(chars[rng.next_u32() as usize % chars.len()]); } diff --git a/script-meta.json b/script-meta.json index 51791a8..34bfabb 100644 --- a/script-meta.json +++ b/script-meta.json @@ -26,8 +26,8 @@ }, "makepassword-rs": { "script_name": "makepassword-rs", - "script_length": 599, - "script_sha256": "9113413d50908037bcd4135e1a527d7c43a921baa4b92c68f46e31e92d292dee" + "script_length": 1966, + "script_sha256": "0ca721d3531a9cc94c95193e7148c0316551fd65d84de7f54bd4b6418ff37f01" }, "myip-rs": { "script_name": "myip-rs",