[pve-devel] [PATCH v4 proxmox 20/69] notify: gotify: add proxy support

Lukas Wagner l.wagner at proxmox.com
Thu Jul 20 16:31:47 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 4643f987..72e07d5b 100644
--- a/proxmox-notify/src/context.rs
+++ b/proxmox-notify/src/context.rs
@@ -5,6 +5,7 @@ pub trait Context: Send + Sync + Debug {
     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: OnceCell<&'static dyn Context> = OnceCell::new();
diff --git a/proxmox-notify/src/endpoints/gotify.rs b/proxmox-notify/src/endpoints/gotify.rs
index 15fb82cf..c1f122dc 100644
--- a/proxmox-notify/src/endpoints/gotify.rs
+++ b/proxmox-notify/src/endpoints/gotify.rs
@@ -8,8 +8,9 @@ use proxmox_schema::api_types::COMMENT_SCHEMA;
 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 {
@@ -84,11 +85,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(
@@ -121,6 +117,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