ntfy: Support authentication via access-tokens
Implements: https://todo.xenrox.net/~xenrox/ntfy-alertmanager/14
This commit is contained in:
parent
37714a4a64
commit
41fb0f7766
3 changed files with 23 additions and 5 deletions
|
@ -67,9 +67,12 @@ resolved {
|
|||
ntfy {
|
||||
# URL of the ntfy topic - required
|
||||
topic https://ntfy.sh/alertmanager-alerts
|
||||
# ntfy access control (https://ntfy.sh/docs/config/#access-control)
|
||||
# ntfy authentication via Basic Auth (https://docs.ntfy.sh/publish/#username-password)
|
||||
user user
|
||||
password pass
|
||||
# ntfy authentication via access tokens (https://docs.ntfy.sh/publish/#access-tokens)
|
||||
# Either access-token or a user/password combination can be used - not both.
|
||||
access-token foobar
|
||||
}
|
||||
|
||||
alertmanager {
|
||||
|
|
19
config.go
19
config.go
|
@ -1,6 +1,7 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
@ -30,9 +31,10 @@ type config struct {
|
|||
}
|
||||
|
||||
type ntfyConfig struct {
|
||||
Topic string
|
||||
User string
|
||||
Password string
|
||||
Topic string
|
||||
User string
|
||||
Password string
|
||||
AccessToken string
|
||||
}
|
||||
|
||||
type labels struct {
|
||||
|
@ -212,6 +214,17 @@ func readConfig(path string) (*config, error) {
|
|||
}
|
||||
}
|
||||
|
||||
d = ntfyDir.Children.Get("access-token")
|
||||
if d != nil {
|
||||
if err := d.ParseParams(&config.ntfy.AccessToken); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
if config.ntfy.User != "" && config.ntfy.AccessToken != "" {
|
||||
return nil, errors.New("ntfy: cannot use both an access-token and a user/password at the same time")
|
||||
}
|
||||
|
||||
cacheDir := cfg.Get("cache")
|
||||
|
||||
if cacheDir != nil {
|
||||
|
|
4
main.go
4
main.go
|
@ -244,10 +244,12 @@ func (rcv *receiver) publish(n *notification) error {
|
|||
return err
|
||||
}
|
||||
|
||||
// Basic auth
|
||||
// ntfy authentication
|
||||
if rcv.cfg.ntfy.Password != "" && rcv.cfg.ntfy.User != "" {
|
||||
auth := base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("%s:%s", rcv.cfg.ntfy.User, rcv.cfg.ntfy.Password)))
|
||||
req.Header.Set("Authorization", fmt.Sprintf("Basic %s", auth))
|
||||
} else if rcv.cfg.ntfy.AccessToken != "" {
|
||||
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", rcv.cfg.ntfy.AccessToken))
|
||||
}
|
||||
|
||||
req.Header.Set("X-Title", n.title)
|
||||
|
|
Loading…
Reference in a new issue