github.com/hustcat/docker@v1.3.3-0.20160314103604-901c67a8eeab/api/server/middleware/user_agent.go (about) 1 package middleware 2 3 import ( 4 "net/http" 5 "strings" 6 7 "github.com/Sirupsen/logrus" 8 "github.com/docker/docker/api/server/httputils" 9 "github.com/docker/docker/pkg/version" 10 "golang.org/x/net/context" 11 ) 12 13 // NewUserAgentMiddleware creates a new UserAgent middleware. 14 func NewUserAgentMiddleware(versionCheck string) Middleware { 15 serverVersion := version.Version(versionCheck) 16 17 return func(handler httputils.APIFunc) httputils.APIFunc { 18 return func(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 19 if strings.Contains(r.Header.Get("User-Agent"), "Docker-Client/") { 20 userAgent := strings.Split(r.Header.Get("User-Agent"), "/") 21 22 // v1.20 onwards includes the GOOS of the client after the version 23 // such as Docker/1.7.0 (linux) 24 if len(userAgent) == 2 && strings.Contains(userAgent[1], " ") { 25 userAgent[1] = strings.Split(userAgent[1], " ")[0] 26 } 27 28 if len(userAgent) == 2 && !serverVersion.Equal(version.Version(userAgent[1])) { 29 logrus.Debugf("Client and server don't have the same version (client: %s, server: %s)", userAgent[1], serverVersion) 30 } 31 } 32 return handler(ctx, w, r, vars) 33 } 34 } 35 }