Initial commit
This commit is contained in:
3 files changed
+66
No files matched your search
@@ -0,0 +1,2 @@
|
|||||||
|
/target
|
||||||
|
/Cargo.lock
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
[package]
|
||||||
|
name = "password-generator"
|
||||||
|
version = "1.0.0"
|
||||||
|
edition = "2024"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
rand = "0.10.3"
|
||||||
|
clap = { version = "4.6.7", features = ["derive"] }
|
||||||
+56
@@ -0,0 +1,56 @@
|
|||||||
|
use rand::RngExt;
|
||||||
|
use clap::Parser;
|
||||||
|
|
||||||
|
pub fn generate_password(
|
||||||
|
length: usize,
|
||||||
|
use_upper: bool,
|
||||||
|
use_lower: bool,
|
||||||
|
use_numbers: bool,
|
||||||
|
use_symbols: bool,
|
||||||
|
) -> String {
|
||||||
|
let mut pool = String::new();
|
||||||
|
if use_upper { pool.push_str("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); }
|
||||||
|
if use_lower { pool.push_str("abcdefghijklmnopqrstuvwxyz"); }
|
||||||
|
if use_numbers { pool.push_str("0123456789"); }
|
||||||
|
if use_symbols { pool.push_str("!@#$%^&*"); }
|
||||||
|
|
||||||
|
if pool.is_empty() {
|
||||||
|
return String::new();
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut rng = rand::rng();
|
||||||
|
let chars_vec: Vec<char> = pool.chars().collect();
|
||||||
|
|
||||||
|
(0..length)
|
||||||
|
.map(|_| {
|
||||||
|
let idx = rng.random_range(0..chars_vec.len());
|
||||||
|
chars_vec[idx]
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Parser, Debug)]
|
||||||
|
#[command(author = "Lncvrt", version, about = "A simple password generator CLI. To disable the use of uppercases or other stuff do \"--uppercase\"", long_about = None)]
|
||||||
|
struct Args {
|
||||||
|
#[arg(short, long, default_value_t = 8)]
|
||||||
|
length: usize,
|
||||||
|
|
||||||
|
#[arg(short, long, default_value_t = true, action = clap::ArgAction::SetFalse)]
|
||||||
|
uppercase: bool,
|
||||||
|
|
||||||
|
#[arg(short, long, default_value_t = true, action = clap::ArgAction::SetFalse)]
|
||||||
|
lowercase: bool,
|
||||||
|
|
||||||
|
#[arg(short, long, default_value_t = true, action = clap::ArgAction::SetFalse)]
|
||||||
|
numbers: bool,
|
||||||
|
|
||||||
|
#[arg(short, long, default_value_t = true, action = clap::ArgAction::SetFalse)]
|
||||||
|
symbols: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let args = Args::parse();
|
||||||
|
|
||||||
|
println!("Length: {}, Uppercase: {}, Lowercase: {}, Numbers: {}, Symbols: {}", args.length, args.uppercase, args.lowercase, args.numbers, args.symbols);
|
||||||
|
println!("Generated Password: {}", generate_password(args.length, args.uppercase, args.lowercase, args.numbers, args.symbols))
|
||||||
|
}
|
||||||
Reference in new issue
Block a user