| 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) |
| } |