diff options
author | Sebastiaan van Stijn <github@gone.nl> | 2023-03-21 14:40:33 +0100 |
---|---|---|
committer | Sebastiaan van Stijn <github@gone.nl> | 2023-03-21 14:41:29 +0100 |
commit | cb766386995705cdd3766d876b8b97aad83616ce (patch) | |
tree | 621d9076798d226a10f53f38d82fecdc52677473 /api | |
parent | 7489b51f610104ab5acc43f4e77142927e7b522e (diff) | |
download | docker-cb766386995705cdd3766d876b8b97aad83616ce.tar.gz |
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 <github@gone.nl>
Diffstat (limited to 'api')
-rw-r--r-- | api/server/router/image/backend.go | 2 | ||||
-rw-r--r-- | api/server/router/image/image_routes.go | 17 |
2 files changed, 11 insertions, 8 deletions
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 |