summaryrefslogtreecommitdiff
path: root/api
diff options
context:
space:
mode:
authorSebastiaan van Stijn <github@gone.nl>2023-03-21 14:40:33 +0100
committerSebastiaan van Stijn <github@gone.nl>2023-03-21 14:41:29 +0100
commitcb766386995705cdd3766d876b8b97aad83616ce (patch)
tree621d9076798d226a10f53f38d82fecdc52677473 /api
parent7489b51f610104ab5acc43f4e77142927e7b522e (diff)
downloaddocker-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.go2
-rw-r--r--api/server/router/image/image_routes.go17
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