diff --git a/src/main.rs b/src/main.rs index 8a92b8a..5363d35 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,7 +5,7 @@ use std::io::Write; mod utils; fn main() { - let version = "0.2.0"; + let version = "0.2.1"; println!("IPass v{}\n", version); let args = utils::get_args(); @@ -110,7 +110,7 @@ fn list() { } } -fn add(args: &Vec) { +fn add(args: &Vec) { //TODO: format: [specifier] [email or username] {password} if args.len() < 3 || args.len() > 4 { println!("Incorrect usage of \"add\""); @@ -123,16 +123,20 @@ fn add(args: &Vec) { pw = args[3].trim().to_owned(); } else { let alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!\"§$%&/()=?´`²³{[]}\\,.-;:_><|+*#'"; - let char_set:Vec = alphabet.clone().chars().collect(); + let alph_len = alphabet.chars().count(); + let char_set:Vec = alphabet.chars().collect(); let mut chars_index: Vec = vec![0;20]; OsRng.fill_bytes(&mut chars_index); let mut chars = String::new(); for index in chars_index { - chars += &char_set[(index%((alphabet.len()-1) as u8)) as usize].to_string(); + // println!("{} - {} - {}",index,(index as usize)%(alph_len-1),alph_len); + chars += &char_set[(index as usize)%(alph_len-1)].to_string(); } - pw = chars; + + println!("Using auto generated password"); + // println!("pw: {pw}"); } @@ -191,7 +195,7 @@ fn rename(args: &Vec) { // prog ren old new } let filepath = &(utils::get_ipass_folder()+&args[2]+".ipass"); if std::path::Path::new(filepath).exists() { - std::fs::rename(format!("{}/{}.ipass",utils::get_ipass_folder(),args[2]), format!("{}/{}.ipass",utils::get_ipass_folder(),args[3])).unwrap(); + utils::rename(&args[2],&args[3]); println!("Renamed {} to {}", args[2], args[3]); } else { println!("No such file"); diff --git a/src/utils.rs b/src/utils.rs index 8fcd9db..61ebf0b 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -111,4 +111,20 @@ pub fn prompt_answer(toprint: String) -> String { std::io::stdin().read_line(&mut choice).expect("Failed to read choice"); return choice.trim().to_lowercase(); +} + +pub fn rename(name: &String, new_name: &String) { + if !std::path::Path::new(&(get_ipass_folder()+name+".ipass")).exists() { + return; + } + if std::path::Path::new(&(get_ipass_folder()+new_name+".ipass")).exists() { + return; + } + let content = &mut std::fs::read_to_string(get_ipass_folder()+name+".ipass").expect("Should have been able to read the file"); + let mpw = ask_for_pw(); + let mut pw = decrypt_pass(name.to_owned(),hex::decode(content).unwrap(),mpw.clone()).to_owned(); + + pw = encrypt_pass(new_name.to_owned(), pw,mpw); + let mut file = std::fs::File::create(get_ipass_folder()+new_name+".ipass").unwrap(); + file.write_all(pw.as_bytes()).unwrap(); } \ No newline at end of file