diff options
author | Quentin Dufour <quentin@deuxfleurs.fr> | 2024-03-08 08:17:03 +0100 |
---|---|---|
committer | Quentin Dufour <quentin@deuxfleurs.fr> | 2024-03-08 08:17:03 +0100 |
commit | 1a43ce5ac7033c148f64a033f2b1d335e95e11d5 (patch) | |
tree | 60b234604170fe207248458a9c4cdd3f4b7c36f2 /src/config.rs | |
parent | bb9cb386b65834c44cae86bd100f800883022062 (diff) | |
download | aerogramme-1a43ce5ac7033c148f64a033f2b1d335e95e11d5.tar.gz aerogramme-1a43ce5ac7033c148f64a033f2b1d335e95e11d5.zip |
WIP refactor
Diffstat (limited to 'src/config.rs')
-rw-r--r-- | src/config.rs | 191 |
1 files changed, 0 insertions, 191 deletions
diff --git a/src/config.rs b/src/config.rs deleted file mode 100644 index 7de2eac..0000000 --- a/src/config.rs +++ /dev/null @@ -1,191 +0,0 @@ -use std::collections::HashMap; -use std::io::{Read, Write}; -use std::net::SocketAddr; -use std::path::PathBuf; - -use anyhow::Result; -use serde::{Deserialize, Serialize}; - -#[derive(Serialize, Deserialize, Debug, Clone)] -pub struct CompanionConfig { - pub pid: Option<PathBuf>, - pub imap: ImapUnsecureConfig, - // @FIXME Add DAV - - #[serde(flatten)] - pub users: LoginStaticConfig, -} - -#[derive(Serialize, Deserialize, Debug, Clone)] -pub struct ProviderConfig { - pub pid: Option<PathBuf>, - pub imap: Option<ImapConfig>, - pub imap_unsecure: Option<ImapUnsecureConfig>, - pub lmtp: Option<LmtpConfig>, - pub auth: Option<AuthConfig>, - pub dav_unsecure: Option<DavUnsecureConfig>, - pub users: UserManagement, -} - -#[derive(Serialize, Deserialize, Debug, Clone)] -#[serde(tag = "user_driver")] -pub enum UserManagement { - Demo, - Static(LoginStaticConfig), - Ldap(LoginLdapConfig), -} - -#[derive(Serialize, Deserialize, Debug, Clone)] -pub struct AuthConfig { - pub bind_addr: SocketAddr, -} - -#[derive(Serialize, Deserialize, Debug, Clone)] -pub struct LmtpConfig { - pub bind_addr: SocketAddr, - pub hostname: String, -} - -#[derive(Serialize, Deserialize, Debug, Clone)] -pub struct ImapConfig { - pub bind_addr: SocketAddr, - pub certs: PathBuf, - pub key: PathBuf, -} - -#[derive(Serialize, Deserialize, Debug, Clone)] -pub struct DavUnsecureConfig { - pub bind_addr: SocketAddr, -} - -#[derive(Serialize, Deserialize, Debug, Clone)] -pub struct ImapUnsecureConfig { - pub bind_addr: SocketAddr, -} - -#[derive(Serialize, Deserialize, Debug, Clone)] -pub struct LoginStaticConfig { - pub user_list: PathBuf, -} - -#[derive(Serialize, Deserialize, Debug, Clone)] -#[serde(tag = "storage_driver")] -pub enum LdapStorage { - Garage(LdapGarageConfig), - InMemory, -} - -#[derive(Serialize, Deserialize, Debug, Clone)] -pub struct LdapGarageConfig { - pub s3_endpoint: String, - pub k2v_endpoint: String, - pub aws_region: String, - - pub aws_access_key_id_attr: String, - pub aws_secret_access_key_attr: String, - pub bucket_attr: Option<String>, - pub default_bucket: Option<String>, -} - -#[derive(Serialize, Deserialize, Debug, Clone)] -pub struct LoginLdapConfig { - // LDAP connection info - pub ldap_server: String, - #[serde(default)] - pub pre_bind_on_login: bool, - pub bind_dn: Option<String>, - pub bind_password: Option<String>, - pub search_base: String, - - // Schema-like info required for Aerogramme's logic - pub username_attr: String, - #[serde(default = "default_mail_attr")] - pub mail_attr: String, - - // The field that will contain the crypto root thingy - pub crypto_root_attr: String, - - // Storage related thing - #[serde(flatten)] - pub storage: LdapStorage, -} - -// ---- - -#[derive(Serialize, Deserialize, Debug, Clone)] -#[serde(tag = "storage_driver")] -pub enum StaticStorage { - Garage(StaticGarageConfig), - InMemory, -} - -#[derive(Serialize, Deserialize, Debug, Clone)] -pub struct StaticGarageConfig { - pub s3_endpoint: String, - pub k2v_endpoint: String, - pub aws_region: String, - - pub aws_access_key_id: String, - pub aws_secret_access_key: String, - pub bucket: String, -} - -pub type UserList = HashMap<String, UserEntry>; - -#[derive(Serialize, Deserialize, Debug, Clone)] -pub struct UserEntry { - #[serde(default)] - pub email_addresses: Vec<String>, - pub password: String, - pub crypto_root: String, - - #[serde(flatten)] - pub storage: StaticStorage, -} - -#[derive(Serialize, Deserialize, Debug, Clone)] -pub struct SetupEntry { - #[serde(default)] - pub email_addresses: Vec<String>, - - #[serde(default)] - pub clear_password: Option<String>, - - #[serde(flatten)] - pub storage: StaticStorage, -} - -#[derive(Serialize, Deserialize, Debug, Clone)] -#[serde(tag = "role")] -pub enum AnyConfig { - Companion(CompanionConfig), - Provider(ProviderConfig), -} - -// --- -pub fn read_config<T: serde::de::DeserializeOwned>(config_file: PathBuf) -> Result<T> { - let mut file = std::fs::OpenOptions::new() - .read(true) - .open(config_file.as_path())?; - - let mut config = String::new(); - file.read_to_string(&mut config)?; - - Ok(toml::from_str(&config)?) -} - -pub fn write_config<T: Serialize>(config_file: PathBuf, config: &T) -> Result<()> { - let mut file = std::fs::OpenOptions::new() - .write(true) - .create(true) - .truncate(true) - .open(config_file.as_path())?; - - file.write_all(toml::to_string(config)?.as_bytes())?; - - Ok(()) -} - -fn default_mail_attr() -> String { - "mail".into() -} |