in whisk/client.go [262:325]
func (c *Client) NewRequest(method, urlStr string, body interface{}, includeNamespaceInUrl bool) (*http.Request, error) {
if includeNamespaceInUrl {
if c.Config.Namespace != "" {
urlStr = fmt.Sprintf("%s/namespaces/%s/%s", c.Config.Version, c.Config.Namespace, urlStr)
} else {
urlStr = fmt.Sprintf("%s/namespaces", c.Config.Version)
}
} else {
urlStr = fmt.Sprintf("%s/%s", c.Config.Version, urlStr)
}
urlStr = fmt.Sprintf("%s/%s", c.BaseURL.String(), urlStr)
u, err := url.Parse(urlStr)
if err != nil {
Debug(DbgError, "url.Parse(%s) error: %s\n", urlStr, err)
errStr := wski18n.T("Invalid request URL '{{.url}}': {{.err}}",
map[string]interface{}{"url": urlStr, "err": err})
werr := MakeWskError(errors.New(errStr), EXIT_CODE_ERR_GENERAL, DISPLAY_MSG, NO_DISPLAY_USAGE)
return nil, werr
}
var buf io.ReadWriter
if body != nil {
buf = new(bytes.Buffer)
encoder := json.NewEncoder(buf)
encoder.SetEscapeHTML(false)
err := encoder.Encode(body)
if err != nil {
Debug(DbgError, "json.Encode(%#v) error: %s\n", body, err)
errStr := wski18n.T("Error encoding request body: {{.err}}", map[string]interface{}{"err": err})
werr := MakeWskError(errors.New(errStr), EXIT_CODE_ERR_GENERAL, DISPLAY_MSG, NO_DISPLAY_USAGE)
return nil, werr
}
}
req, err := http.NewRequest(method, u.String(), buf)
if err != nil {
Debug(DbgError, "http.NewRequest(%v, %s, buf) error: %s\n", method, u.String(), err)
errStr := wski18n.T("Error initializing request: {{.err}}", map[string]interface{}{"err": err})
werr := MakeWskError(errors.New(errStr), EXIT_CODE_ERR_GENERAL, DISPLAY_MSG, NO_DISPLAY_USAGE)
return nil, werr
}
if req.Body != nil {
req.Header.Add("Content-Type", "application/json")
}
err = c.addAuthHeader(req, AuthRequired)
if err != nil {
Debug(DbgError, "addAuthHeader() error: %s\n", err)
errStr := wski18n.T("Unable to add the HTTP authentication header: {{.err}}",
map[string]interface{}{"err": err})
werr := MakeWskErrorFromWskError(errors.New(errStr), err, EXIT_CODE_ERR_GENERAL, DISPLAY_MSG, NO_DISPLAY_USAGE)
return nil, werr
}
req.Header.Add("User-Agent", c.Config.UserAgent)
for key := range c.Config.AdditionalHeaders {
req.Header.Add(key, c.Config.AdditionalHeaders.Get(key))
}
return req, nil
}