in network/client.go [269:316]
func (n *client) doJSON(uri, method string, statusCode int, request interface{}, response interface{}) (int, string, ResponseTLSData) {
var body io.Reader
if request != nil {
requestBody, err := json.Marshal(request)
if err != nil {
return -1, fmt.Sprintf("failed to marshal project object: %v", err), ResponseTLSData{}
}
body = bytes.NewReader(requestBody)
}
headers := make(http.Header)
if response != nil {
headers.Set("Accept", "application/json")
}
res, err := n.do(uri, method, body, "application/json", headers)
if err != nil {
return -1, err.Error(), ResponseTLSData{}
}
defer res.Body.Close()
defer io.Copy(ioutil.Discard, res.Body)
if res.StatusCode == statusCode {
if response != nil {
isApplicationJSON, err := isResponseApplicationJSON(res)
if !isApplicationJSON {
return -1, err.Error(), ResponseTLSData{}
}
d := json.NewDecoder(res.Body)
err = d.Decode(response)
if err != nil {
return -1, fmt.Sprintf("Error decoding json payload %v", err), ResponseTLSData{}
}
}
}
n.setLastUpdate(res.Header)
TLSData := ResponseTLSData{
CAChain: n.getCAChain(res.TLS),
CertFile: n.certFile,
KeyFile: n.keyFile,
}
return res.StatusCode, res.Status, TLSData
}