[pve-devel] [PATCH v3 proxmox 18/66] notify: gotify: add proxy support

Lukas Wagner l.wagner at proxmox.com
Mon Jul 17 17:00:03 CEST 2023


The proxy configuration will be read from datacenter.cfg via
a new method of the `Context` trait.

Signed-off-by: Lukas Wagner <l.wagner at proxmox.com>
---
 proxmox-notify/src/context.rs          |  1 +
 proxmox-notify/src/endpoints/gotify.rs | 22 ++++++++++++++++------
 2 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/proxmox-notify/src/context.rs b/proxmox-notify/src/context.rs
index 8b55a2d0..418d3d56 100644
--- a/proxmox-notify/src/context.rs
+++ b/proxmox-notify/src/context.rs
@@ -4,6 +4,7 @@ pub trait Context: Send + Sync {
     fn lookup_email_for_user(&self, user: &str) -> Option<String>;
     fn default_sendmail_author(&self) -> String;
     fn default_sendmail_from(&self) -> String;
+    fn http_proxy_config(&self) -> Option<String>;
 }
 
 static CONTEXT: Mutex<Option<&'static dyn Context>> = Mutex::new(None);
diff --git a/proxmox-notify/src/endpoints/gotify.rs b/proxmox-notify/src/endpoints/gotify.rs
index b278b90d..eae22f42 100644
--- a/proxmox-notify/src/endpoints/gotify.rs
+++ b/proxmox-notify/src/endpoints/gotify.rs
@@ -7,8 +7,9 @@ use crate::{renderer, Endpoint, Error, Notification, Severity};
 use serde::{Deserialize, Serialize};
 use serde_json::json;
 
+use crate::context::context;
 use proxmox_http::client::sync::Client;
-use proxmox_http::{HttpClient, HttpOptions};
+use proxmox_http::{HttpClient, HttpOptions, ProxyConfig};
 use proxmox_schema::{api, Updater};
 
 fn severity_to_priority(level: Severity) -> u32 {
@@ -83,11 +84,6 @@ pub enum DeleteableGotifyProperty {
 
 impl Endpoint for GotifyEndpoint {
     fn send(&self, notification: &Notification) -> Result<(), Error> {
-        // TODO: What about proxy configuration?
-        let client = Client::new(HttpOptions::default());
-
-        let uri = format!("{}/message", self.config.server);
-
         let properties = notification.properties.as_ref();
 
         let title = renderer::render_template(
@@ -120,6 +116,20 @@ impl Endpoint for GotifyEndpoint {
             format!("Bearer {}", self.private_config.token),
         )]);
 
+        let proxy_config = context()
+            .http_proxy_config()
+            .map(|url| ProxyConfig::parse_proxy_url(&url))
+            .transpose()
+            .map_err(|err| Error::NotifyFailed(self.name().to_string(), err.into()))?;
+
+        let options = HttpOptions {
+            proxy_config,
+            ..Default::default()
+        };
+
+        let client = Client::new(options);
+        let uri = format!("{}/message", self.config.server);
+
         client
             .post(
                 &uri,
-- 
2.39.2






More information about the pve-devel mailing list