in sdk/auth/credentials/uri_credentials_provider.go [69:133]
func (provider *URLCredentialsProvider) getCredentials() (session *SessionCredentials, err error) {
connectTimeout := 5 * time.Second
readTimeout := 10 * time.Second
if provider.httpOptions != nil && provider.httpOptions.ConnectTimeout > 0 {
connectTimeout = provider.httpOptions.ConnectTimeout
}
if provider.httpOptions != nil && provider.httpOptions.ReadTimeout > 0 {
readTimeout = provider.httpOptions.ReadTimeout
}
transport := http.DefaultTransport.(*http.Transport).Clone()
transport.DialContext = func(ctx context.Context, network, address string) (net.Conn, error) {
return (&net.Dialer{
Timeout: connectTimeout,
DualStack: true,
}).DialContext(ctx, network, address)
}
httpClient := &http.Client{
Timeout: connectTimeout + readTimeout,
Transport: transport,
}
httpRequest, err := hookNewRequest(http.NewRequest)("GET", provider.url, strings.NewReader(""))
if err != nil {
return
}
httpResponse, err := hookDo(httpClient.Do)(httpRequest)
if err != nil {
fmt.Println(err)
return
}
defer httpResponse.Body.Close()
responseBody, err := ioutil.ReadAll(httpResponse.Body)
if err != nil {
return
}
if httpResponse.StatusCode != http.StatusOK {
err = fmt.Errorf("get credentials from %s failed: %s", provider.url, string(responseBody))
return
}
var resp urlResponse
err = json.Unmarshal(responseBody, &resp)
if err != nil {
err = fmt.Errorf("get credentials from %s failed with error, json unmarshal fail: %s", provider.url, 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", provider.url, string(responseBody))
return
}
session = &SessionCredentials{
AccessKeyId: *resp.AccessKeyId,
AccessKeySecret: *resp.AccessKeySecret,
SecurityToken: *resp.SecurityToken,
Expiration: *resp.Expiration,
}
return
}