lynx_core/config/
mod.rs

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";