File tree 3 files changed +44
-4
lines changed
3 files changed +44
-4
lines changed Original file line number Diff line number Diff line change
1
+ ```release-note:none
2
+
3
+ ```
Original file line number Diff line number Diff line change @@ -240,6 +240,7 @@ func (c *Config) LoadAndValidate(ctx context.Context) error {
240
240
if err != nil {
241
241
return err
242
242
}
243
+
243
244
c .tokenSource = tokenSource
244
245
245
246
cleanCtx := context .WithValue (ctx , oauth2 .HTTPClient , cleanhttp .DefaultClient ())
@@ -256,20 +257,21 @@ func (c *Config) LoadAndValidate(ctx context.Context) error {
256
257
// See ClientWithAdditionalRetries
257
258
retryTransport := NewTransportWithDefaultRetries (loggingTransport )
258
259
260
+ // 4. Header Transport - outer wrapper to inject additional headers we want to apply
261
+ // before making requests
262
+ headerTransport := newTransportWithHeaders (retryTransport )
263
+
259
264
// Set final transport value.
260
- client .Transport = retryTransport
265
+ client .Transport = headerTransport
261
266
262
267
// This timeout is a timeout per HTTP request, not per logical operation.
263
268
client .Timeout = c .synchronousTimeout ()
264
269
265
270
c .client = client
266
271
c .context = ctx
267
-
268
272
c .Region = GetRegionFromRegionSelfLink (c .Region )
269
-
270
273
c .requestBatcherServiceUsage = NewRequestBatcher ("Service Usage" , ctx , c .BatchingConfig )
271
274
c .requestBatcherIam = NewRequestBatcher ("IAM" , ctx , c .BatchingConfig )
272
-
273
275
c .PollInterval = 10 * time .Second
274
276
275
277
return nil
Original file line number Diff line number Diff line change
1
+ package google
2
+
3
+ import (
4
+ "net/http"
5
+ "os"
6
+ )
7
+
8
+ // adapted from https://stackoverflow.com/questions/51325704/adding-a-default-http-header-in-go
9
+ type headerTransportLayer struct {
10
+ http.Header
11
+ baseTransit http.RoundTripper
12
+ }
13
+
14
+ func newTransportWithHeaders (baseTransit http.RoundTripper ) headerTransportLayer {
15
+ if baseTransit == nil {
16
+ baseTransit = http .DefaultTransport
17
+ }
18
+
19
+ headers := make (http.Header )
20
+ if requestReason := os .Getenv ("CLOUDSDK_CORE_REQUEST_REASON" ); requestReason != "" {
21
+ headers .Set ("X-Goog-Request-Reason" , requestReason )
22
+ }
23
+
24
+ return headerTransportLayer {Header : headers , baseTransit : baseTransit }
25
+ }
26
+
27
+ func (h headerTransportLayer ) RoundTrip (req * http.Request ) (* http.Response , error ) {
28
+ for key , value := range h .Header {
29
+ // only set headers that are not previously defined
30
+ if _ , ok := req .Header [key ]; ! ok {
31
+ req .Header [key ] = value
32
+ }
33
+ }
34
+ return h .baseTransit .RoundTrip (req )
35
+ }
You can’t perform that action at this time.
0 commit comments