| package server | |
| import ( | |
| "net/http" | |
| "github.com/docker/docker/api/server/httpstatus" | |
| "github.com/docker/docker/api/server/httputils" | |
| "github.com/docker/docker/api/types" | |
| "github.com/docker/docker/api/types/versions" | |
| "github.com/gorilla/mux" | |
| "google.golang.org/grpc/status" | |
| ) | |
| // makeErrorHandler makes an HTTP handler that decodes a Docker error and | |
| // returns it in the response. | |
| func makeErrorHandler(err error) http.HandlerFunc { | |
| return func(w http.ResponseWriter, r *http.Request) { | |
| statusCode := httpstatus.FromError(err) | |
| vars := mux.Vars(r) | |
| if apiVersionSupportsJSONErrors(vars["version"]) { | |
| response := &types.ErrorResponse{ | |
| Message: err.Error(), | |
| } | |
| _ = httputils.WriteJSON(w, statusCode, response) | |
| } else { | |
| http.Error(w, status.Convert(err).Message(), statusCode) | |
| } | |
| } | |
| } | |
| func apiVersionSupportsJSONErrors(version string) bool { | |
| const firstAPIVersionWithJSONErrors = "1.23" | |
| return version == "" || versions.GreaterThan(version, firstAPIVersionWithJSONErrors) | |
| } |