MCPcopy
hub / github.com/minio/minio-go / getClientGrantsCredentials

Function getClientGrantsCredentials

pkg/credentials/sts_client_grants.go:103–158  ·  view source on GitHub ↗
(clnt *http.Client, endpoint string,
	getClientGrantsTokenExpiry func() (*ClientGrantsToken, error),
)

Source from the content-addressed store, hash-verified

101}
102
103func getClientGrantsCredentials(clnt *http.Client, endpoint string,
104 getClientGrantsTokenExpiry func() (*ClientGrantsToken, error),
105) (AssumeRoleWithClientGrantsResponse, error) {
106 accessToken, err := getClientGrantsTokenExpiry()
107 if err != nil {
108 return AssumeRoleWithClientGrantsResponse{}, err
109 }
110
111 v := url.Values{}
112 v.Set("Action", "AssumeRoleWithClientGrants")
113 v.Set("Token", accessToken.Token)
114 v.Set("DurationSeconds", fmt.Sprintf("%d", accessToken.Expiry))
115 v.Set("Version", STSVersion)
116
117 u, err := url.Parse(endpoint)
118 if err != nil {
119 return AssumeRoleWithClientGrantsResponse{}, err
120 }
121
122 req, err := http.NewRequest(http.MethodPost, u.String(), strings.NewReader(v.Encode()))
123 if err != nil {
124 return AssumeRoleWithClientGrantsResponse{}, err
125 }
126
127 req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
128
129 resp, err := clnt.Do(req)
130 if err != nil {
131 return AssumeRoleWithClientGrantsResponse{}, err
132 }
133 defer resp.Body.Close()
134 if resp.StatusCode != http.StatusOK {
135 var errResp ErrorResponse
136 buf, err := io.ReadAll(resp.Body)
137 if err != nil {
138 return AssumeRoleWithClientGrantsResponse{}, err
139 }
140 _, err = xmlDecodeAndBody(bytes.NewReader(buf), &errResp)
141 if err != nil {
142 var s3Err Error
143 if _, err = xmlDecodeAndBody(bytes.NewReader(buf), &s3Err); err != nil {
144 return AssumeRoleWithClientGrantsResponse{}, err
145 }
146 errResp.RequestID = s3Err.RequestID
147 errResp.STSError.Code = s3Err.Code
148 errResp.STSError.Message = s3Err.Message
149 }
150 return AssumeRoleWithClientGrantsResponse{}, errResp
151 }
152
153 a := AssumeRoleWithClientGrantsResponse{}
154 if err = xml.NewDecoder(resp.Body).Decode(&a); err != nil {
155 return AssumeRoleWithClientGrantsResponse{}, err
156 }
157 return a, nil
158}
159
160// RetrieveWithCredContext is like Retrieve() with cred context

Callers 1

Calls 5

DoMethod · 0.80
xmlDecodeAndBodyFunction · 0.70
SetMethod · 0.45
StringMethod · 0.45
CloseMethod · 0.45

Tested by

no test coverage detected