navidrome/utils/httpclient/httpclient.go

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

35 lines
929 B
Go
Raw Permalink Normal View History

// Package httpclient provides a shared http.Client factory that identifies
// Navidrome via the User-Agent header on all outgoing requests.
package httpclient
import (
"net/http"
"time"
"github.com/navidrome/navidrome/consts"
)
type uaTransport struct {
base http.RoundTripper
}
func (t *uaTransport) RoundTrip(req *http.Request) (*http.Response, error) {
if _, ok := req.Header["User-Agent"]; !ok {
req = req.Clone(req.Context())
req.Header.Set("User-Agent", consts.HTTPUserAgent)
}
return t.base.RoundTrip(req)
}
// NewTransport wraps base (or http.DefaultTransport if nil) to set the
// Navidrome User-Agent on requests that don't have one.
func NewTransport(base http.RoundTripper) http.RoundTripper {
if base == nil {
base = http.DefaultTransport
}
return &uaTransport{base: base}
}
func New(timeout time.Duration) *http.Client {
return &http.Client{Timeout: timeout, Transport: NewTransport(nil)}
}