From cb766386995705cdd3766d876b8b97aad83616ce Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Tue, 21 Mar 2023 14:40:33 +0100 Subject: registry/search: pass User-Agent through headers Commit 3991faf4640a46412a8af000ede78fc5cba76d0a moved search into the registry package, which also made the `dockerversion` package a dependency for registry, which brings additional (indirect) dependencies, such as `pkg/parsers/kernel`, and `golang.org/x/sys/windows/registry`. Client code, such as used in docker/cli may depend on the `registry` package, but should not depend on those additional dependencies. This patch moves setting the userAgent to the API router, and instead of passing it as a separate argument, includes it into the "headers". As these headers now not only contain the `X-Meta-...` headers, the variables were renamed accordingly. Signed-off-by: Sebastiaan van Stijn --- api/server/router/image/backend.go | 2 +- api/server/router/image/image_routes.go | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) (limited to 'api') diff --git a/api/server/router/image/backend.go b/api/server/router/image/backend.go index 6dcee6f100..302b48d68e 100644 --- a/api/server/router/image/backend.go +++ b/api/server/router/image/backend.go @@ -42,5 +42,5 @@ type registryBackend interface { } type Searcher interface { - Search(ctx context.Context, searchFilters filters.Args, term string, limit int, authConfig *registry.AuthConfig, metaHeaders map[string][]string) ([]registry.SearchResult, error) + Search(ctx context.Context, searchFilters filters.Args, term string, limit int, authConfig *registry.AuthConfig, headers map[string][]string) ([]registry.SearchResult, error) } diff --git a/api/server/router/image/image_routes.go b/api/server/router/image/image_routes.go index 3140a663ab..d891b8158e 100644 --- a/api/server/router/image/image_routes.go +++ b/api/server/router/image/image_routes.go @@ -18,6 +18,7 @@ import ( "github.com/docker/docker/api/types/registry" "github.com/docker/docker/api/types/versions" "github.com/docker/docker/builder/remotecontext" + "github.com/docker/docker/dockerversion" "github.com/docker/docker/errdefs" "github.com/docker/docker/image" "github.com/docker/docker/pkg/ioutils" @@ -392,13 +393,6 @@ func (ir *imageRouter) getImagesSearch(ctx context.Context, w http.ResponseWrite return err } - var headers = map[string][]string{} - for k, v := range r.Header { - if strings.HasPrefix(k, "X-Meta-") { - headers[k] = v - } - } - var limit int if r.Form.Get("limit") != "" { var err error @@ -415,6 +409,15 @@ func (ir *imageRouter) getImagesSearch(ctx context.Context, w http.ResponseWrite // For a search it is not an error if no auth was given. Ignore invalid // AuthConfig to increase compatibility with the existing API. authConfig, _ := registry.DecodeAuthConfig(r.Header.Get(registry.AuthHeader)) + + var headers = http.Header{} + for k, v := range r.Header { + k = http.CanonicalHeaderKey(k) + if strings.HasPrefix(k, "X-Meta-") { + headers[k] = v + } + } + headers.Set("User-Agent", dockerversion.DockerUserAgent(ctx)) res, err := ir.searcher.Search(ctx, searchFilters, r.Form.Get("term"), limit, authConfig, headers) if err != nil { return err -- cgit v1.2.1