extern crate rand;
use std::fs::File;
use argh::{FromArgs};
use lib_wordpass::{get_word_list, get_default_filename, generate_password};
#[derive(FromArgs, Clone)]
struct Opts {
#[argh(option, short='w', default = "4")]
min_word_count: u8,
#[argh(option, short='l', default = "16")]
min_letter_count: u8,
#[argh(switch, short='S')]
do_not_use_spaces: bool,
#[argh(switch, short ='i')]
initial_capital: bool,
#[argh(switch, short='c')]
use_caps: bool,
#[argh(option, short='d')]
dictionary_file: Option<String>,
#[argh(switch)]
do_not_filter:bool
}
fn main() {
let opts:Opts = argh::from_env();
let filename;
if opts.dictionary_file.is_some() {
filename = opts.dictionary_file.unwrap();
} else {
filename= match get_default_filename() {
Some(f) => f,
None => {
println!("Cannot find dictionary file at a default location ($XDG_CONFIG_HOME/wordpass/words.txt or /usr/share/dict/words). To specify a dictionary file as an argument, see --help");
return;
}
}
}
let file = match File::open(filename) {
Err(e) => {println!("Unable to open file: {}",e);return;},
Ok(f) => f
};
println!("{}",generate_password(get_word_list(file, !opts.do_not_filter), opts.min_letter_count, opts.min_word_count, opts.initial_capital, opts.use_caps, !opts.do_not_use_spaces));
println!();
}