Skip to content

Commit

Permalink
Update docker resolver to authorize redirects
Browse files Browse the repository at this point in the history
Allows redirects to be authorized if authorization is provided
for the redirected to host. The authorization will always go
to the redirect and never to the referrer.

Signed-off-by: Derek McGowan <derek@mcg.dev>
(cherry picked from commit b1d4140)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
  • Loading branch information
dmcgowan authored and thaJeztah committed Jul 20, 2021
1 parent a368d28 commit 30d0c91
Showing 1 changed file with 15 additions and 1 deletion.
16 changes: 15 additions & 1 deletion remotes/docker/resolver.go
Original file line number Diff line number Diff line change
Expand Up @@ -548,7 +548,21 @@ func (r *request) do(ctx context.Context) (*http.Response, error) {
if err := r.authorize(ctx, req); err != nil {
return nil, errors.Wrap(err, "failed to authorize")
}
resp, err := ctxhttp.Do(ctx, r.host.Client, req)

var client = &http.Client{}
if r.host.Client != nil {
*client = *r.host.Client
}
if client.CheckRedirect == nil {
client.CheckRedirect = func(req *http.Request, via []*http.Request) error {
if len(via) >= 10 {
return errors.New("stopped after 10 redirects")
}
return errors.Wrap(r.authorize(ctx, req), "failed to authorize redirect")
}
}

resp, err := ctxhttp.Do(ctx, client, req)
if err != nil {
return nil, errors.Wrap(err, "failed to do request")
}
Expand Down

0 comments on commit 30d0c91

Please sign in to comment.