all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Lukas Wagner <l.wagner@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH proxmox 07/19] notify: api: add get_targets
Date: Tue,  9 Apr 2024 15:25:43 +0200	[thread overview]
Message-ID: <20240409132555.364926-8-l.wagner@proxmox.com> (raw)
In-Reply-To: <20240409132555.364926-1-l.wagner@proxmox.com>

This method allows us to get a list of all notification targets.

Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
---
 proxmox-notify/src/api/mod.rs | 75 +++++++++++++++++++++++++++++++++++
 1 file changed, 75 insertions(+)

diff --git a/proxmox-notify/src/api/mod.rs b/proxmox-notify/src/api/mod.rs
index a2cf29e..9a4ce8b 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,80 @@ 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
+    disable: Option<bool>,
+    /// Comment
+    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




  parent reply	other threads:[~2024-04-09 13:26 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-09 13:25 [pve-devel] [PATCH many 00/19] notifications: move template strings to template files; PBS preparations Lukas Wagner
2024-04-09 13:25 ` [pve-devel] [PATCH proxmox 01/19] notify: switch to file-based templating system Lukas Wagner
2024-04-19  8:14   ` Fiona Ebner
2024-04-19  8:45     ` Lukas Wagner
2024-04-19  8:57       ` Fiona Ebner
2024-04-19  9:31         ` Lukas Wagner
2024-04-09 13:25 ` [pve-devel] [PATCH proxmox 02/19] notify: make api methods take config struct ownership Lukas Wagner
2024-04-09 13:25 ` [pve-devel] [PATCH proxmox 03/19] notify: convert Option<Vec<T>> -> Vec<T> in config structs Lukas Wagner
2024-04-09 13:25 ` [pve-devel] [PATCH proxmox 04/19] notify: don't make tests require pve-context Lukas Wagner
2024-04-09 13:25 ` [pve-devel] [PATCH proxmox 05/19] notify: make the `mail-forwarder` feature depend on proxmox-sys Lukas Wagner
2024-04-19  8:19   ` Fiona Ebner
2024-04-09 13:25 ` [pve-devel] [PATCH proxmox 06/19] notify: give each notification a unique ID Lukas Wagner
2024-04-09 13:25 ` Lukas Wagner [this message]
2024-04-19  8:34   ` [pve-devel] [PATCH proxmox 07/19] notify: api: add get_targets Fiona Ebner
2024-04-19 12:54     ` Lukas Wagner
2024-04-19  8:37   ` Fiona Ebner
2024-04-09 13:25 ` [pve-devel] [PATCH proxmox 08/19] notify: derive `api` for Deleteable*Property Lukas Wagner
2024-04-09 13:25 ` [pve-devel] [PATCH proxmox 09/19] notify: derive Deserialize/Serialize for Notification struct Lukas Wagner
2024-04-19  8:45   ` Fiona Ebner
2024-04-19 12:46     ` Lukas Wagner
2024-04-09 13:25 ` [pve-devel] [PATCH proxmox 10/19] notify: pbs context: include nodename in default sendmail author Lukas Wagner
2024-04-09 13:25 ` [pve-devel] [PATCH proxmox 11/19] notify: renderer: add relative-percentage helper from PBS Lukas Wagner
2024-04-09 13:25 ` [pve-devel] [PATCH proxmox-perl-rs 12/19] notify: use file based notification templates Lukas Wagner
2024-04-09 13:25 ` [pve-devel] [PATCH proxmox-perl-rs 13/19] notify: don't pass config structs by reference Lukas Wagner
2024-04-09 13:25 ` [pve-devel] [PATCH proxmox-perl-rs 14/19] notify: adapt to Option<Vec<T>> to Vec<T> changes in proxmox_notify Lukas Wagner
2024-04-09 13:25 ` [pve-devel] [PATCH cluster 15/19] notify: use named template instead of passing template strings Lukas Wagner
2024-04-19  9:29   ` Fiona Ebner
2024-04-09 13:25 ` [pve-devel] [PATCH pve-ha-manager 16/19] env: notify: use named templates " Lukas Wagner
2024-04-09 13:25 ` [pve-devel] [PATCH manager 17/19] gitignore: ignore any test artifacts Lukas Wagner
2024-04-19  9:46   ` Fiona Ebner
2024-04-09 13:25 ` [pve-devel] [PATCH manager 18/19] tests: remove vzdump_notification test Lukas Wagner
2024-04-09 13:25 ` [pve-devel] [PATCH manager 19/19] notifications: use named templates instead of in-code templates Lukas Wagner
2024-04-19  9:59   ` Fiona Ebner
2024-04-19 10:42     ` Lukas Wagner
2024-04-19 10:09 ` [pve-devel] [PATCH many 00/19] notifications: move template strings to template files; PBS preparations Fiona Ebner
2024-04-19 11:22   ` Fabian Grünbichler
2024-04-19 11:29     ` Lukas Wagner
2024-04-19 14:08   ` Fiona Ebner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240409132555.364926-8-l.wagner@proxmox.com \
    --to=l.wagner@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal