Forráskód Böngészése

Use apiError in server version middleware.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
Daniel Nephin 8 éve
szülő
commit
bcb0405239
2 módosított fájl, 9 hozzáadás és 11 törlés
  1. 6 1
      api/server/httputils/errors.go
  2. 3 10
      api/server/middleware/version.go

+ 6 - 1
api/server/httputils/errors.go

@@ -75,13 +75,18 @@ func GetHTTPErrorStatusCode(err error) int {
 	return statusCode
 	return statusCode
 }
 }
 
 
+func apiVersionSupportsJSONErrors(version string) bool {
+	const firstAPIVersionWithJSONErrors = "1.23"
+	return version == "" || versions.GreaterThan(version, firstAPIVersionWithJSONErrors)
+}
+
 // MakeErrorHandler makes an HTTP handler that decodes a Docker error and
 // MakeErrorHandler makes an HTTP handler that decodes a Docker error and
 // returns it in the response.
 // returns it in the response.
 func MakeErrorHandler(err error) http.HandlerFunc {
 func MakeErrorHandler(err error) http.HandlerFunc {
 	return func(w http.ResponseWriter, r *http.Request) {
 	return func(w http.ResponseWriter, r *http.Request) {
 		statusCode := GetHTTPErrorStatusCode(err)
 		statusCode := GetHTTPErrorStatusCode(err)
 		vars := mux.Vars(r)
 		vars := mux.Vars(r)
-		if vars["version"] == "" || versions.GreaterThan(vars["version"], "1.23") {
+		if apiVersionSupportsJSONErrors(vars["version"]) {
 			response := &types.ErrorResponse{
 			response := &types.ErrorResponse{
 				Message: err.Error(),
 				Message: err.Error(),
 			}
 			}

+ 3 - 10
api/server/middleware/version.go

@@ -5,18 +5,11 @@ import (
 	"net/http"
 	"net/http"
 	"runtime"
 	"runtime"
 
 
+	"github.com/docker/docker/api/errors"
 	"github.com/docker/docker/api/types/versions"
 	"github.com/docker/docker/api/types/versions"
 	"golang.org/x/net/context"
 	"golang.org/x/net/context"
 )
 )
 
 
-type badRequestError struct {
-	error
-}
-
-func (badRequestError) HTTPErrorStatusCode() int {
-	return http.StatusBadRequest
-}
-
 // VersionMiddleware is a middleware that
 // VersionMiddleware is a middleware that
 // validates the client and server versions.
 // validates the client and server versions.
 type VersionMiddleware struct {
 type VersionMiddleware struct {
@@ -44,10 +37,10 @@ func (v VersionMiddleware) WrapHandler(handler func(ctx context.Context, w http.
 		}
 		}
 
 
 		if versions.GreaterThan(apiVersion, v.defaultVersion) {
 		if versions.GreaterThan(apiVersion, v.defaultVersion) {
-			return badRequestError{fmt.Errorf("client is newer than server (client API version: %s, server API version: %s)", apiVersion, v.defaultVersion)}
+			return errors.NewBadRequestError(fmt.Errorf("client is newer than server (client API version: %s, server API version: %s)", apiVersion, v.defaultVersion))
 		}
 		}
 		if versions.LessThan(apiVersion, v.minVersion) {
 		if versions.LessThan(apiVersion, v.minVersion) {
-			return badRequestError{fmt.Errorf("client version %s is too old. Minimum supported API version is %s, please upgrade your client to a newer version", apiVersion, v.minVersion)}
+			return errors.NewBadRequestError(fmt.Errorf("client version %s is too old. Minimum supported API version is %s, please upgrade your client to a newer version", apiVersion, v.minVersion))
 		}
 		}
 
 
 		header := fmt.Sprintf("Docker/%s (%s)", v.serverVersion, runtime.GOOS)
 		header := fmt.Sprintf("Docker/%s (%s)", v.serverVersion, runtime.GOOS)