all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH proxmox-perl-rs] notify: rename PVE::RS::Notify to Proxmox::RS::Notify
@ 2023-07-24 11:26 Lukas Wagner
  2023-07-24 11:26 ` [pve-devel] [PATCH cluster] notify: use renamed Proxmox::RS::Notify Lukas Wagner
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Lukas Wagner @ 2023-07-24 11:26 UTC (permalink / raw)
  To: pve-devel; +Cc: Lukas Wagner, Wolfgang Bumiller

Also splitting PVE-specific context into its own file.

Suggested-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
---
 common/pkg/Makefile              |   1 +
 common/src/mod.rs                |   1 +
 {pve-rs => common}/src/notify.rs | 123 +------------------------------
 pve-rs/src/lib.rs                |   6 +-
 pve-rs/src/notify_context.rs     | 117 +++++++++++++++++++++++++++++
 5 files changed, 124 insertions(+), 124 deletions(-)
 rename {pve-rs => common}/src/notify.rs (79%)
 create mode 100644 pve-rs/src/notify_context.rs

diff --git a/common/pkg/Makefile b/common/pkg/Makefile
index 7232f0c..7bf669f 100644
--- a/common/pkg/Makefile
+++ b/common/pkg/Makefile
@@ -25,6 +25,7 @@ Proxmox/RS/CalendarEvent.pm:
 	$(PERLMOD_GENPACKAGE) \
 	  Proxmox::RS::APT::Repositories \
 	  Proxmox::RS::CalendarEvent \
+	  Proxmox::RS::Notify \
 	  Proxmox::RS::Subscription
 
 all: Proxmox/RS/CalendarEvent.pm
diff --git a/common/src/mod.rs b/common/src/mod.rs
index 6c86ac0..c3574f4 100644
--- a/common/src/mod.rs
+++ b/common/src/mod.rs
@@ -1,4 +1,5 @@
 pub mod apt;
 mod calendar_event;
 pub mod logger;
+pub mod notify;
 mod subscription;
diff --git a/pve-rs/src/notify.rs b/common/src/notify.rs
similarity index 79%
rename from pve-rs/src/notify.rs
rename to common/src/notify.rs
index f6d70d0..c8ca533 100644
--- a/pve-rs/src/notify.rs
+++ b/common/src/notify.rs
@@ -1,123 +1,4 @@
-use std::path::Path;
-
-use log;
-
-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 crate::notify::{lookup_datacenter_config_key, lookup_mail_address};
-
-    const USER_CONFIG: &str = "
-user:root@pam:1:0:::root@example.com:::
-user:test@pve:1:0:::test@example.com:::
-user:no-mail@pve:1:0::::::
-    ";
-
-    #[test]
-    fn test_parse_mail() {
-        assert_eq!(
-            lookup_mail_address(USER_CONFIG, "root@pam"),
-            Some("root@example.com".to_string())
-        );
-        assert_eq!(
-            lookup_mail_address(USER_CONFIG, "test@pve"),
-            Some("test@example.com".to_string())
-        );
-        assert_eq!(lookup_mail_address(USER_CONFIG, "no-mail@pve"), None);
-    }
-
-    const DC_CONFIG: &str = "
-email_from: user@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("user@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)
-}
-
-#[perlmod::package(name = "PVE::RS::Notify")]
+#[perlmod::package(name = "Proxmox::RS::Notify")]
 mod export {
     use anyhow::{bail, Error};
     use perlmod::Value;
@@ -141,7 +22,7 @@ mod export {
         config: Mutex<Config>,
     }
 
-    perlmod::declare_magic!(Box<NotificationConfig> : &NotificationConfig as "PVE::RS::Notify");
+    perlmod::declare_magic!(Box<NotificationConfig> : &NotificationConfig as "Proxmox::RS::Notify");
 
     /// Support `dclone` so this can be put into the `ccache` of `PVE::Cluster`.
     #[export(name = "STORABLE_freeze", raw_return)]
diff --git a/pve-rs/src/lib.rs b/pve-rs/src/lib.rs
index 49483d7..d1915c9 100644
--- a/pve-rs/src/lib.rs
+++ b/pve-rs/src/lib.rs
@@ -4,18 +4,18 @@
 pub mod common;
 
 pub mod apt;
-pub mod notify;
+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};
+    use crate::{common, notify_context};
 
     #[export]
     pub fn init() {
         common::logger::init("PVE_LOG", "info");
-        notify::init();
+        notify_context::init();
     }
 }
diff --git a/pve-rs/src/notify_context.rs b/pve-rs/src/notify_context.rs
new file mode 100644
index 0000000..48623fd
--- /dev/null
+++ b/pve-rs/src/notify_context.rs
@@ -0,0 +1,117 @@
+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:::root@example.com:::
+user:test@pve:1:0:::test@example.com:::
+user:no-mail@pve:1:0::::::
+    ";
+
+    #[test]
+    fn test_parse_mail() {
+        assert_eq!(
+            lookup_mail_address(USER_CONFIG, "root@pam"),
+            Some("root@example.com".to_string())
+        );
+        assert_eq!(
+            lookup_mail_address(USER_CONFIG, "test@pve"),
+            Some("test@example.com".to_string())
+        );
+        assert_eq!(lookup_mail_address(USER_CONFIG, "no-mail@pve"), None);
+    }
+
+    const DC_CONFIG: &str = "
+email_from: user@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("user@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





^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2023-07-26  9:55 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-24 11:26 [pve-devel] [PATCH proxmox-perl-rs] notify: rename PVE::RS::Notify to Proxmox::RS::Notify Lukas Wagner
2023-07-24 11:26 ` [pve-devel] [PATCH cluster] notify: use renamed Proxmox::RS::Notify Lukas Wagner
2023-07-24 13:02   ` [pve-devel] partially-applied: " Wolfgang Bumiller
2023-07-24 11:26 ` [pve-devel] [PATCH manager] vzdump: use <name> as a convention for virtual endpoints/groups Lukas Wagner
2023-07-26  9:55   ` Lukas Wagner
2023-07-24 12:40 ` [pve-devel] partially-applied: [PATCH proxmox-perl-rs] notify: rename PVE::RS::Notify to Proxmox::RS::Notify Wolfgang Bumiller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal