Skip to content

Commit

Permalink
cloudflare: update RequestError to expose Messages
Browse files Browse the repository at this point in the history
The messages field isn't really used broadly in the API as it was designed for
informational feedback as opposed to errors, however, the page rules endpoint
uses it to communicate validation failures. For these messages to be raised in
other tools, namely the Terraform provider, it needs a dedicated field on the
struct and to be included in the `Error()` method.

Closes cloudflare/terraform-provider-cloudflare#1579
  • Loading branch information
jacobbednarz committed Oct 17, 2022
1 parent 4e98595 commit 14877f6
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 3 deletions.
4 changes: 2 additions & 2 deletions cloudflare.go
Expand Up @@ -5,6 +5,7 @@ import (
"bytes"
"context"
"encoding/json"
"errors"
"fmt"
"io"
"io/ioutil"
Expand All @@ -16,8 +17,6 @@ import (
"strings"
"time"

"errors"

"golang.org/x/time/rate"
)

Expand Down Expand Up @@ -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 {
Expand Down
23 changes: 22 additions & 1 deletion errors.go
Expand Up @@ -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
}
Expand All @@ -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
Expand Down Expand Up @@ -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
}
Expand Down

0 comments on commit 14877f6

Please sign in to comment.