[pve-devel] [PATCH proxmox v2 08/20] notify: api: add get_targets
Lukas Wagner
l.wagner at proxmox.com
Fri Apr 19 16:17:11 CEST 2024
This method allows us to get a list of all notification targets.
Signed-off-by: Lukas Wagner <l.wagner at proxmox.com>
Reviewed-by: Fiona Ebner <f.ebner at proxmox.com>
---
proxmox-notify/src/api/mod.rs | 77 +++++++++++++++++++++++++++++++++++
1 file changed, 77 insertions(+)
diff --git a/proxmox-notify/src/api/mod.rs b/proxmox-notify/src/api/mod.rs
index a2cf29e..a7f6261 100644
--- a/proxmox-notify/src/api/mod.rs
+++ b/proxmox-notify/src/api/mod.rs
@@ -3,6 +3,7 @@ use std::collections::HashSet;
use serde::{Deserialize, Serialize};
use proxmox_http_error::HttpError;
+use proxmox_schema::api;
use crate::{Config, Origin};
@@ -39,6 +40,82 @@ macro_rules! http_bail {
pub use http_bail;
pub use http_err;
+#[api]
+#[derive(Clone, Debug, Copy, Serialize, Deserialize, PartialEq, Eq, PartialOrd)]
+#[serde(rename_all = "kebab-case")]
+/// Type of the endpoint.
+pub enum EndpointType {
+ /// Sendmail endpoint
+ #[cfg(feature = "sendmail")]
+ Sendmail,
+ /// SMTP endpoint
+ #[cfg(feature = "smtp")]
+ Smtp,
+ /// Gotify endpoint
+ #[cfg(feature = "gotify")]
+ Gotify,
+}
+
+#[api]
+#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd)]
+#[serde(rename_all = "kebab-case")]
+/// Target information
+pub struct Target {
+ /// Name of the endpoint
+ name: String,
+ /// Origin of the endpoint
+ origin: Origin,
+ /// Type of the endpoint
+ #[serde(rename = "type")]
+ endpoint_type: EndpointType,
+ /// Target is disabled
+ #[serde(skip_serializing_if = "Option::is_none")]
+ disable: Option<bool>,
+ /// Comment
+ #[serde(skip_serializing_if = "Option::is_none")]
+ comment: Option<String>,
+}
+
+/// Get a list of all notification targets.
+pub fn get_targets(config: &Config) -> Result<Vec<Target>, HttpError> {
+ let mut targets = Vec::new();
+
+ #[cfg(feature = "gotify")]
+ for endpoint in gotify::get_endpoints(config)? {
+ targets.push(Target {
+ name: endpoint.name,
+ origin: endpoint.origin.unwrap_or(Origin::UserCreated),
+ endpoint_type: EndpointType::Gotify,
+ disable: endpoint.disable,
+ comment: endpoint.comment,
+ })
+ }
+
+ #[cfg(feature = "sendmail")]
+ for endpoint in sendmail::get_endpoints(config)? {
+ targets.push(Target {
+ name: endpoint.name,
+ origin: endpoint.origin.unwrap_or(Origin::UserCreated),
+ endpoint_type: EndpointType::Sendmail,
+ disable: endpoint.disable,
+ comment: endpoint.comment,
+ })
+ }
+
+ #[cfg(feature = "smtp")]
+ for endpoint in smtp::get_endpoints(config)? {
+ targets.push(Target {
+ name: endpoint.name,
+ origin: endpoint.origin.unwrap_or(Origin::UserCreated),
+ endpoint_type: EndpointType::Smtp,
+ disable: endpoint.disable,
+ comment: endpoint.comment,
+ })
+ }
+
+ Ok(targets)
+}
+
fn verify_digest(config: &Config, digest: Option<&[u8]>) -> Result<(), HttpError> {
if let Some(digest) = digest {
if config.digest != *digest {
--
2.39.2
More information about the pve-devel
mailing list