From 6abe58ba6e62e0f3517b51b9a58cfd0f8e92e7d1 Mon Sep 17 00:00:00 2001 From: CrazyMax <1951866+crazy-max@users.noreply.github.com> Date: Sun, 3 Aug 2025 14:59:26 +0200 Subject: [PATCH] notif: support token as secret for apprise --- docs/notif/apprise.md | 22 ++++++++++++---------- internal/model/notif_apprise.go | 1 + internal/notif/apprise/client.go | 9 +++++++-- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/docs/notif/apprise.md b/docs/notif/apprise.md index 51e8a0a1..bbe1eb88 100644 --- a/docs/notif/apprise.md +++ b/docs/notif/apprise.md @@ -9,6 +9,7 @@ Notifications can be sent using an apprise api instance. notif: apprise: endpoint: http://apprise:8000 + token: abc tags: - diun timeout: 10s @@ -17,15 +18,16 @@ Notifications can be sent using an apprise api instance. Docker tag {{ .Entry.Image }} which you subscribed to through {{ .Entry.Provider }} provider has been released. ``` -| Name | Default | Description | -|---------------------|-------------------------------------|------------------------------------------------------------------------------| -| `endpoint`[^1] | | Hostname and port of your apprise api instance | -| `token`[^2] | | token representing your config file (Config Key) | -| `tags` | | List of Tags in your config file you want to notify | -| `urls`[^2] | | List of [URLs](https://github.com/caronc/apprise/wiki/URLBasics) to notify | -| `timeout` | `10s` | Timeout specifies a time limit for the request to be made | -| `templateTitle` | See [below](#default-templatetitle) | [Notification template](../faq.md#notification-template) for message title | -| `templateBody` | See [below](#default-templatebody) | [Notification template](../faq.md#notification-template) for message body | +| Name | Default | Description | +|-----------------|-------------------------------------|----------------------------------------------------------------------------| +| `endpoint`[^1] | | Hostname and port of your apprise api instance | +| `token`[^2] | | token representing your config file (Config Key) | +| `tokenFile` | | Use content of secret file as application token if `token` not defined | +| `tags` | | List of Tags in your config file you want to notify | +| `urls`[^2] | | List of [URLs](https://github.com/caronc/apprise/wiki/URLBasics) to notify | +| `timeout` | `10s` | Timeout specifies a time limit for the request to be made | +| `templateTitle` | See [below](#default-templatetitle) | [Notification template](../faq.md#notification-template) for message title | +| `templateBody` | See [below](#default-templatebody) | [Notification template](../faq.md#notification-template) for message body | !!! abstract "Environment variables" * `DIUN_NOTIF_APPRISE_ENDPOINT` @@ -49,4 +51,4 @@ Notifications can be sent using an apprise api instance. ``` [^1]: Value required -[^2]: One of these 2 values is required \ No newline at end of file +[^2]: One of these 2 values is required diff --git a/internal/model/notif_apprise.go b/internal/model/notif_apprise.go index 0a5437df..de3649f1 100644 --- a/internal/model/notif_apprise.go +++ b/internal/model/notif_apprise.go @@ -10,6 +10,7 @@ import ( type NotifApprise struct { Endpoint string `yaml:"endpoint,omitempty" json:"endpoint,omitempty" validate:"required"` Token string `yaml:"token,omitempty" json:"token,omitempty" validate:"omitempty"` + TokenFile string `yaml:"tokenFile,omitempty" json:"tokenFile,omitempty" validate:"omitempty,file"` Tags []string `yaml:"tags,omitempty" json:"tags,omitempty" validate:"omitempty"` URLs []string `yaml:"urls,omitempty" json:"urls,omitempty" validate:"omitempty"` Timeout *time.Duration `yaml:"timeout,omitempty" json:"timeout,omitempty" validate:"required"` diff --git a/internal/notif/apprise/client.go b/internal/notif/apprise/client.go index 81757195..0e1952dd 100644 --- a/internal/notif/apprise/client.go +++ b/internal/notif/apprise/client.go @@ -11,6 +11,7 @@ import ( "github.com/crazy-max/diun/v4/internal/model" "github.com/crazy-max/diun/v4/internal/msg" "github.com/crazy-max/diun/v4/internal/notif/notifier" + "github.com/crazy-max/diun/v4/pkg/utl" "github.com/pkg/errors" ) @@ -75,8 +76,12 @@ func (c *Client) Send(entry model.NotifEntry) error { u.Path = path.Join(u.Path, "notify") - if c.cfg.Token != "" { - u.Path = path.Join(u.Path, c.cfg.Token) + if c.cfg.Token != "" || c.cfg.TokenFile != "" { + token, err := utl.GetSecret(c.cfg.Token, c.cfg.TokenFile) + if err != nil { + return errors.Wrap(err, "cannot retrieve token secret for Apprise notifier") + } + u.Path = path.Join(u.Path, token) } q := u.Query()