diff options
author | Sebastien Douheret <sebastien.douheret@iot.bzh> | 2017-09-29 09:47:37 +0200 |
---|---|---|
committer | Sebastien Douheret <sebastien.douheret@iot.bzh> | 2017-09-29 09:47:37 +0200 |
commit | 515f86b3cebffe730285944a9515013d6866bac9 (patch) | |
tree | c068046e34e7cb91ce2956f8119f7844f8b07a44 | |
parent | 3bddf2b6e87ec2008e3dfb7632849f99b7eb4e55 (diff) |
Fixed HTTPClient creation when client not responding.
-rw-r--r-- | golib/httpclient.go | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/golib/httpclient.go b/golib/httpclient.go index 7d3e3c7..eaeb0f6 100644 --- a/golib/httpclient.go +++ b/golib/httpclient.go @@ -20,6 +20,7 @@ type HTTPClient struct { LoggerPrefix string httpClient http.Client + initDone bool endpoint string apikey string username string @@ -67,6 +68,7 @@ func HTTPNewClient(baseURL string, cfg HTTPClientConfig) (*HTTPClient, error) { LoggerPrefix: "", httpClient: httpClient, + initDone: false, endpoint: baseURL, apikey: cfg.Apikey, conf: cfg, @@ -76,11 +78,11 @@ func HTTPNewClient(baseURL string, cfg HTTPClientConfig) (*HTTPClient, error) { */ } - if client.apikey == "" { - if err := client.getCidAndCsrf(); err != nil { - return nil, err - } + if err := client.getCidAndCsrf(); err != nil { + return &client, err } + + client.initDone = true return &client, nil } @@ -130,6 +132,10 @@ func (c *HTTPClient) log(level int, format string, args ...interface{}) { // Send request to retrieve Client id and/or CSRF token func (c *HTTPClient) getCidAndCsrf() error { + // Don't use cid + csrf when apikey is set + if c.apikey != "" { + return nil + } request, err := http.NewRequest("GET", c.endpoint, nil) if err != nil { return err @@ -172,6 +178,12 @@ func (c *HTTPClient) HTTPGet(url string, data *[]byte) error { // HTTPGetWithRes Send a Get request to client and return both response and error func (c *HTTPClient) HTTPGetWithRes(url string, data *[]byte) (*http.Response, error) { + if !c.initDone { + if err := c.getCidAndCsrf(); err == nil { + c.initDone = true + } + } + request, err := http.NewRequest("GET", c.formatURL(url), nil) if err != nil { return nil, err @@ -197,6 +209,12 @@ func (c *HTTPClient) HTTPPost(url string, body string) error { // HTTPPostWithRes Send a POST request to client and return both response and error func (c *HTTPClient) HTTPPostWithRes(url string, body string) (*http.Response, error) { + if !c.initDone { + if err := c.getCidAndCsrf(); err == nil { + c.initDone = true + } + } + request, err := http.NewRequest("POST", c.formatURL(url), bytes.NewBufferString(body)) if err != nil { return nil, err |