From edc25af9dec72d6a7c8b42f1bdd2df3d2222e745 Mon Sep 17 00:00:00 2001 From: Janis Date: Mon, 4 Apr 2022 14:59:24 +0200 Subject: [PATCH] added password generator, added ability to use text file as wordlist --- src/bin/duralumin.rs | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/bin/duralumin.rs b/src/bin/duralumin.rs index ac54fa9..802b275 100644 --- a/src/bin/duralumin.rs +++ b/src/bin/duralumin.rs @@ -1,3 +1,5 @@ +use std::path::PathBuf; + use clap::Parser; use libduralumin::passphrase_gen::{PassPhraseGenerator, Words}; @@ -17,7 +19,11 @@ struct Opts { min_word_length: Option, #[clap(short, long)] count: Option, - #[clap(long, default_value = "useapassphrase")] + #[clap( + long, + default_value = "useapassphrase", + long_help = "word list to use for passphrase generation, a filepath or any of `useapassphrase`, `english`" + )] backend: String, } @@ -46,6 +52,7 @@ impl Opts { enum Backend { UseAPassPhrase, EnglishWords, + File(PathBuf), } impl Backend { @@ -56,7 +63,14 @@ impl Backend { match s.as_ref() { "useapassphrase" => Some(Backend::UseAPassPhrase), "english" => Some(Backend::EnglishWords), - _ => None, + _ => { + let path = PathBuf::from(s.as_ref()); + if path.exists() { + Some(Backend::File(path)) + } else { + None + } + } } } } @@ -69,11 +83,11 @@ fn main() { .with_length(opts.words_per_passphrase()); let words = match opts.backend() { - Some(Backend::UseAPassPhrase) => { - Words::from_str(include_str!("../../useapassphrase.txt")) - } - Some(Backend::EnglishWords) => { - Words::from_str(include_str!("../../words_alpha.txt")) + Some(Backend::UseAPassPhrase) => Words::from_str(include_str!("../../useapassphrase.txt")), + Some(Backend::EnglishWords) => Words::from_str(include_str!("../../words_alpha.txt")), + Some(path) => { + Words::from_text_file(std::fs::File::open(path).expect("failed to read word list.")) + .expect("word list from path.") } None => { panic!("invalid backend.")