fix bug when renaming entry

This commit is contained in:
Mystikfluu 2022-12-28 02:32:23 +01:00
parent d40f297e19
commit c4d3d09e08
2 changed files with 26 additions and 6 deletions

View File

@ -5,7 +5,7 @@ use std::io::Write;
mod utils; mod utils;
fn main() { fn main() {
let version = "0.2.0"; let version = "0.2.1";
println!("IPass v{}\n", version); println!("IPass v{}\n", version);
let args = utils::get_args(); let args = utils::get_args();
@ -110,7 +110,7 @@ fn list() {
} }
} }
fn add(args: &Vec<String>) { fn add(args: &Vec<String>) { //TODO: format: [specifier] [email or username] {password}
if args.len() < 3 || args.len() > 4 { if args.len() < 3 || args.len() > 4 {
println!("Incorrect usage of \"add\""); println!("Incorrect usage of \"add\"");
@ -123,17 +123,21 @@ fn add(args: &Vec<String>) {
pw = args[3].trim().to_owned(); pw = args[3].trim().to_owned();
} else { } else {
let alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!\"§$%&/()=?´`²³{[]}\\,.-;:_><|+*#'"; let alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!\"§$%&/()=?´`²³{[]}\\,.-;:_><|+*#'";
let char_set:Vec<char> = alphabet.clone().chars().collect(); let alph_len = alphabet.chars().count();
let char_set:Vec<char> = alphabet.chars().collect();
let mut chars_index: Vec<u8> = vec![0;20]; let mut chars_index: Vec<u8> = vec![0;20];
OsRng.fill_bytes(&mut chars_index); OsRng.fill_bytes(&mut chars_index);
let mut chars = String::new(); let mut chars = String::new();
for index in chars_index { 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; pw = chars;
println!("Using auto generated password");
// println!("pw: {pw}");
} }
println!("Adding password for {}",args[2]); println!("Adding password for {}",args[2]);
@ -191,7 +195,7 @@ fn rename(args: &Vec<String>) { // prog ren old new
} }
let filepath = &(utils::get_ipass_folder()+&args[2]+".ipass"); let filepath = &(utils::get_ipass_folder()+&args[2]+".ipass");
if std::path::Path::new(filepath).exists() { 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]); println!("Renamed {} to {}", args[2], args[3]);
} else { } else {
println!("No such file"); println!("No such file");

View File

@ -112,3 +112,19 @@ pub fn prompt_answer(toprint: String) -> String {
return choice.trim().to_lowercase(); 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();
}