From 197d1defbf8262c22396e061791cf7c4b8559e9b Mon Sep 17 00:00:00 2001 From: Antonio Gamez Diaz Date: Wed, 9 Aug 2023 11:40:57 +0200 Subject: [PATCH] Add required changes after merge Signed-off-by: Antonio Gamez Diaz --- pkg/registry/client.go | 60 +++++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/pkg/registry/client.go b/pkg/registry/client.go index 5c0110e32a0..95dc6d6313f 100644 --- a/pkg/registry/client.go +++ b/pkg/registry/client.go @@ -87,36 +87,40 @@ func NewClient(options ...ClientOption) (*Client, error) { } client.authorizer = authClient } - client.resolver = func(ref registry.Reference) (remotes.Resolver, error) { - headers := http.Header{} - headers.Set("User-Agent", version.GetUserAgent()) - dockerClient, ok := client.authorizer.(*dockerauth.Client) - if ok { - username, password, err := dockerClient.Credential(ref.Registry) - if err != nil { - return nil, errors.New("unable to retrieve credentials") - } - // A blank returned username and password value is a bearer token - if username == "" && password != "" { - headers.Set("Authorization", fmt.Sprintf("Bearer %s", password)) - } else { - headers.Set("Authorization", fmt.Sprintf("Basic %s", basicAuth(username, password))) + + if client.resolver == nil { + client.resolver = func(ref registry.Reference) (remotes.Resolver, error) { + headers := http.Header{} + headers.Set("User-Agent", version.GetUserAgent()) + dockerClient, ok := client.authorizer.(*dockerauth.Client) + if ok { + username, password, err := dockerClient.Credential(ref.Registry) + if err != nil { + return nil, errors.New("unable to retrieve credentials") + } + // A blank returned username and password value is a bearer token + if username == "" && password != "" { + headers.Set("Authorization", fmt.Sprintf("Bearer %s", password)) + } else { + headers.Set("Authorization", fmt.Sprintf("Basic %s", basicAuth(username, password))) + } } - } - opts := []auth.ResolverOption{auth.WithResolverHeaders(headers)} - if client.httpClient != nil { - opts = append(opts, auth.WithResolverClient(client.httpClient)) - } - if client.plainHTTP { - opts = append(opts, auth.WithResolverPlainHTTP()) - } - resolver, err := client.authorizer.ResolverWithOpts(opts...) - if err != nil { - return nil, err + opts := []auth.ResolverOption{auth.WithResolverHeaders(headers)} + if client.httpClient != nil { + opts = append(opts, auth.WithResolverClient(client.httpClient)) + } + if client.plainHTTP { + opts = append(opts, auth.WithResolverPlainHTTP()) + } + resolver, err := client.authorizer.ResolverWithOpts(opts...) + if err != nil { + return nil, err + } + return resolver, nil } - return resolver, nil } + // allocate a cache if option is set var cache registryauth.Cache if client.enableCache { @@ -202,7 +206,9 @@ func ClientOptPlainHTTP() ClientOption { // ClientOptResolver returns a function that sets the resolver setting on a client options set func ClientOptResolver(resolver remotes.Resolver) ClientOption { return func(client *Client) { - client.resolver = resolver + client.resolver = func(ref registry.Reference) (remotes.Resolver, error) { + return resolver, nil + } } }