mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Use apiError in server version middleware.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
This commit is contained in:
parent
c452e1bfe6
commit
bcb0405239
2 changed files with 9 additions and 11 deletions
|
@ -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(),
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Add table
Reference in a new issue