@@ -226,53 +226,22 @@ func (s *session) DeleteAccessKeySync(deleteAccessKeyInput *v3ioc.DeleteAccessKe
226226 & deleteAccessKeyInput .ControlPlaneInput )
227227}
228228
229- // DeleteAccessKeySync deletes an access key (blocking)
230- func (s * session ) GetUserNameSync ( getUserNameInput * v3ioc.GetUserNameInput ) (* v3ioc.GetUserNameOutput , error ) {
229+ // GetRunningUserAttributesSync returns user's attributes related to session's access key (blocking)
230+ func (s * session ) GetRunningUserAttributesSync ( getRunningUserAttributesInput * v3ioc.GetRunningUserAttributesInput ) (* v3ioc.GetRunningUserAttributesOutput , error ) {
231231
232232 // prepare session response resource
233- userNameOutput := v3ioc.GetUserNameOutput {}
234-
235- // allocate request
236- httpRequest := fasthttp .AcquireRequest ()
237- defer fasthttp .ReleaseRequest (httpRequest )
233+ userNameOutput := v3ioc.GetRunningUserAttributesOutput {}
238234
239- responseInstance , err := s .sendRequest (getUserNameInput .ControlPlaneInput .Ctx ,
240- & request {
241- method : http .MethodGet ,
242- path : fmt .Sprintf ("api/%s" , "self" ),
243- httpRequest : httpRequest ,
244- }, getUserNameInput .ControlPlaneInput .Timeout )
235+ err := s .getResource (getRunningUserAttributesInput .Ctx ,
236+ "self" ,
237+ & getRunningUserAttributesInput .ControlPlaneInput ,
238+ & userNameOutput .ControlPlaneOutput ,
239+ & userNameOutput .UserAttributes )
245240
246241 if err != nil {
247242 return nil , err
248243 }
249244
250- // if we got cookies, set them
251- if len (responseInstance .cookies ) > 0 {
252- s .cookies = responseInstance .cookies
253- }
254-
255- var objmap map [string ]json.RawMessage
256- err = json .Unmarshal (responseInstance .body , & objmap )
257- if err != nil {
258- return nil , err
259- }
260-
261- err = json .Unmarshal (objmap ["data" ], & objmap )
262- if err != nil {
263- return nil , err
264- }
265-
266- err = json .Unmarshal (objmap ["attributes" ], & objmap )
267- if err != nil {
268- return nil , err
269- }
270-
271- err = json .Unmarshal (objmap ["username" ], & userNameOutput .Username )
272- if err != nil {
273- return nil , err
274- }
275-
276245 return & userNameOutput , err
277246}
278247
@@ -386,6 +355,52 @@ func (s *session) createOrUpdateResource(ctx context.Context,
386355 return nil
387356}
388357
358+ func (s * session ) getResource (ctx context.Context ,
359+ path string ,
360+ controlPlaneInput * v3ioc.ControlPlaneInput ,
361+ controlPlaneOutput * v3ioc.ControlPlaneOutput ,
362+ responseAttributes interface {}) error {
363+
364+ // allocate request
365+ httpRequest := fasthttp .AcquireRequest ()
366+ defer fasthttp .ReleaseRequest (httpRequest )
367+
368+ responseInstance , err := s .sendRequest (ctx ,
369+ & request {
370+ method : http .MethodGet ,
371+ path : "api/" + path ,
372+ httpRequest : httpRequest ,
373+ }, controlPlaneInput .Timeout )
374+
375+ if err != nil {
376+ return err
377+ }
378+
379+ // unmarshal
380+ if responseInstance .body != nil && controlPlaneOutput != nil {
381+ responseBuffer := bytes .NewBuffer (responseInstance .body )
382+
383+ jsonAPIResponse := jsonapiResource {
384+ Data : jsonapiData {
385+ Attributes : responseAttributes ,
386+ },
387+ }
388+
389+ if err := json .NewDecoder (responseBuffer ).Decode (& jsonAPIResponse ); err != nil {
390+ return err
391+ }
392+
393+ switch typedResponseID := jsonAPIResponse .Data .ID .(type ) {
394+ case string :
395+ controlPlaneOutput .ID = typedResponseID
396+ case float64 :
397+ controlPlaneOutput .IDNumeric = int (typedResponseID )
398+ }
399+ }
400+
401+ return nil
402+ }
403+
389404func (s * session ) deleteResource (ctx context.Context ,
390405 path string ,
391406 kind string ,
0 commit comments