diff --git a/internal/mapper/headers.go b/internal/mapper/round_tripper.go similarity index 51% rename from internal/mapper/headers.go rename to internal/mapper/round_tripper.go index ace810bdc..6cd8c1f82 100644 --- a/internal/mapper/headers.go +++ b/internal/mapper/round_tripper.go @@ -20,3 +20,22 @@ func (hrt *headersRoundTripper) RoundTrip(r *http.Request) (*http.Response, erro } return hrt.inner.RoundTrip(r) } + +func SetAuth(inner http.RoundTripper, username string, password string) http.RoundTripper { + return &authRoundTripper{ + inner: inner, + Username: username, + Password: password, + } +} + +type authRoundTripper struct { + inner http.RoundTripper + Username string + Password string +} + +func (art *authRoundTripper) RoundTrip(r *http.Request) (*http.Response, error) { + r.SetBasicAuth(art.Username, art.Password) + return art.inner.RoundTrip(r) +} diff --git a/internal/mapper/v017/api.go b/internal/mapper/v017/api.go index b616e0405..59776c19b 100644 --- a/internal/mapper/v017/api.go +++ b/internal/mapper/v017/api.go @@ -18,12 +18,21 @@ import ( func newClient(uri string, headers map[string]string, httpTransport http.RoundTripper) *client.Alertmanager { u, _ := url.Parse(uri) + transport := httptransport.New(u.Host, path.Join(u.Path, "/api/v2"), []string{u.Scheme}) + if httpTransport != nil { transport.Transport = mapper.SetHeaders(httpTransport, headers) } else { transport.Transport = mapper.SetHeaders(transport.Transport, headers) } + + if u.User.Username() != "" { + username := u.User.Username() + password, _ := u.User.Password() + transport.Transport = mapper.SetAuth(transport.Transport, username, password) + } + c := client.New(transport, nil) return c }