cloud_shell.go raw

   1  // Copyright (c) Microsoft Corporation.
   2  // Licensed under the MIT license.
   3  
   4  package managedidentity
   5  
   6  import (
   7  	"context"
   8  	"fmt"
   9  	"io"
  10  	"net/http"
  11  	"net/url"
  12  	"os"
  13  	"strings"
  14  )
  15  
  16  func createCloudShellAuthRequest(ctx context.Context, resource string) (*http.Request, error) {
  17  	msiEndpoint := os.Getenv(msiEndpointEnvVar)
  18  	msiEndpointParsed, err := url.Parse(msiEndpoint)
  19  	if err != nil {
  20  		return nil, fmt.Errorf("couldn't parse %q: %s", msiEndpoint, err)
  21  	}
  22  
  23  	data := url.Values{}
  24  	data.Set(resourceQueryParameterName, resource)
  25  	msiDataEncoded := data.Encode()
  26  	body := io.NopCloser(strings.NewReader(msiDataEncoded))
  27  
  28  	req, err := http.NewRequestWithContext(ctx, http.MethodPost, msiEndpointParsed.String(), body)
  29  	if err != nil {
  30  		return nil, fmt.Errorf("error creating http request %s", err)
  31  	}
  32  
  33  	req.Header.Set(metaHTTPHeaderName, "true")
  34  	req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
  35  
  36  	return req, nil
  37  }
  38