Skip to content

Commit

Permalink
Merge pull request moby#37690 from KimMachineGun/modify-context-key
Browse files Browse the repository at this point in the history
api/server, dockerversion: modify context key
  • Loading branch information
thaJeztah authored Sep 6, 2018
2 parents 7129beb + 1377a2d commit f94eec2
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 10 deletions.
6 changes: 2 additions & 4 deletions api/server/httputils/httputils.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,8 @@ import (
"github.com/sirupsen/logrus"
)

type contextKey string

// APIVersionKey is the client's requested API version.
const APIVersionKey contextKey = "api-version"
type APIVersionKey struct{}

// APIFunc is an adapter to allow the use of ordinary functions as Docker API endpoints.
// Any function that has the appropriate signature can be registered as an API endpoint (e.g. getVersion).
Expand Down Expand Up @@ -83,7 +81,7 @@ func VersionFromContext(ctx context.Context) string {
return ""
}

if val := ctx.Value(APIVersionKey); val != nil {
if val := ctx.Value(APIVersionKey{}); val != nil {
return val.(string)
}

Expand Down
2 changes: 1 addition & 1 deletion api/server/middleware/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ func (v VersionMiddleware) WrapHandler(handler func(ctx context.Context, w http.
if versions.GreaterThan(apiVersion, v.defaultVersion) {
return versionUnsupportedError{version: apiVersion, maxVersion: v.defaultVersion}
}
ctx = context.WithValue(ctx, httputils.APIVersionKey, apiVersion)
ctx = context.WithValue(ctx, httputils.APIVersionKey{}, apiVersion)
return handler(ctx, w, r, vars)
}

Expand Down
3 changes: 1 addition & 2 deletions api/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,8 +129,7 @@ func (s *Server) makeHTTPHandler(handler httputils.APIFunc) http.HandlerFunc {

// use intermediate variable to prevent "should not use basic type
// string as key in context.WithValue" golint errors
var ki interface{} = dockerversion.UAStringKey
ctx := context.WithValue(context.Background(), ki, r.Header.Get("User-Agent"))
ctx := context.WithValue(context.Background(), dockerversion.UAStringKey{}, r.Header.Get("User-Agent"))
handlerFunc := s.handlerWithGlobalMiddlewares(handler)

vars := mux.Vars(r)
Expand Down
6 changes: 3 additions & 3 deletions dockerversion/useragent.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
)

// UAStringKey is used as key type for user-agent string in net/context struct
const UAStringKey = "upstream-user-agent"
type UAStringKey struct{}

// DockerUserAgent is the User-Agent the Docker client uses to identify itself.
// In accordance with RFC 7231 (5.5.3) is of the form:
Expand Down Expand Up @@ -39,9 +39,9 @@ func DockerUserAgent(ctx context.Context) string {
func getUserAgentFromContext(ctx context.Context) string {
var upstreamUA string
if ctx != nil {
var ki interface{} = ctx.Value(UAStringKey)
var ki interface{} = ctx.Value(UAStringKey{})
if ki != nil {
upstreamUA = ctx.Value(UAStringKey).(string)
upstreamUA = ctx.Value(UAStringKey{}).(string)
}
}
return upstreamUA
Expand Down

0 comments on commit f94eec2

Please sign in to comment.