1mod commands;
2mod dashboard;
3mod data;
4mod initial_setup;
5mod login;
6
7use serde::{Deserialize, Serialize};
8use std::{path::PathBuf, process};
9
10use crate::dashboard::dashboard_options;
11
12pub fn run() {
13 let path_to_file = locate_file();
14 if !path_to_file.exists() {
15 initial_setup::initial_setup::check_if_file_exists();
16 } else {
17 let hashfile = std::fs::read_to_string(path_to_file).unwrap();
18 let hashjson: MasterPassword = serde_json::from_str(&hashfile.as_str()).unwrap();
19 let status = login::login::login(hashjson.master_password);
20 if status {
21 loop {
22 let option = dashboard_options::list_option();
23 let option: u8 = option.trim().parse::<u8>().unwrap();
24 match option {
25 1 => commands::commands::create_password(),
26 2 => {
27 commands::commands::list_all_passwords();
28 }
29 3 => process::exit(1),
30 _ => {
31 eprintln!("Select from the given option \n");
32 continue;
33 }
34 }
35 }
36 } else {
37 eprint!("Incorrect Password \n");
38 process::exit(1);
39 }
40 }
41}
42
43#[derive(Serialize, Deserialize)]
44struct MasterPassword<'a> {
45 master_password: &'a str,
46}
47
48pub fn locate_file() -> PathBuf {
49 let path_to_dir = home::home_dir().unwrap().join(".local/share/passafe");
50 path_to_dir.join("passwords.json")
51}