1
0
Fork 0

Enable basic auth only if username/password is set

Empty password leads to an authorization error, which isn't ideal.

Also log the response in case its an error, I think this would be handy
in case the upstream starts misbehaving. By default won't add to log
noise.

Example:

```
curl -s -u ':' -d "test" ntfy.sh/test  | jq .
{
  "code": 40101,
  "http": 401,
  "error": "unauthorized",
  "link": "https://ntfy.sh/docs/publish/#authentication"
}
```
This commit is contained in:
Jaseem Abid 2023-02-10 19:30:03 +00:00
parent c658a0fd33
commit cc35ddbe0f

16
main.go
View file

@ -3,13 +3,14 @@ package main
import (
"encoding/json"
"fmt"
"github.com/prometheus/alertmanager/template"
"github.com/prometheus/common/model"
"log"
"net/http"
"os"
"strings"
"github.com/prometheus/alertmanager/template"
"github.com/prometheus/common/model"
"golang.org/x/exp/maps"
)
@ -57,16 +58,23 @@ func WebhookHandler(w http.ResponseWriter, r *http.Request) {
// Tags
req.Header.Set("Tags", strings.Join(maps.Values(alert.Labels), ","))
req.SetBasicAuth(os.Getenv("NTFY_USER"), os.Getenv("NTFY_PASS"))
username, password := os.Getenv("NTFY_USER"), os.Getenv("NTFY_PASS")
if username != "" && password != "" {
req.SetBasicAuth(username, password)
}
log.Printf("Sending request: %v\n", req)
if _, err := http.DefaultClient.Do(req); err != nil {
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Printf("Sending to %s failed: %s\n", req.RemoteAddr, err)
w.WriteHeader(http.StatusBadRequest)
return
}
if resp.StatusCode != 200 {
log.Printf("Failed to send notification: %v\n", resp)
}
}
w.WriteHeader(http.StatusOK)