@@ -550,44 +550,7 @@ func (r *RootCmd) InitClient(client *codersdk.Client) serpent.MiddlewareFunc {
550
550
// HeaderTransport creates a new transport that executes `--header-command`
551
551
// if it is set to add headers for all outbound requests.
552
552
func (r * RootCmd ) HeaderTransport (ctx context.Context , serverURL * url.URL ) (* codersdk.HeaderTransport , error ) {
553
- transport := & codersdk.HeaderTransport {
554
- Transport : http .DefaultTransport ,
555
- Header : http.Header {},
556
- }
557
- headers := r .header
558
- if r .headerCommand != "" {
559
- shell := "sh"
560
- caller := "-c"
561
- if runtime .GOOS == "windows" {
562
- shell = "cmd.exe"
563
- caller = "/c"
564
- }
565
- var outBuf bytes.Buffer
566
- // #nosec
567
- cmd := exec .CommandContext (ctx , shell , caller , r .headerCommand )
568
- cmd .Env = append (os .Environ (), "CODER_URL=" + serverURL .String ())
569
- cmd .Stdout = & outBuf
570
- cmd .Stderr = io .Discard
571
- err := cmd .Run ()
572
- if err != nil {
573
- return nil , xerrors .Errorf ("failed to run %v: %w" , cmd .Args , err )
574
- }
575
- scanner := bufio .NewScanner (& outBuf )
576
- for scanner .Scan () {
577
- headers = append (headers , scanner .Text ())
578
- }
579
- if err := scanner .Err (); err != nil {
580
- return nil , xerrors .Errorf ("scan %v: %w" , cmd .Args , err )
581
- }
582
- }
583
- for _ , header := range headers {
584
- parts := strings .SplitN (header , "=" , 2 )
585
- if len (parts ) < 2 {
586
- return nil , xerrors .Errorf ("split header %q had less than two parts" , header )
587
- }
588
- transport .Header .Add (parts [0 ], parts [1 ])
589
- }
590
- return transport , nil
553
+ return headerTransport (ctx , serverURL , r .header , r .headerCommand )
591
554
}
592
555
593
556
func (r * RootCmd ) configureClient (ctx context.Context , client * codersdk.Client , serverURL * url.URL , inv * serpent.Invocation ) error {
@@ -1273,3 +1236,46 @@ type roundTripper func(req *http.Request) (*http.Response, error)
1273
1236
func (r roundTripper ) RoundTrip (req * http.Request ) (* http.Response , error ) {
1274
1237
return r (req )
1275
1238
}
1239
+
1240
+ // HeaderTransport creates a new transport that executes `--header-command`
1241
+ // if it is set to add headers for all outbound requests.
1242
+ func headerTransport (ctx context.Context , serverURL * url.URL , header []string , headerCommand string ) (* codersdk.HeaderTransport , error ) {
1243
+ transport := & codersdk.HeaderTransport {
1244
+ Transport : http .DefaultTransport ,
1245
+ Header : http.Header {},
1246
+ }
1247
+ headers := header
1248
+ if headerCommand != "" {
1249
+ shell := "sh"
1250
+ caller := "-c"
1251
+ if runtime .GOOS == "windows" {
1252
+ shell = "cmd.exe"
1253
+ caller = "/c"
1254
+ }
1255
+ var outBuf bytes.Buffer
1256
+ // #nosec
1257
+ cmd := exec .CommandContext (ctx , shell , caller , headerCommand )
1258
+ cmd .Env = append (os .Environ (), "CODER_URL=" + serverURL .String ())
1259
+ cmd .Stdout = & outBuf
1260
+ cmd .Stderr = io .Discard
1261
+ err := cmd .Run ()
1262
+ if err != nil {
1263
+ return nil , xerrors .Errorf ("failed to run %v: %w" , cmd .Args , err )
1264
+ }
1265
+ scanner := bufio .NewScanner (& outBuf )
1266
+ for scanner .Scan () {
1267
+ headers = append (headers , scanner .Text ())
1268
+ }
1269
+ if err := scanner .Err (); err != nil {
1270
+ return nil , xerrors .Errorf ("scan %v: %w" , cmd .Args , err )
1271
+ }
1272
+ }
1273
+ for _ , header := range headers {
1274
+ parts := strings .SplitN (header , "=" , 2 )
1275
+ if len (parts ) < 2 {
1276
+ return nil , xerrors .Errorf ("split header %q had less than two parts" , header )
1277
+ }
1278
+ transport .Header .Add (parts [0 ], parts [1 ])
1279
+ }
1280
+ return transport , nil
1281
+ }
0 commit comments