Merge pull request #10557 from smarterclayton/override_auth

The bearer token client transport should not override Authorization
This commit is contained in:
Yu-Ju Hong 2015-07-06 15:04:45 -07:00
commit ad88cf9a99

View File

@ -48,11 +48,16 @@ type basicAuthRoundTripper struct {
rt http.RoundTripper rt http.RoundTripper
} }
// NewBasicAuthRoundTripper will apply a BASIC auth authorization header to a request unless it has
// already been set.
func NewBasicAuthRoundTripper(username, password string, rt http.RoundTripper) http.RoundTripper { func NewBasicAuthRoundTripper(username, password string, rt http.RoundTripper) http.RoundTripper {
return &basicAuthRoundTripper{username, password, rt} return &basicAuthRoundTripper{username, password, rt}
} }
func (rt *basicAuthRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { func (rt *basicAuthRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
if len(req.Header.Get("Authorization")) != 0 {
return rt.rt.RoundTrip(req)
}
req = cloneRequest(req) req = cloneRequest(req)
req.SetBasicAuth(rt.username, rt.password) req.SetBasicAuth(rt.username, rt.password)
return rt.rt.RoundTrip(req) return rt.rt.RoundTrip(req)
@ -63,11 +68,17 @@ type bearerAuthRoundTripper struct {
rt http.RoundTripper rt http.RoundTripper
} }
// NewBearerAuthRoundTripper adds the provided bearer token to a request unless the authorization
// header has already been set.
func NewBearerAuthRoundTripper(bearer string, rt http.RoundTripper) http.RoundTripper { func NewBearerAuthRoundTripper(bearer string, rt http.RoundTripper) http.RoundTripper {
return &bearerAuthRoundTripper{bearer, rt} return &bearerAuthRoundTripper{bearer, rt}
} }
func (rt *bearerAuthRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { func (rt *bearerAuthRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
if len(req.Header.Get("Authorization")) != 0 {
return rt.rt.RoundTrip(req)
}
req = cloneRequest(req) req = cloneRequest(req)
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", rt.bearer)) req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", rt.bearer))
return rt.rt.RoundTrip(req) return rt.rt.RoundTrip(req)