From 1a43ce5ac7033c148f64a033f2b1d335e95e11d5 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Fri, 8 Mar 2024 08:17:03 +0100 Subject: WIP refactor --- src/config.rs | 191 ---------------------------------------------------------- 1 file changed, 191 deletions(-) delete mode 100644 src/config.rs (limited to 'src/config.rs') 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, - pub imap: ImapUnsecureConfig, - // @FIXME Add DAV - - #[serde(flatten)] - pub users: LoginStaticConfig, -} - -#[derive(Serialize, Deserialize, Debug, Clone)] -pub struct ProviderConfig { - pub pid: Option, - pub imap: Option, - pub imap_unsecure: Option, - pub lmtp: Option, - pub auth: Option, - pub dav_unsecure: Option, - 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, - pub default_bucket: Option, -} - -#[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, - pub bind_password: Option, - 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; - -#[derive(Serialize, Deserialize, Debug, Clone)] -pub struct UserEntry { - #[serde(default)] - pub email_addresses: Vec, - 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, - - #[serde(default)] - pub clear_password: Option, - - #[serde(flatten)] - pub storage: StaticStorage, -} - -#[derive(Serialize, Deserialize, Debug, Clone)] -#[serde(tag = "role")] -pub enum AnyConfig { - Companion(CompanionConfig), - Provider(ProviderConfig), -} - -// --- -pub fn read_config(config_file: PathBuf) -> Result { - 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(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() -} -- cgit v1.2.3