in tokenutil/token_util.go [34:75]
func GetRegistryRefreshToken(registry, resourceID, clientID string) (string, error) {
armToken, err := GetRefreshAuthToken(resourceID, clientID)
if err != nil {
return "", errors.Wrap(err, "unable to get ARM token")
}
client := autorest.NewClientWithUserAgent("azure/acr/tasks")
exchangeURL := fmt.Sprintf("https://%s/oauth2/exchange", registry)
v := url.Values{}
v.Set("grant_type", "access_token")
v.Set("service", registry)
v.Set("access_token", armToken.AccessToken)
req, err := http.NewRequest("POST", exchangeURL, strings.NewReader(v.Encode()))
if err != nil {
return "", errors.Wrap(err, "unable to create the request to get ACR refresh token")
}
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
response, err := client.Do(req)
if err != nil {
return "", errors.Wrap(err, "unable to send the request to get ACR refresh token")
}
defer response.Body.Close()
if response.StatusCode != http.StatusOK {
return "", fmt.Errorf("failed to get ACR refresh token, exchange API response code: %s", response.Status)
}
var token RegistryRefreshToken
jsonResponse, err := io.ReadAll(response.Body)
if err != nil {
return "", errors.Wrap(err, "unable to read the response from ACR exchange API")
}
err = json.Unmarshal(jsonResponse, &token)
if err != nil {
return "", errors.Wrapf(err, "unable to parse the response from ACR exchange API: %s", jsonResponse)
}
return token.RefreshToken, nil
}