2017-11-11 04:44:02 +00:00
|
|
|
package httperror
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/rancher/norman/types"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
|
|
)
|
|
|
|
|
|
|
|
func ErrorHandler(request *types.APIContext, err error) {
|
|
|
|
var error *APIError
|
|
|
|
if apiError, ok := err.(*APIError); ok {
|
|
|
|
error = apiError
|
|
|
|
} else {
|
|
|
|
logrus.Errorf("Unknown error: %v", err)
|
|
|
|
error = &APIError{
|
2017-11-21 20:46:30 +00:00
|
|
|
code: ServerError,
|
2017-11-11 04:44:02 +00:00
|
|
|
message: err.Error(),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
data := toError(error)
|
|
|
|
request.WriteResponse(error.code.status, data)
|
|
|
|
}
|
|
|
|
|
|
|
|
func toError(apiError *APIError) map[string]interface{} {
|
|
|
|
e := map[string]interface{}{
|
2017-11-21 20:46:30 +00:00
|
|
|
"type": "/v1-meta/schemas/error",
|
2017-11-11 04:44:02 +00:00
|
|
|
"code": apiError.code.code,
|
|
|
|
"message": apiError.message,
|
|
|
|
}
|
|
|
|
if apiError.fieldName != "" {
|
|
|
|
e["fieldName"] = apiError.fieldName
|
|
|
|
}
|
|
|
|
|
|
|
|
return e
|
|
|
|
}
|