The context has now been moved to `proxmox-notify` due to the fact that we also need it in `proxmox-mail-forward` now.
Signed-off-by: Lukas Wagner <l.wag...@proxmox.com> --- pve-rs/Cargo.toml | 2 +- pve-rs/src/lib.rs | 7 ++- pve-rs/src/notify_context.rs | 117 ----------------------------------- 3 files changed, 5 insertions(+), 121 deletions(-) delete mode 100644 pve-rs/src/notify_context.rs diff --git a/pve-rs/Cargo.toml b/pve-rs/Cargo.toml index f9e3291..f734b3b 100644 --- a/pve-rs/Cargo.toml +++ b/pve-rs/Cargo.toml @@ -36,7 +36,7 @@ perlmod = { version = "0.13", features = [ "exporter" ] } proxmox-apt = "0.10.6" proxmox-http = { version = "0.9", features = ["client-sync", "client-trait"] } proxmox-http-error = "0.1.0" -proxmox-notify = "0.2" +proxmox-notify = { version = "0.2", features = ["pve-context"] } proxmox-openid = "0.10" proxmox-resource-scheduling = "0.3.0" proxmox-subscription = "0.4" diff --git a/pve-rs/src/lib.rs b/pve-rs/src/lib.rs index d1915c9..42be39e 100644 --- a/pve-rs/src/lib.rs +++ b/pve-rs/src/lib.rs @@ -4,18 +4,19 @@ pub mod common; pub mod apt; -pub mod notify_context; pub mod openid; pub mod resource_scheduling; pub mod tfa; #[perlmod::package(name = "Proxmox::Lib::PVE", lib = "pve_rs")] mod export { - use crate::{common, notify_context}; + use proxmox_notify::context::pve::PVE_CONTEXT; + + use crate::common; #[export] pub fn init() { common::logger::init("PVE_LOG", "info"); - notify_context::init(); + proxmox_notify::context::set_context(&PVE_CONTEXT) } } diff --git a/pve-rs/src/notify_context.rs b/pve-rs/src/notify_context.rs deleted file mode 100644 index 48623fd..0000000 --- a/pve-rs/src/notify_context.rs +++ /dev/null @@ -1,117 +0,0 @@ -use log; -use std::path::Path; - -use proxmox_notify::context::Context; - -// Some helpers borrowed and slightly adapted from `proxmox-mail-forward` - -fn normalize_for_return(s: Option<&str>) -> Option<String> { - match s?.trim() { - "" => None, - s => Some(s.to_string()), - } -} - -fn attempt_file_read<P: AsRef<Path>>(path: P) -> Option<String> { - match proxmox_sys::fs::file_read_optional_string(path) { - Ok(contents) => contents, - Err(err) => { - log::error!("{err}"); - None - } - } -} - -fn lookup_mail_address(content: &str, user: &str) -> Option<String> { - normalize_for_return(content.lines().find_map(|line| { - let fields: Vec<&str> = line.split(':').collect(); - #[allow(clippy::get_first)] // to keep expression style consistent - match fields.get(0)?.trim() == "user" && fields.get(1)?.trim() == user { - true => fields.get(6).copied(), - false => None, - } - })) -} - -fn lookup_datacenter_config_key(content: &str, key: &str) -> Option<String> { - let key_prefix = format!("{key}:"); - normalize_for_return( - content - .lines() - .find_map(|line| line.strip_prefix(&key_prefix)), - ) -} - -#[derive(Debug)] -struct PVEContext; - -impl Context for PVEContext { - fn lookup_email_for_user(&self, user: &str) -> Option<String> { - let content = attempt_file_read("/etc/pve/user.cfg"); - content.and_then(|content| lookup_mail_address(&content, user)) - } - - fn default_sendmail_author(&self) -> String { - "Proxmox VE".into() - } - - fn default_sendmail_from(&self) -> String { - let content = attempt_file_read("/etc/pve/datacenter.cfg"); - content - .and_then(|content| lookup_datacenter_config_key(&content, "mail_from")) - .unwrap_or_else(|| String::from("root")) - } - - fn http_proxy_config(&self) -> Option<String> { - let content = attempt_file_read("/etc/pve/datacenter.cfg"); - content.and_then(|content| lookup_datacenter_config_key(&content, "http_proxy")) - } -} - -#[cfg(test)] -mod tests { - use super::*; - - const USER_CONFIG: &str = " -user:root@pam:1:0:::r...@example.com::: -user:test@pve:1:0:::t...@example.com::: -user:no-mail@pve:1:0:::::: - "; - - #[test] - fn test_parse_mail() { - assert_eq!( - lookup_mail_address(USER_CONFIG, "root@pam"), - Some("r...@example.com".to_string()) - ); - assert_eq!( - lookup_mail_address(USER_CONFIG, "test@pve"), - Some("t...@example.com".to_string()) - ); - assert_eq!(lookup_mail_address(USER_CONFIG, "no-mail@pve"), None); - } - - const DC_CONFIG: &str = " -email_from: u...@example.com -http_proxy: http://localhost:1234 -keyboard: en-us -"; - #[test] - fn test_parse_dc_config() { - assert_eq!( - lookup_datacenter_config_key(DC_CONFIG, "email_from"), - Some("u...@example.com".to_string()) - ); - assert_eq!( - lookup_datacenter_config_key(DC_CONFIG, "http_proxy"), - Some("http://localhost:1234".to_string()) - ); - assert_eq!(lookup_datacenter_config_key(DC_CONFIG, "foo"), None); - } -} - -static CONTEXT: PVEContext = PVEContext; - -pub fn init() { - proxmox_notify::context::set_context(&CONTEXT) -} -- 2.39.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel