passafe/
lib.rs

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}