From 62af93ae863d5ac895694f9404fa9a45912613b7 Mon Sep 17 00:00:00 2001 From: eisandbar Date: Tue, 16 Aug 2022 12:38:44 -0400 Subject: [PATCH] feat(idtoken): Allow format options Added field CustomFormat to DialSettings in internal/settings.go Added field format to computerIDTokenSource in idtoken/compute.go Function computeTokenSource now sets field format to full, and if ds.CustomFormat != "" overwrites the field Method Token now uses c.format instead of string literal "full" Fixes #542 --- idtoken/compute.go | 7 ++++++- internal/settings.go | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/idtoken/compute.go b/idtoken/compute.go index 222396cb7c0..e16c4acf81b 100644 --- a/idtoken/compute.go +++ b/idtoken/compute.go @@ -23,6 +23,10 @@ func computeTokenSource(audience string, ds *internal.DialSettings) (oauth2.Toke } ts := computeIDTokenSource{ audience: audience, + format: "full", + } + if ds.CustomFormat != "" { + ts.format = ds.CustomFormat } tok, err := ts.Token() if err != nil { @@ -33,12 +37,13 @@ func computeTokenSource(audience string, ds *internal.DialSettings) (oauth2.Toke type computeIDTokenSource struct { audience string + format string } func (c computeIDTokenSource) Token() (*oauth2.Token, error) { v := url.Values{} v.Set("audience", c.audience) - v.Set("format", "full") + v.Set("format", c.format) urlSuffix := "instance/service-accounts/default/identity?" + v.Encode() res, err := metadata.Get(urlSuffix) if err != nil { diff --git a/internal/settings.go b/internal/settings.go index 76efdb22772..91c625854ce 100644 --- a/internal/settings.go +++ b/internal/settings.go @@ -47,6 +47,7 @@ type DialSettings struct { ImpersonationConfig *impersonate.Config EnableDirectPath bool AllowNonDefaultServiceAccount bool + CustomFormat string // Google API system parameters. For more information please read: // https://cloud.google.com/apis/docs/system-parameters