Skip to main content

smbcloud_utils/
lib.rs

1use {
2    anyhow::{anyhow, Result},
3    log::debug,
4    regex::Regex,
5    smbcloud_model::project::Config,
6    std::{fs::OpenOptions, io::Write},
7};
8
9pub mod config;
10pub mod write_config;
11
12pub fn email_validation(input: &str) -> Result<(), &'static str> {
13    let email_regex = Regex::new(
14        r"^([a-z0-9_+]([a-z0-9_+.]*[a-z0-9_+])?)@([a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,6})",
15    )
16    .unwrap();
17
18    if email_regex.is_match(input) {
19        Ok(())
20    } else {
21        Err("Username must be an email address.")
22    }
23}
24
25pub async fn get_config() -> Result<Config> {
26    match home::home_dir() {
27        Some(mut path) => {
28            path.push(".smb/config.json");
29            if !path.exists() {
30                let config = Config {
31                    current_project: None,
32                    current_frontend_app: None,
33                    current_auth_app: None,
34                };
35                return Ok(config);
36            }
37            let config_string = std::fs::read_to_string(path).map_err(|e| {
38                debug!("Error while reading config file: {}", &e);
39                anyhow!("Error while reading config file. Are you logged in?")
40            })?;
41            let config: Config = serde_json::from_str(&config_string).map_err(|e| {
42                debug!("Error while parsing config: {}", &e);
43                anyhow!("Error while parsing config. Are you logged in?")
44            })?;
45
46            Ok(config)
47        }
48        None => {
49            let config = Config {
50                current_project: None,
51                current_frontend_app: None,
52                current_auth_app: None,
53            };
54            Ok(config)
55        }
56    }
57}
58
59pub fn write_config(config: Config) -> Result<Config> {
60    match home::home_dir() {
61        Some(path) => {
62            debug!("{}", path.to_str().unwrap());
63            let mut file = OpenOptions::new()
64                .create(true)
65                .truncate(true)
66                .write(true)
67                .open([path.to_str().unwrap(), "/.smb/config.json"].join(""))?;
68            let json = serde_json::to_string(&config)?;
69            file.write_all(json.as_bytes())?;
70
71            Ok(config)
72        }
73        None => Err(anyhow!("Error getting home directory.")),
74    }
75}