func GetMetadataAccessToken()

in internal/apiclient/token.go [280:337]


func GetMetadataAccessToken() (err error) {
	var req *http.Request
	var tokenResponse map[string]interface{}

	metadataURL := "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token"

	client, err := getHttpClient()
	if err != nil {
		return err
	}

	if DryRun() {
		return nil
	}

	clilog.Debug.Println("Connecting to: ", metadataURL)

	req, err = http.NewRequest(http.MethodGet, metadataURL, nil)
	if err != nil {
		clilog.Error.Println("error in client: ", err)
		return err
	}

	req.Header.Set("Metadata-Flavor", "Google")
	resp, err := client.Do(req)
	if err != nil {
		clilog.Error.Println("error connecting: ", err)
		return err
	}

	if resp != nil {
		defer resp.Body.Close()
	}

	if resp == nil {
		clilog.Error.Println("error in response: Response was null")
		return fmt.Errorf("error in response: Response was null")
	}

	respBody, err := io.ReadAll(resp.Body)
	if err != nil {
		clilog.Error.Println("error in response: ", err)
		return err
	} else if resp.StatusCode > 399 {
		clilog.Debug.Printf("status code %d, error in response: %s\n", resp.StatusCode, string(respBody))
		clilog.HTTPError.Println(string(respBody))
		return errors.New(getErrorMessage(resp.StatusCode))
	}

	err = json.Unmarshal(respBody, &tokenResponse)
	if err != nil {
		return err
	}

	SetIntegrationToken(tokenResponse["access_token"].(string))

	return nil
}