~xenrox/ntfy-alertmanager

41fb0f7766bf02d1914904b2c2239044d5172a61 — Thorben Günther 1 year, 2 months ago 37714a4
ntfy: Support authentication via access-tokens

Implements: https://todo.xenrox.net/~xenrox/ntfy-alertmanager/14
3 files changed, 23 insertions(+), 5 deletions(-)

M README.md
M config.go
M main.go
M README.md => README.md +4 -1
@@ 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 {

M config.go => config.go +16 -3
@@ 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 {

M main.go => main.go +3 -1
@@ 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)