2022-06-18 10:35:23 +00:00
|
|
|
use std::fs;
|
|
|
|
|
2022-04-19 19:10:36 +00:00
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
|
|
pub struct Config {
|
2022-06-18 10:35:23 +00:00
|
|
|
/// Configure HTTP settings
|
2022-04-19 19:10:36 +00:00
|
|
|
pub http: ConfigHTTP,
|
2022-06-18 10:35:23 +00:00
|
|
|
/// Configure Json Web Token settings
|
2022-04-19 19:10:36 +00:00
|
|
|
pub jwt: ConfigJWT,
|
2022-06-18 10:35:23 +00:00
|
|
|
/// Configure storage settings
|
2022-04-24 19:31:50 +00:00
|
|
|
pub storage: ConfigStorage,
|
2022-04-19 19:10:36 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
|
|
pub struct ConfigHTTP {
|
2022-06-07 20:36:26 +00:00
|
|
|
/// HTTP Host
|
2022-04-19 19:10:36 +00:00
|
|
|
pub host: String,
|
2022-06-07 20:36:26 +00:00
|
|
|
/// Port HTTP Port
|
2022-04-19 19:10:36 +00:00
|
|
|
pub port: u16,
|
2022-06-21 10:51:22 +00:00
|
|
|
/// [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) Domains (e.g ["site1.example.com", "site2.example.com"])
|
2022-04-19 19:10:36 +00:00
|
|
|
pub cors: Vec<String>,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
|
|
pub struct ConfigJWT {
|
2022-06-08 22:02:20 +00:00
|
|
|
/// JWT Secret string (used to sign tokens)
|
2022-04-19 19:10:36 +00:00
|
|
|
pub secret: String,
|
2022-06-08 22:02:20 +00:00
|
|
|
/// Token expiration time in hours
|
2022-04-23 10:52:56 +00:00
|
|
|
pub expires: i64,
|
2022-04-19 19:10:36 +00:00
|
|
|
}
|
2022-04-24 19:31:50 +00:00
|
|
|
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
|
|
pub struct ConfigStorage {
|
2022-06-07 20:36:26 +00:00
|
|
|
/// Directory where user files will be stored
|
2022-04-24 19:31:50 +00:00
|
|
|
pub path: String,
|
|
|
|
}
|
2022-06-18 10:35:23 +00:00
|
|
|
|
|
|
|
#[cfg(feature = "config")]
|
|
|
|
impl Config {
|
2022-06-21 10:51:22 +00:00
|
|
|
/// Parse configuration file.
|
|
|
|
///
|
2022-06-18 10:35:23 +00:00
|
|
|
/// ```no_run
|
|
|
|
/// use homedisk_types::config::Config;
|
|
|
|
///
|
|
|
|
/// let config = Config::parse().unwrap();
|
|
|
|
/// ```
|
2022-08-29 10:54:32 +00:00
|
|
|
pub fn parse() -> anyhow::Result<Self> {
|
|
|
|
let config_str = fs::read_to_string("config.toml")?;
|
2022-06-18 10:35:23 +00:00
|
|
|
|
2022-08-29 10:54:32 +00:00
|
|
|
let config = toml::from_str(&config_str)?;
|
2022-06-18 10:35:23 +00:00
|
|
|
|
2022-08-29 10:54:32 +00:00
|
|
|
Ok(config)
|
2022-06-18 10:35:23 +00:00
|
|
|
}
|
|
|
|
}
|