diff --git a/cloudflare.go b/cloudflare.go index 68576c025a..9219f72399 100644 --- a/cloudflare.go +++ b/cloudflare.go @@ -5,6 +5,7 @@ import ( "bytes" "context" "encoding/json" + "errors" "fmt" "io" "io/ioutil" @@ -16,8 +17,6 @@ import ( "strings" "time" - "errors" - "golang.org/x/time/rate" ) @@ -347,6 +346,7 @@ func (api *API) makeRequestWithAuthTypeAndHeadersComplete(ctx context.Context, m Errors: errBody.Errors, ErrorCodes: errCodes, ErrorMessages: errMsgs, + Messages: errBody.Messages, } switch resp.StatusCode { diff --git a/errors.go b/errors.go index 14e045474e..9b92d1dcaf 100644 --- a/errors.go +++ b/errors.go @@ -70,6 +70,9 @@ type Error struct { // ErrorMessages is a list of all the error codes. ErrorMessages []string + // Messages is a list of informational messages provided by the endpoint. + Messages []ResponseInfo + // RayID is the internal identifier for the request that was made. RayID string } @@ -90,7 +93,21 @@ func (e Error) Error() string { errMessages = append(errMessages, m) } - return errString + strings.Join(errMessages, ", ") + msgs := []string{} + for _, m := range e.Messages { + msgs = append(msgs, m.Message) + } + + errString += strings.Join(errMessages, ", ") + + // `Messages` is primarily used for additional validation failure notes in + // page rules. This shouldn't be used going forward but instead, use the + // error fields appropriately. + if len(msgs) > 0 { + errString += "\n" + strings.Join(msgs, " \n") + } + + return errString } // RequestError is for 4xx errors that we encounter not covered elsewhere @@ -119,6 +136,10 @@ func (e RequestError) InternalErrorCodeIs(code int) bool { return e.cloudflareError.InternalErrorCodeIs(code) } +func (e RequestError) Messages() []ResponseInfo { + return e.cloudflareError.Messages +} + func (e RequestError) RayID() string { return e.cloudflareError.RayID }