notify: gotify: add proxy support

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>
This commit is contained in:
Lukas Wagner 2023-07-20 16:31:47 +02:00 committed by Wolfgang Bumiller
parent da2e7b8da9
commit d44ce2c70d
2 changed files with 17 additions and 6 deletions

View 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();

View 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,