From 5bfa645b3d03162eb5629edb35e5604512e9744b Mon Sep 17 00:00:00 2001 From: pyro57000 Date: Wed, 9 Apr 2025 10:42:00 -0500 Subject: [PATCH] added a url for the obsidian notes of the current project, and to get the vault name from the user at install. --- pentest_tool/src/install.rs | 13 ++++++++++--- pentest_tool/src/main.rs | 4 +++- pentest_tool/src/menu.rs | 22 +++++++++++++++++++--- 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/pentest_tool/src/install.rs b/pentest_tool/src/install.rs index bd07026..06ee98e 100644 --- a/pentest_tool/src/install.rs +++ b/pentest_tool/src/install.rs @@ -1,7 +1,7 @@ use std::collections::HashMap; use std::env::home_dir; use std::fs::{File, create_dir_all, remove_dir_all}; -use std::io::Read; +use std::io::{read_to_string, Read}; use std::io::Write; use std::io::stdin; use std::io::copy; @@ -30,6 +30,7 @@ pub fn install(config_path: &PathBuf){ let upcoming_projects = PathBuf::from(get_user_input("path to store your upcomming projects?")); let upcoming_notes = PathBuf::from(get_user_input("path to store your upcomming project notes?")); let tools = PathBuf::from(get_user_input("path where you store your custom tools (like from github and places)?")); + let mut vault_name = String::new(); let folders = vec![¤t_projects, ¤t_notes, &upcoming_projects, &upcoming_notes, &tools]; let mut config_folder_path: PathBuf = config_path.clone(); config_folder_path.pop(); @@ -170,6 +171,11 @@ pub fn install(config_path: &PathBuf){ terminal = format!("konsole --profile {}", profile_name); } } + println!("many of the fuctions of this tool assume you're using obsidian or some other markdown editor for note taking"); + let obsidian_used = get_user_input("do you use obsidian for your notes?"); + if obsidian_used.to_lowercase().contains("y"){ + vault_name = get_user_input("the name of the vault you're going to use?"); + } let configuration_string = format!(" Project_files:{} Project_notes:{} @@ -182,8 +188,9 @@ cracking_rig:{} rockyou_location:{} rule_location:{} pass_file:{} -fingerprint:{}" -, ¤t_projects.display(), ¤t_notes.display(), &tools.display(), &upcoming_projects.display(), &upcoming_notes.display(), &template_box_name, &terminal, cracking_rig, rockyou, rule, &password_path.display(), fingerprint); +fingerprint:{} +vault_name:{}" +, ¤t_projects.display(), ¤t_notes.display(), &tools.display(), &upcoming_projects.display(), &upcoming_notes.display(), &template_box_name, &terminal, cracking_rig, rockyou, rule, &password_path.display(), fingerprint, &vault_name); println!("cool everything, all folders and settings have been entered, now let's save this to a config file..."); thread::sleep(Duration::from_secs(3)); let mut config_file_res = File::create_new(config_path); diff --git a/pentest_tool/src/main.rs b/pentest_tool/src/main.rs index 5664c3d..6dd9b05 100644 --- a/pentest_tool/src/main.rs +++ b/pentest_tool/src/main.rs @@ -94,6 +94,7 @@ fn main() { let mut upcoming_notes = PathBuf::new(); let mut pass_spray_file = PathBuf::new(); let mut fingerprint = false; + let mut vault_name = String::new(); println!("\nconfig already generated\nloading config file...\n"); let settings_string = fs::read_to_string(&config_path).expect("error reading config file"); let settings: Vec<&str> = settings_string.split("\n").collect(); @@ -113,6 +114,7 @@ fn main() { "rule_location" => rule = setting_vec[1].trim_end().to_owned(), "pass_file"=> pass_spray_file.push(setting_vec[1]), "fingerprint" => {if setting_vec[1].contains("y"){fingerprint = true}}, + "vault_name" => vault_name = setting_vec[1].trim_end().to_owned(), _ => println!("error unknown setting: {}", setting_vec[0]) } } @@ -132,5 +134,5 @@ fn main() { println!("Enter to start main menu"); let mut enter = String::new(); std::io::stdin().read_line(&mut enter).unwrap(); - menu::main_menu(projects, config_path, &project_base_folder, &project_base_notes, &tools_folder, box_template, terminal_command, cracking_rig, rockyou, rule, &upcoming_files, &upcoming_notes, &pass_spray_file, fingerprint); + menu::main_menu(projects, config_path, &project_base_folder, &project_base_notes, &tools_folder, box_template, terminal_command, cracking_rig, rockyou, rule, &upcoming_files, &upcoming_notes, &pass_spray_file, fingerprint, vault_name); } diff --git a/pentest_tool/src/menu.rs b/pentest_tool/src/menu.rs index de8c9a0..7dcf23d 100644 --- a/pentest_tool/src/menu.rs +++ b/pentest_tool/src/menu.rs @@ -31,12 +31,27 @@ fn get_active_project(projects: &Vec) -> &Project{ return active_project } -pub fn main_menu(mut projects: Vec, config_path: PathBuf, base_files: &PathBuf, base_notes: &PathBuf, tools_dir: &PathBuf, boxtemplate: String, terminal: String, cracking_rig: String, rockyou: String, rule: String, upcoming_files: &PathBuf, upcoming_notes: &PathBuf, password_spray_file: &PathBuf, fingerprint: bool){ +pub fn main_menu(mut projects: Vec, config_path: PathBuf, base_files: &PathBuf, base_notes: &PathBuf, tools_dir: &PathBuf, boxtemplate: String, terminal: String, cracking_rig: String, rockyou: String, rule: String, upcoming_files: &PathBuf, upcoming_notes: &PathBuf, password_spray_file: &PathBuf, fingerprint: bool, vault_name: String){ let mut loopize = true; let mut new_id = next_project_id(&config_path); let mut threads = Vec::new(); loop { let active_project = get_active_project(&projects); + let mut notes_folder_string = format!("{}", &active_project.notes_folder.display()); + let mut obsidian_folder_vec = PathBuf::new(); + let mut reached_vault_folder = false; + for folder in notes_folder_string.split("/").collect::>(){ + if !folder.contains(&vault_name){ + reached_vault_folder = true; + obsidian_folder_vec.push(folder); + } + else{ + if reached_vault_folder{ + obsidian_folder_vec.push(folder); + } + } + } + let obsidian_uri = format!("obsidian://open?vault={}&file={}", vault_name, obsidian_folder_vec.display().to_string().replace("/", "%2F")); let mut response = String::new(); let now = Local::now(); let month = now.month(); @@ -104,11 +119,12 @@ base prject folder: {} upcoming project folder: {} Current Project: {} {} Working Folder: {} -Notes Folder: {} +Obsidian_uri: {} Box Name: {} Terminal Command: {} Current Season: {} Year: {} +General Notes: {} Main Menu: 1 .) Show Active Project @@ -138,7 +154,7 @@ Year: {} 25.) Parse GatherContacts output file 26.) prune unused distroboxes (free up system storage) 27.) Quit Application -\n",&base_files.display(), &upcoming_files.display(), active_project.customer, active_project.project_name, active_project.files_folder.display(), active_project.notes_folder.display(), active_project.boxname, terminal, season, year); +\n",&base_files.display(), &upcoming_files.display(), active_project.customer, active_project.project_name, active_project.files_folder.display(), active_project.notes_folder.display(), active_project.boxname, terminal, season, year, &obsidian_uri); std::io::stdin().read_line(&mut response).expect("error getting menu input"); clear().expect("error clearing screen"); match response.as_str().trim_end(){