Add BadRequestError handling
This commit is contained in:
parent
1bfb4c865f
commit
170fa10c85
|
@ -31,6 +31,15 @@ func (e MethodNotAllowedError) Error() string {
|
||||||
return fmt.Sprintf("method %s not allowed", e.Method)
|
return fmt.Sprintf("method %s not allowed", e.Method)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// BadRequestError should be returned by a handler when parameters or the payload are not valid
|
||||||
|
type BadRequestError struct {
|
||||||
|
Reason string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e BadRequestError) Error() string {
|
||||||
|
return fmt.Sprintf("Bad request: %s", e.Reason)
|
||||||
|
}
|
||||||
|
|
||||||
// HTTPServer provides an HTTP api for an agent.
|
// HTTPServer provides an HTTP api for an agent.
|
||||||
type HTTPServer struct {
|
type HTTPServer struct {
|
||||||
*http.Server
|
*http.Server
|
||||||
|
@ -249,6 +258,11 @@ func (s *HTTPServer) wrap(handler endpoint, methods []string) http.HandlerFunc {
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isBadRequest := func(err error) bool {
|
||||||
|
_, ok := err.(BadRequestError)
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
addAllowHeader := func(methods []string) {
|
addAllowHeader := func(methods []string) {
|
||||||
resp.Header().Add("Allow", strings.Join(methods, ","))
|
resp.Header().Add("Allow", strings.Join(methods, ","))
|
||||||
}
|
}
|
||||||
|
@ -269,6 +283,9 @@ func (s *HTTPServer) wrap(handler endpoint, methods []string) http.HandlerFunc {
|
||||||
addAllowHeader(err.(MethodNotAllowedError).Allow)
|
addAllowHeader(err.(MethodNotAllowedError).Allow)
|
||||||
resp.WriteHeader(http.StatusMethodNotAllowed) // 405
|
resp.WriteHeader(http.StatusMethodNotAllowed) // 405
|
||||||
fmt.Fprint(resp, err.Error())
|
fmt.Fprint(resp, err.Error())
|
||||||
|
case isBadRequest(err):
|
||||||
|
resp.WriteHeader(http.StatusBadRequest)
|
||||||
|
fmt.Fprint(resp, err.Error())
|
||||||
default:
|
default:
|
||||||
resp.WriteHeader(http.StatusInternalServerError)
|
resp.WriteHeader(http.StatusInternalServerError)
|
||||||
fmt.Fprint(resp, err.Error())
|
fmt.Fprint(resp, err.Error())
|
||||||
|
|
Loading…
Reference in New Issue