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