|
|
|
@ -1,5 +1,8 @@
|
|
|
|
|
use docopt::Docopt;
|
|
|
|
|
use log::debug;
|
|
|
|
|
use rand::rngs::OsRng;
|
|
|
|
|
use rand::seq::IteratorRandom;
|
|
|
|
|
use rand::seq::SliceRandom;
|
|
|
|
|
use serde::Deserialize;
|
|
|
|
|
use std::error::Error;
|
|
|
|
|
|
|
|
|
@ -32,6 +35,31 @@ struct Args {
|
|
|
|
|
arg_spec: Option<String>,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn get_master_key(db_conn: &mut db::DbHandle) -> [u8; 32] {
|
|
|
|
|
let known_string = db_conn
|
|
|
|
|
.get_db_property("known_string")
|
|
|
|
|
.unwrap_or_else(|error| {
|
|
|
|
|
panic!("There was a problem reading from the db: {:?}", error);
|
|
|
|
|
})
|
|
|
|
|
.unwrap_or_else(|| {
|
|
|
|
|
println!("No master password set yet, create new one:");
|
|
|
|
|
let mut random = OsRng::new().unwrap();
|
|
|
|
|
let new_known: String = {
|
|
|
|
|
let mut new_chars: Vec<char> = "abcdefghijklmnopqrstuvwxyz"
|
|
|
|
|
.chars()
|
|
|
|
|
.choose_multiple(&mut random, 64);
|
|
|
|
|
new_chars.shuffle(&mut random);
|
|
|
|
|
new_chars.into_iter().collect()
|
|
|
|
|
};
|
|
|
|
|
db_conn.set_db_property("known_string", &new_known);
|
|
|
|
|
new_known
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
let master_key: [u8; 32] = [0; 32];
|
|
|
|
|
|
|
|
|
|
master_key
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn main() -> Result<(), Box<dyn Error>> {
|
|
|
|
|
pretty_env_logger::init();
|
|
|
|
|
let args: Args = Docopt::new(USAGE)
|
|
|
|
@ -46,5 +74,7 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|
|
|
|
|
|
|
|
|
let mut db_conn: db::DbHandle = db::DbHandle::new(&args.flag_db);
|
|
|
|
|
|
|
|
|
|
let master_key: [u8; 32] = get_master_key(&mut db_conn);
|
|
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|