package slurm import "net/http" // TokenAuthTransport implements http.RoundTripper and injects // X-SLURM-USER-NAME and X-SLURM-USER-TOKEN headers into every request. type TokenAuthTransport struct { UserName string Token string // Base is the underlying RoundTripper. If nil, http.DefaultTransport is used. Base http.RoundTripper } // RoundTrip executes a single HTTP request, adding Slurm authentication headers. func (t *TokenAuthTransport) RoundTrip(req *http.Request) (*http.Response, error) { req2 := cloneRequest(req) req2.Header.Set("X-SLURM-USER-NAME", t.UserName) req2.Header.Set("X-SLURM-USER-TOKEN", t.Token) return t.transport().RoundTrip(req2) } // Client returns a new http.Client that uses this TokenAuthTransport. func (t *TokenAuthTransport) Client() *http.Client { return &http.Client{Transport: t} } func (t *TokenAuthTransport) transport() http.RoundTripper { if t.Base != nil { return t.Base } return http.DefaultTransport } // cloneRequest creates a shallow copy of the request with a deep copy of the headers. func cloneRequest(req *http.Request) *http.Request { r := req.Clone(req.Context()) return r }