forked from TrueCloudLab/lego
Better cloudflare API error handling. Report all errors if more then one error is available.
This commit is contained in:
parent
7a24c51c48
commit
1389afd8d8
1 changed files with 13 additions and 5 deletions
|
@ -156,8 +156,9 @@ func (c *DNSProvider) findTxtRecord(fqdn string) (*cloudFlareRecord, error) {
|
||||||
func (c *DNSProvider) makeRequest(method, uri string, body io.Reader) (json.RawMessage, error) {
|
func (c *DNSProvider) makeRequest(method, uri string, body io.Reader) (json.RawMessage, error) {
|
||||||
// APIError contains error details for failed requests
|
// APIError contains error details for failed requests
|
||||||
type APIError struct {
|
type APIError struct {
|
||||||
Code int `json:"code,omitempty"`
|
Code int `json:"code,omitempty"`
|
||||||
Message string `json:"message,omitempty"`
|
Message string `json:"message,omitempty"`
|
||||||
|
ErrorChain []APIError `json:"error_chain,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// APIResponse represents a response from CloudFlare API
|
// APIResponse represents a response from CloudFlare API
|
||||||
|
@ -179,7 +180,7 @@ func (c *DNSProvider) makeRequest(method, uri string, body io.Reader) (json.RawM
|
||||||
client := http.Client{Timeout: 30 * time.Second}
|
client := http.Client{Timeout: 30 * time.Second}
|
||||||
resp, err := client.Do(req)
|
resp, err := client.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Error querying API -> %v", err)
|
return nil, fmt.Errorf("Error querying Cloudflare API -> %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
@ -192,9 +193,16 @@ func (c *DNSProvider) makeRequest(method, uri string, body io.Reader) (json.RawM
|
||||||
|
|
||||||
if !r.Success {
|
if !r.Success {
|
||||||
if len(r.Errors) > 0 {
|
if len(r.Errors) > 0 {
|
||||||
return nil, fmt.Errorf("API error -> %d: %s", r.Errors[0].Code, r.Errors[0].Message)
|
errStr := ""
|
||||||
|
for _, apiErr := range r.Errors {
|
||||||
|
errStr += fmt.Sprintf("\t Error: %d: %s", apiErr.Code, apiErr.Message)
|
||||||
|
for _, chainErr := range apiErr.ErrorChain {
|
||||||
|
errStr += fmt.Sprintf("<- %d: %s", chainErr.Code, chainErr.Message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("Cloudflare API Error \n%s", errStr)
|
||||||
}
|
}
|
||||||
return nil, fmt.Errorf("API error")
|
return nil, fmt.Errorf("Cloudflare API error")
|
||||||
}
|
}
|
||||||
|
|
||||||
return r.Result, nil
|
return r.Result, nil
|
||||||
|
|
Loading…
Reference in a new issue