]> git.proxmox.com Git - proxmox.git/commitdiff
notify: gotify: add proxy support
authorLukas Wagner <l.wagner@proxmox.com>
Thu, 20 Jul 2023 14:31:47 +0000 (16:31 +0200)
committerWolfgang Bumiller <w.bumiller@proxmox.com>
Mon, 24 Jul 2023 08:26:01 +0000 (10:26 +0200)
The proxy configuration will be read from datacenter.cfg via
a new method of the `Context` trait.

Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
proxmox-notify/src/context.rs
proxmox-notify/src/endpoints/gotify.rs

index 4643f98775900499eb0e34a96480ea582dd1cf2b..72e07d5b8af9514cad86b556863aec6a9cb7fbe7 100644 (file)
@@ -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();
index 15fb82cf1e0ec341773c75183b9b269fe66cebcd..c1f122dcd993da630007cf47942e7df2463a2f85 100644 (file)
@@ -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,