1use std::{fs, path::PathBuf};
2
3use derive_builder::Builder;
4use tracing::debug;
5
6#[derive(Builder, Debug, Default, Clone)]
7pub struct AppConfig {
8 pub asserts_root_dir: PathBuf,
9 pub ca_root_dir: PathBuf,
10 pub raw_root_dir: PathBuf,
11 pub db_root_dir: PathBuf,
12 pub ui_root_dir: PathBuf,
13}
14
15impl AppConfig {
16 pub fn get_root_ca_path(&self) -> PathBuf {
17 self.ca_root_dir.join("root_ca.pem")
18 }
19 pub fn get_root_ca_key(&self) -> PathBuf {
20 self.ca_root_dir.join("root_ca.key")
21 }
22 pub fn get_db_path(&self) -> PathBuf {
23 self.db_root_dir.join("proxy.sqlite")
24 }
25}
26
27#[derive(Debug, Default)]
28pub struct InitAppConfigParams {
29 pub ui_assert_dir: Option<PathBuf>,
30 pub root_dir: Option<PathBuf>,
31}
32
33pub fn set_up_config_dir(init_params: InitAppConfigParams) -> AppConfig {
34 let default_asserts_root_dir = if let Some(root_dir) = init_params.root_dir {
35 root_dir
36 } else {
37 PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("asserts")
38 };
39
40 let default_ca_root_dir = default_asserts_root_dir.join("ca");
41 let default_raw_root_dir = default_asserts_root_dir.join("raw");
42 let default_db_root_dir = default_asserts_root_dir.join("db");
43 let default_ui_root_dir = init_params
44 .ui_assert_dir
45 .unwrap_or_else(|| default_asserts_root_dir.join("ui"));
46
47 let config = AppConfigBuilder::create_empty()
48 .asserts_root_dir(default_asserts_root_dir)
49 .ca_root_dir(default_ca_root_dir)
50 .db_root_dir(default_db_root_dir)
51 .raw_root_dir(default_raw_root_dir)
52 .ui_root_dir(default_ui_root_dir)
53 .build()
54 .expect("init asserts dir error");
55
56 create_dir_if_not_exists(&config.asserts_root_dir);
57 create_dir_if_not_exists(&config.ca_root_dir);
58 create_dir_if_not_exists(&config.db_root_dir);
59 create_dir_if_not_exists(&config.raw_root_dir);
60 config
61}
62
63pub fn create_dir_if_not_exists(dir: &PathBuf) {
64 if !fs::exists(dir)
65 .unwrap_or_else(|_| panic!("can't check existence of {}", &dir.to_string_lossy()))
66 {
67 fs::create_dir(dir).unwrap_or_else(|_| panic!("can't create {}", &dir.to_string_lossy()));
68 debug!("create dir {}", &dir.to_string_lossy());
69 }
70 debug!("dir {} exists", &dir.to_string_lossy());
71}
72
73pub const REQ_DIR: &str = "req";
74pub const RES_DIR: &str = "res";