-
Notifications
You must be signed in to change notification settings - Fork 1k
Closed
Description
OAuth2 client creation currently doesn't faithfully reuse the client passed into the context.
Instead, it simply takes the Transport of the context client and puts it into a DefaultClient. This causes config settings such as timeout to be set to Default and we know default timeouts are bad #24138. This may end up to be a gotcha for anyone who sends in a context client with timeout set assuming that the timeout will be copied to the new client.
Propose to update the NewClient code as follows:
func NewClient(ctx context.Context, src TokenSource) *http.Client {
if src == nil {
return internal.ContextClient(ctx)
}
+ cc := internal.ContextClient(ctx)
return &http.Client{
Transport: &Transport{
- Base: internal.ContextClient(ctx).Transport,
+ Base: cc.Transport,
Source: ReuseTokenSource(nil, src),
},
+ CheckRedirect: cc.CheckRedirect,
+ Jar: cc.Jar,
+ Timeout: cc.Timeout,
}
}
References:
#321
amuttsch, tnerolftnerolf, arkadiont, kenforthewin, mszostok and 11 morefdcds
Metadata
Metadata
Assignees
Labels
No labels