in credentials/providers/uri.go [66:116]
func (provider *URLCredentialsProvider) getCredentials() (session *sessionCredentials, err error) {
req := &httputil.Request{
Method: "GET",
URL: provider.url,
}
connectTimeout := 5 * time.Second
readTimeout := 10 * time.Second
if provider.httpOptions != nil && provider.httpOptions.ConnectTimeout > 0 {
connectTimeout = time.Duration(provider.httpOptions.ConnectTimeout) * time.Millisecond
}
if provider.httpOptions != nil && provider.httpOptions.ReadTimeout > 0 {
readTimeout = time.Duration(provider.httpOptions.ReadTimeout) * time.Millisecond
}
if provider.httpOptions != nil && provider.httpOptions.Proxy != "" {
req.Proxy = provider.httpOptions.Proxy
}
req.ConnectTimeout = connectTimeout
req.ReadTimeout = readTimeout
res, err := httpDo(req)
if err != nil {
return
}
if res.StatusCode != http.StatusOK {
err = fmt.Errorf("get credentials from %s failed: %s", req.BuildRequestURL(), string(res.Body))
return
}
var resp urlResponse
err = json.Unmarshal(res.Body, &resp)
if err != nil {
err = fmt.Errorf("get credentials from %s failed with error, json unmarshal fail: %s", req.BuildRequestURL(), err.Error())
return
}
if resp.AccessKeyId == nil || resp.AccessKeySecret == nil || resp.SecurityToken == nil || resp.Expiration == nil {
err = fmt.Errorf("refresh credentials from %s failed: %s", req.BuildRequestURL(), string(res.Body))
return
}
session = &sessionCredentials{
AccessKeyId: *resp.AccessKeyId,
AccessKeySecret: *resp.AccessKeySecret,
SecurityToken: *resp.SecurityToken,
Expiration: *resp.Expiration,
}
return
}