[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