diff --git a/proxmox-notify/src/endpoints/gotify.rs b/proxmox-notify/src/endpoints/gotify.rs index fae036cd..3e977131 100644 --- a/proxmox-notify/src/endpoints/gotify.rs +++ b/proxmox-notify/src/endpoints/gotify.rs @@ -1,4 +1,5 @@ use std::collections::HashMap; +use std::time::Duration; use serde::{Deserialize, Serialize}; use serde_json::json; @@ -13,6 +14,8 @@ use crate::renderer::TemplateType; use crate::schema::ENTITY_NAME_SCHEMA; use crate::{renderer, Content, Endpoint, Error, Notification, Origin, Severity}; +const HTTP_TIMEOUT: Duration = Duration::from_secs(10); + fn severity_to_priority(level: Severity) -> u32 { match level { Severity::Info => 1, @@ -146,7 +149,7 @@ impl Endpoint for GotifyEndpoint { ..Default::default() }; - let client = Client::new(options); + let client = Client::new_with_timeout(options, HTTP_TIMEOUT); let uri = format!("{}/message", self.config.server); client diff --git a/proxmox-notify/src/endpoints/webhook.rs b/proxmox-notify/src/endpoints/webhook.rs index 4ad9cb2f..34dbac54 100644 --- a/proxmox-notify/src/endpoints/webhook.rs +++ b/proxmox-notify/src/endpoints/webhook.rs @@ -7,6 +7,8 @@ //! Secrets are kept in a private configuration file, accessible only by root, and are not retrievable via the API. //! Within templates, secrets can be referenced using `{{ secrets. }}`. //! Additionally, we take measures to prevent secrets from appearing in logs or error messages. +use std::time::Duration; + use handlebars::{ Context as HandlebarsContext, Handlebars, Helper, HelperResult, Output, RenderContext, RenderError as HandlebarsRenderError, @@ -30,6 +32,8 @@ use crate::{renderer, Content, Endpoint, Error, Notification, Origin}; /// This will be used as a section type in the public/private configuration file. pub(crate) const WEBHOOK_TYPENAME: &str = "webhook"; +const HTTP_TIMEOUT: Duration = Duration::from_secs(10); + #[api] #[derive(Serialize, Deserialize, Clone, Copy, Default)] #[serde(rename_all = "kebab-case")] @@ -270,7 +274,7 @@ impl WebhookEndpoint { ..Default::default() }; - Ok(Client::new(options)) + Ok(Client::new_with_timeout(options, HTTP_TIMEOUT)) } fn build_request(&self, notification: &Notification) -> Result, Error> {