alertmanager: Support basic auth
This commit is contained in:
parent
c919ec9af2
commit
1e44ba5694
4 changed files with 34 additions and 1 deletions
|
@ -70,6 +70,9 @@ alertmanager {
|
||||||
# the request will be proxied through ntfy-alertmanager. Therefore ntfy-alertmanager
|
# the request will be proxied through ntfy-alertmanager. Therefore ntfy-alertmanager
|
||||||
# needs to be exposed to external network requests and base-url has to be set.
|
# needs to be exposed to external network requests and base-url has to be set.
|
||||||
silence-duration 24h
|
silence-duration 24h
|
||||||
|
# Basic authentication (https://prometheus.io/docs/alerting/latest/https/)
|
||||||
|
user user
|
||||||
|
password pass
|
||||||
}
|
}
|
||||||
|
|
||||||
# When the alert-mode is set to single, ntfy-alertmanager will cache each single alert
|
# When the alert-mode is set to single, ntfy-alertmanager will cache each single alert
|
||||||
|
|
16
config.go
16
config.go
|
@ -50,6 +50,8 @@ type cacheConfig struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type alertmanagerConfig struct {
|
type alertmanagerConfig struct {
|
||||||
|
User string
|
||||||
|
Password string
|
||||||
SilenceDuration time.Duration
|
SilenceDuration time.Duration
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -246,6 +248,20 @@ func readConfig(path string) (*config, error) {
|
||||||
|
|
||||||
config.am.SilenceDuration = duration
|
config.am.SilenceDuration = duration
|
||||||
}
|
}
|
||||||
|
|
||||||
|
d = amDir.Children.Get("user")
|
||||||
|
if d != nil {
|
||||||
|
if err := d.ParseParams(&config.am.User); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
d = amDir.Children.Get("password")
|
||||||
|
if d != nil {
|
||||||
|
if err := d.ParseParams(&config.am.Password); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return config, nil
|
return config, nil
|
||||||
|
|
|
@ -55,6 +55,9 @@ alertmanager {
|
||||||
# the request will be proxied through ntfy-alertmanager. Therefore ntfy-alertmanager
|
# the request will be proxied through ntfy-alertmanager. Therefore ntfy-alertmanager
|
||||||
# needs to be exposed to external network requests and base-url has to be set.
|
# needs to be exposed to external network requests and base-url has to be set.
|
||||||
silence-duration 24h
|
silence-duration 24h
|
||||||
|
# Basic authentication (https://prometheus.io/docs/alerting/latest/https/)
|
||||||
|
user user
|
||||||
|
password pass
|
||||||
}
|
}
|
||||||
|
|
||||||
# When the alert-mode is set to single, ntfy-alertmanager will cache each single alert
|
# When the alert-mode is set to single, ntfy-alertmanager will cache each single alert
|
||||||
|
@ -83,7 +86,11 @@ cache {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
cache: cacheConfig{CleanupInterval: time.Hour, Duration: 48 * time.Hour},
|
cache: cacheConfig{CleanupInterval: time.Hour, Duration: 48 * time.Hour},
|
||||||
am: alertmanagerConfig{SilenceDuration: time.Hour * 24},
|
am: alertmanagerConfig{
|
||||||
|
SilenceDuration: time.Hour * 24,
|
||||||
|
User: "user",
|
||||||
|
Password: "pass",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
configPath := filepath.Join(t.TempDir(), "config")
|
configPath := filepath.Join(t.TempDir(), "config")
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
|
@ -93,6 +94,12 @@ func (rcv *receiver) handleSilences(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Basic auth
|
||||||
|
if rcv.cfg.am.User != "" && rcv.cfg.am.Password != "" {
|
||||||
|
auth := base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("%s:%s", rcv.cfg.am.User, rcv.cfg.am.Password)))
|
||||||
|
req.Header.Set("Authorization", fmt.Sprintf("Basic %s", auth))
|
||||||
|
}
|
||||||
|
|
||||||
req.Header.Add("Content-Type", "application/json")
|
req.Header.Add("Content-Type", "application/json")
|
||||||
resp, err := client.Do(req)
|
resp, err := client.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in a new issue