client.go raw
1 // This file is auto-generated, don't edit it. Thanks.
2 package client
3
4 import (
5 "encoding/hex"
6
7 spi "github.com/alibabacloud-go/alibabacloud-gateway-spi/client"
8 models "github.com/alibabacloud-go/darabonba-openapi/v2/models"
9 openapiutil "github.com/alibabacloud-go/darabonba-openapi/v2/utils"
10 "github.com/alibabacloud-go/tea/dara"
11 credential "github.com/aliyun/credentials-go/credentials"
12 )
13
14 type Config = models.Config
15 type GlobalParameters = models.GlobalParameters
16 type Params = models.Params
17 type OpenApiRequest = models.OpenApiRequest
18 type Client struct {
19 DisableSDKError *bool
20 Endpoint *string
21 RegionId *string
22 Protocol *string
23 Method *string
24 UserAgent *string
25 EndpointRule *string
26 EndpointMap map[string]*string
27 Suffix *string
28 ReadTimeout *int
29 ConnectTimeout *int
30 HttpProxy *string
31 HttpsProxy *string
32 Socks5Proxy *string
33 Socks5NetWork *string
34 NoProxy *string
35 Network *string
36 ProductId *string
37 MaxIdleConns *int
38 EndpointType *string
39 OpenPlatformEndpoint *string
40 Credential credential.Credential
41 SignatureVersion *string
42 SignatureAlgorithm *string
43 Headers map[string]*string
44 Spi spi.ClientInterface
45 GlobalParameters *openapiutil.GlobalParameters
46 Key *string
47 Cert *string
48 Ca *string
49 DisableHttp2 *bool
50 RetryOptions *dara.RetryOptions
51 HttpClient dara.HttpClient
52 TlsMinVersion *string
53 AttributeMap *spi.AttributeMap
54 }
55
56 // Description:
57 //
58 // # Init client with Config
59 //
60 // @param config - config contains the necessary information to create a client
61 func NewClient(config *openapiutil.Config) (*Client, error) {
62 client := new(Client)
63 err := client.Init(config)
64 return client, err
65 }
66
67 func (client *Client) Init(config *openapiutil.Config) (_err error) {
68 if dara.IsNil(config) {
69 _err = &ClientError{
70 Code: dara.String("ParameterMissing"),
71 Message: dara.String("'config' can not be unset"),
72 }
73 return _err
74 }
75
76 if (!dara.IsNil(config.AccessKeyId) && dara.StringValue(config.AccessKeyId) != "") && (!dara.IsNil(config.AccessKeySecret) && dara.StringValue(config.AccessKeySecret) != "") {
77 if !dara.IsNil(config.SecurityToken) && dara.StringValue(config.SecurityToken) != "" {
78 config.Type = dara.String("sts")
79 } else {
80 config.Type = dara.String("access_key")
81 }
82
83 credentialConfig := &credential.Config{
84 AccessKeyId: config.AccessKeyId,
85 Type: config.Type,
86 AccessKeySecret: config.AccessKeySecret,
87 }
88 credentialConfig.SecurityToken = config.SecurityToken
89 client.Credential, _err = credential.NewCredential(credentialConfig)
90 if _err != nil {
91 return _err
92 }
93
94 } else if !dara.IsNil(config.BearerToken) && dara.StringValue(config.BearerToken) != "" {
95 cc := &credential.Config{
96 Type: dara.String("bearer"),
97 BearerToken: config.BearerToken,
98 }
99 client.Credential, _err = credential.NewCredential(cc)
100 if _err != nil {
101 return _err
102 }
103
104 } else if !dara.IsNil(config.Credential) {
105 client.Credential = config.Credential
106 }
107
108 client.Endpoint = config.Endpoint
109 client.EndpointType = config.EndpointType
110 client.Network = config.Network
111 client.Suffix = config.Suffix
112 client.Protocol = config.Protocol
113 client.Method = config.Method
114 client.RegionId = config.RegionId
115 client.UserAgent = config.UserAgent
116 client.ReadTimeout = config.ReadTimeout
117 client.ConnectTimeout = config.ConnectTimeout
118 client.HttpProxy = config.HttpProxy
119 client.HttpsProxy = config.HttpsProxy
120 client.NoProxy = config.NoProxy
121 client.Socks5Proxy = config.Socks5Proxy
122 client.Socks5NetWork = config.Socks5NetWork
123 client.MaxIdleConns = config.MaxIdleConns
124 client.SignatureVersion = config.SignatureVersion
125 client.SignatureAlgorithm = config.SignatureAlgorithm
126 client.GlobalParameters = config.GlobalParameters
127 client.Key = config.Key
128 client.Cert = config.Cert
129 client.Ca = config.Ca
130 client.DisableHttp2 = config.DisableHttp2
131 client.RetryOptions = config.RetryOptions
132 client.HttpClient = config.HttpClient
133 client.TlsMinVersion = config.TlsMinVersion
134 return nil
135 }
136
137 // Description:
138 //
139 // # Encapsulate the request and invoke the network
140 //
141 // @param action - api name
142 //
143 // @param version - product version
144 //
145 // @param protocol - http or https
146 //
147 // @param method - e.g. GET
148 //
149 // @param authType - authorization type e.g. AK
150 //
151 // @param bodyType - response body type e.g. String
152 //
153 // @param request - object of OpenApiRequest
154 //
155 // @param runtime - which controls some details of call api, such as retry times
156 //
157 // @return the response
158 func (client *Client) DoRPCRequest(action *string, version *string, protocol *string, method *string, authType *string, bodyType *string, request *openapiutil.OpenApiRequest, runtime *dara.RuntimeOptions) (_result map[string]interface{}, _err error) {
159 _runtime := dara.NewRuntimeObject(map[string]interface{}{
160 "key": dara.ToString(dara.Default(dara.StringValue(runtime.Key), dara.StringValue(client.Key))),
161 "cert": dara.ToString(dara.Default(dara.StringValue(runtime.Cert), dara.StringValue(client.Cert))),
162 "ca": dara.ToString(dara.Default(dara.StringValue(runtime.Ca), dara.StringValue(client.Ca))),
163 "readTimeout": dara.ForceInt(dara.Default(dara.IntValue(runtime.ReadTimeout), dara.IntValue(client.ReadTimeout))),
164 "connectTimeout": dara.ForceInt(dara.Default(dara.IntValue(runtime.ConnectTimeout), dara.IntValue(client.ConnectTimeout))),
165 "httpProxy": dara.ToString(dara.Default(dara.StringValue(runtime.HttpProxy), dara.StringValue(client.HttpProxy))),
166 "httpsProxy": dara.ToString(dara.Default(dara.StringValue(runtime.HttpsProxy), dara.StringValue(client.HttpsProxy))),
167 "noProxy": dara.ToString(dara.Default(dara.StringValue(runtime.NoProxy), dara.StringValue(client.NoProxy))),
168 "socks5Proxy": dara.ToString(dara.Default(dara.StringValue(runtime.Socks5Proxy), dara.StringValue(client.Socks5Proxy))),
169 "socks5NetWork": dara.ToString(dara.Default(dara.StringValue(runtime.Socks5NetWork), dara.StringValue(client.Socks5NetWork))),
170 "maxIdleConns": dara.ForceInt(dara.Default(dara.IntValue(runtime.MaxIdleConns), dara.IntValue(client.MaxIdleConns))),
171 "retryOptions": client.RetryOptions,
172 "ignoreSSL": dara.BoolValue(runtime.IgnoreSSL),
173 "httpClient": client.HttpClient,
174 "tlsMinVersion": dara.StringValue(client.TlsMinVersion),
175 })
176
177 var retryPolicyContext *dara.RetryPolicyContext
178 var request_ *dara.Request
179 var response_ *dara.Response
180 var _resultErr error
181 retriesAttempted := int(0)
182 retryPolicyContext = &dara.RetryPolicyContext{
183 RetriesAttempted: retriesAttempted,
184 }
185
186 _result = make(map[string]interface{})
187 for dara.ShouldRetry(_runtime.RetryOptions, retryPolicyContext) {
188 _resultErr = nil
189 _backoffDelayTime := dara.GetBackoffDelay(_runtime.RetryOptions, retryPolicyContext)
190 dara.Sleep(_backoffDelayTime)
191
192 request_ = dara.NewRequest()
193 request_.Protocol = dara.String(dara.ToString(dara.Default(dara.StringValue(client.Protocol), dara.StringValue(protocol))))
194 request_.Method = method
195 request_.Pathname = dara.String("/")
196 globalQueries := make(map[string]*string)
197 globalHeaders := make(map[string]*string)
198 if !dara.IsNil(client.GlobalParameters) {
199 globalParams := client.GlobalParameters
200 if !dara.IsNil(globalParams.Queries) {
201 globalQueries = globalParams.Queries
202 }
203
204 if !dara.IsNil(globalParams.Headers) {
205 globalHeaders = globalParams.Headers
206 }
207
208 }
209
210 extendsHeaders := make(map[string]*string)
211 extendsQueries := make(map[string]*string)
212 if !dara.IsNil(runtime.ExtendsParameters) {
213 extendsParameters := runtime.ExtendsParameters
214 if !dara.IsNil(extendsParameters.Headers) {
215 extendsHeaders = extendsParameters.Headers
216 }
217
218 if !dara.IsNil(extendsParameters.Queries) {
219 extendsQueries = extendsParameters.Queries
220 }
221
222 }
223
224 request_.Query = dara.Merge(map[string]*string{
225 "Action": action,
226 "Format": dara.String("json"),
227 "Version": version,
228 "Timestamp": openapiutil.GetTimestamp(),
229 "SignatureNonce": openapiutil.GetNonce(),
230 }, globalQueries,
231 extendsQueries,
232 request.Query)
233 headers, _err := client.GetRpcHeaders()
234 if _err != nil {
235 retriesAttempted++
236 retryPolicyContext = &dara.RetryPolicyContext{
237 RetriesAttempted: retriesAttempted,
238 HttpRequest: request_,
239 HttpResponse: response_,
240 Exception: _err,
241 }
242 _resultErr = _err
243 continue
244 }
245
246 if dara.IsNil(headers) {
247 // endpoint is setted in product client
248 request_.Headers = dara.Merge(map[string]*string{
249 "host": client.Endpoint,
250 "x-acs-version": version,
251 "x-acs-action": action,
252 "user-agent": openapiutil.GetUserAgent(client.UserAgent),
253 }, globalHeaders,
254 extendsHeaders,
255 request.Headers)
256 } else {
257 request_.Headers = dara.Merge(map[string]*string{
258 "host": client.Endpoint,
259 "x-acs-version": version,
260 "x-acs-action": action,
261 "user-agent": openapiutil.GetUserAgent(client.UserAgent),
262 }, globalHeaders,
263 extendsHeaders,
264 request.Headers,
265 headers)
266 }
267
268 if !dara.IsNil(request.Body) {
269 m := dara.ToMap(request.Body)
270 tmp := dara.ToMap(openapiutil.Query(m))
271 request_.Body = dara.ToReader(dara.ToFormString(tmp))
272 request_.Headers["content-type"] = dara.String("application/x-www-form-urlencoded")
273 }
274
275 if dara.StringValue(authType) != "Anonymous" {
276 if dara.IsNil(client.Credential) {
277 _err = &ClientError{
278 Code: dara.String("InvalidCredentials"),
279 Message: dara.String("Please set up the credentials correctly. If you are setting them through environment variables, please ensure that ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set correctly. See https://help.aliyun.com/zh/sdk/developer-reference/configure-the-alibaba-cloud-accesskey-environment-variable-on-linux-macos-and-windows-systems for more details."),
280 }
281 if dara.BoolValue(client.DisableSDKError) != true {
282 _err = dara.TeaSDKError(_err)
283 }
284 return _result, _err
285 }
286
287 credentialModel, _err := client.Credential.GetCredential()
288 if _err != nil {
289 retriesAttempted++
290 retryPolicyContext = &dara.RetryPolicyContext{
291 RetriesAttempted: retriesAttempted,
292 HttpRequest: request_,
293 HttpResponse: response_,
294 Exception: _err,
295 }
296 _resultErr = _err
297 continue
298 }
299
300 if !dara.IsNil(credentialModel.ProviderName) {
301 request_.Headers["x-acs-credentials-provider"] = credentialModel.ProviderName
302 }
303
304 credentialType := dara.StringValue(credentialModel.Type)
305 if credentialType == "bearer" {
306 bearerToken := dara.StringValue(credentialModel.BearerToken)
307 request_.Query["BearerToken"] = dara.String(bearerToken)
308 request_.Query["SignatureType"] = dara.String("BEARERTOKEN")
309 } else if credentialType == "id_token" {
310 idToken := dara.StringValue(credentialModel.SecurityToken)
311 request_.Headers["x-acs-zero-trust-idtoken"] = dara.String(idToken)
312 } else {
313 accessKeyId := dara.StringValue(credentialModel.AccessKeyId)
314 accessKeySecret := dara.StringValue(credentialModel.AccessKeySecret)
315 securityToken := dara.StringValue(credentialModel.SecurityToken)
316 if !dara.IsNil(dara.String(securityToken)) && securityToken != "" {
317 request_.Query["SecurityToken"] = dara.String(securityToken)
318 }
319
320 request_.Query["SignatureMethod"] = dara.String("HMAC-SHA1")
321 request_.Query["SignatureVersion"] = dara.String("1.0")
322 request_.Query["AccessKeyId"] = dara.String(accessKeyId)
323 var t map[string]interface{}
324 if !dara.IsNil(request.Body) {
325 t = dara.ToMap(request.Body)
326 }
327
328 signedParam := dara.Merge(request_.Query,
329 openapiutil.Query(t))
330 request_.Query["Signature"] = openapiutil.GetRPCSignature(signedParam, request_.Method, dara.String(accessKeySecret))
331 }
332
333 }
334
335 response_, _err := dara.DoRequest(request_, _runtime)
336 if _err != nil {
337 retriesAttempted++
338 retryPolicyContext = &dara.RetryPolicyContext{
339 RetriesAttempted: retriesAttempted,
340 HttpRequest: request_,
341 HttpResponse: response_,
342 Exception: _err,
343 }
344 _resultErr = _err
345 continue
346 }
347
348 _result, _err = doRPCRequest_opResponse(response_, client, bodyType)
349 if _err != nil {
350 retriesAttempted++
351 retryPolicyContext = &dara.RetryPolicyContext{
352 RetriesAttempted: retriesAttempted,
353 HttpRequest: request_,
354 HttpResponse: response_,
355 Exception: _err,
356 }
357 _resultErr = _err
358 continue
359 }
360
361 return _result, _err
362 }
363 if dara.BoolValue(client.DisableSDKError) != true {
364 _resultErr = dara.TeaSDKError(_resultErr)
365 }
366 return _result, _resultErr
367 }
368
369 // Description:
370 //
371 // # Encapsulate the request and invoke the network
372 //
373 // @param action - api name
374 //
375 // @param version - product version
376 //
377 // @param protocol - http or https
378 //
379 // @param method - e.g. GET
380 //
381 // @param authType - authorization type e.g. AK
382 //
383 // @param pathname - pathname of every api
384 //
385 // @param bodyType - response body type e.g. String
386 //
387 // @param request - object of OpenApiRequest
388 //
389 // @param runtime - which controls some details of call api, such as retry times
390 //
391 // @return the response
392 func (client *Client) DoROARequest(action *string, version *string, protocol *string, method *string, authType *string, pathname *string, bodyType *string, request *openapiutil.OpenApiRequest, runtime *dara.RuntimeOptions) (_result map[string]interface{}, _err error) {
393 _runtime := dara.NewRuntimeObject(map[string]interface{}{
394 "key": dara.ToString(dara.Default(dara.StringValue(runtime.Key), dara.StringValue(client.Key))),
395 "cert": dara.ToString(dara.Default(dara.StringValue(runtime.Cert), dara.StringValue(client.Cert))),
396 "ca": dara.ToString(dara.Default(dara.StringValue(runtime.Ca), dara.StringValue(client.Ca))),
397 "readTimeout": dara.ForceInt(dara.Default(dara.IntValue(runtime.ReadTimeout), dara.IntValue(client.ReadTimeout))),
398 "connectTimeout": dara.ForceInt(dara.Default(dara.IntValue(runtime.ConnectTimeout), dara.IntValue(client.ConnectTimeout))),
399 "httpProxy": dara.ToString(dara.Default(dara.StringValue(runtime.HttpProxy), dara.StringValue(client.HttpProxy))),
400 "httpsProxy": dara.ToString(dara.Default(dara.StringValue(runtime.HttpsProxy), dara.StringValue(client.HttpsProxy))),
401 "noProxy": dara.ToString(dara.Default(dara.StringValue(runtime.NoProxy), dara.StringValue(client.NoProxy))),
402 "socks5Proxy": dara.ToString(dara.Default(dara.StringValue(runtime.Socks5Proxy), dara.StringValue(client.Socks5Proxy))),
403 "socks5NetWork": dara.ToString(dara.Default(dara.StringValue(runtime.Socks5NetWork), dara.StringValue(client.Socks5NetWork))),
404 "maxIdleConns": dara.ForceInt(dara.Default(dara.IntValue(runtime.MaxIdleConns), dara.IntValue(client.MaxIdleConns))),
405 "retryOptions": client.RetryOptions,
406 "ignoreSSL": dara.BoolValue(runtime.IgnoreSSL),
407 "httpClient": client.HttpClient,
408 "tlsMinVersion": dara.StringValue(client.TlsMinVersion),
409 })
410
411 var retryPolicyContext *dara.RetryPolicyContext
412 var request_ *dara.Request
413 var response_ *dara.Response
414 var _resultErr error
415 retriesAttempted := int(0)
416 retryPolicyContext = &dara.RetryPolicyContext{
417 RetriesAttempted: retriesAttempted,
418 }
419
420 _result = make(map[string]interface{})
421 for dara.ShouldRetry(_runtime.RetryOptions, retryPolicyContext) {
422 _resultErr = nil
423 _backoffDelayTime := dara.GetBackoffDelay(_runtime.RetryOptions, retryPolicyContext)
424 dara.Sleep(_backoffDelayTime)
425
426 request_ = dara.NewRequest()
427 request_.Protocol = dara.String(dara.ToString(dara.Default(dara.StringValue(client.Protocol), dara.StringValue(protocol))))
428 request_.Method = method
429 request_.Pathname = pathname
430 globalQueries := make(map[string]*string)
431 globalHeaders := make(map[string]*string)
432 if !dara.IsNil(client.GlobalParameters) {
433 globalParams := client.GlobalParameters
434 if !dara.IsNil(globalParams.Queries) {
435 globalQueries = globalParams.Queries
436 }
437
438 if !dara.IsNil(globalParams.Headers) {
439 globalHeaders = globalParams.Headers
440 }
441
442 }
443
444 extendsHeaders := make(map[string]*string)
445 extendsQueries := make(map[string]*string)
446 if !dara.IsNil(runtime.ExtendsParameters) {
447 extendsParameters := runtime.ExtendsParameters
448 if !dara.IsNil(extendsParameters.Headers) {
449 extendsHeaders = extendsParameters.Headers
450 }
451
452 if !dara.IsNil(extendsParameters.Queries) {
453 extendsQueries = extendsParameters.Queries
454 }
455
456 }
457
458 request_.Headers = dara.Merge(map[string]*string{
459 "date": openapiutil.GetDateUTCString(),
460 "host": client.Endpoint,
461 "accept": dara.String("application/json"),
462 "x-acs-signature-nonce": openapiutil.GetNonce(),
463 "x-acs-signature-method": dara.String("HMAC-SHA1"),
464 "x-acs-signature-version": dara.String("1.0"),
465 "x-acs-version": version,
466 "x-acs-action": action,
467 "user-agent": openapiutil.GetUserAgent(client.UserAgent),
468 }, globalHeaders,
469 extendsHeaders,
470 request.Headers)
471 if !dara.IsNil(request.Body) {
472 request_.Body = dara.ToReader(dara.Stringify(request.Body))
473 request_.Headers["content-type"] = dara.String("application/json; charset=utf-8")
474 }
475
476 request_.Query = dara.Merge(globalQueries,
477 extendsQueries)
478 if !dara.IsNil(request.Query) {
479 request_.Query = dara.Merge(request_.Query,
480 request.Query)
481 }
482
483 if dara.StringValue(authType) != "Anonymous" {
484 if dara.IsNil(client.Credential) {
485 _err = &ClientError{
486 Code: dara.String("InvalidCredentials"),
487 Message: dara.String("Please set up the credentials correctly. If you are setting them through environment variables, please ensure that ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set correctly. See https://help.aliyun.com/zh/sdk/developer-reference/configure-the-alibaba-cloud-accesskey-environment-variable-on-linux-macos-and-windows-systems for more details."),
488 }
489 if dara.BoolValue(client.DisableSDKError) != true {
490 _err = dara.TeaSDKError(_err)
491 }
492 return _result, _err
493 }
494
495 credentialModel, _err := client.Credential.GetCredential()
496 if _err != nil {
497 retriesAttempted++
498 retryPolicyContext = &dara.RetryPolicyContext{
499 RetriesAttempted: retriesAttempted,
500 HttpRequest: request_,
501 HttpResponse: response_,
502 Exception: _err,
503 }
504 _resultErr = _err
505 continue
506 }
507
508 if !dara.IsNil(credentialModel.ProviderName) {
509 request_.Headers["x-acs-credentials-provider"] = credentialModel.ProviderName
510 }
511
512 credentialType := dara.StringValue(credentialModel.Type)
513 if credentialType == "bearer" {
514 bearerToken := dara.StringValue(credentialModel.BearerToken)
515 request_.Headers["x-acs-bearer-token"] = dara.String(bearerToken)
516 request_.Headers["x-acs-signature-type"] = dara.String("BEARERTOKEN")
517 } else if credentialType == "id_token" {
518 idToken := dara.StringValue(credentialModel.SecurityToken)
519 request_.Headers["x-acs-zero-trust-idtoken"] = dara.String(idToken)
520 } else {
521 accessKeyId := dara.StringValue(credentialModel.AccessKeyId)
522 accessKeySecret := dara.StringValue(credentialModel.AccessKeySecret)
523 securityToken := dara.StringValue(credentialModel.SecurityToken)
524 if !dara.IsNil(dara.String(securityToken)) && securityToken != "" {
525 request_.Headers["x-acs-accesskey-id"] = dara.String(accessKeyId)
526 request_.Headers["x-acs-security-token"] = dara.String(securityToken)
527 }
528
529 stringToSign := dara.StringValue(openapiutil.GetStringToSign(request_))
530 request_.Headers["authorization"] = dara.String("acs " + accessKeyId + ":" + dara.StringValue(openapiutil.GetROASignature(dara.String(stringToSign), dara.String(accessKeySecret))))
531 }
532
533 }
534
535 response_, _err := dara.DoRequest(request_, _runtime)
536 if _err != nil {
537 retriesAttempted++
538 retryPolicyContext = &dara.RetryPolicyContext{
539 RetriesAttempted: retriesAttempted,
540 HttpRequest: request_,
541 HttpResponse: response_,
542 Exception: _err,
543 }
544 _resultErr = _err
545 continue
546 }
547
548 _result, _err = doROARequest_opResponse(response_, client, bodyType)
549 if _err != nil {
550 retriesAttempted++
551 retryPolicyContext = &dara.RetryPolicyContext{
552 RetriesAttempted: retriesAttempted,
553 HttpRequest: request_,
554 HttpResponse: response_,
555 Exception: _err,
556 }
557 _resultErr = _err
558 continue
559 }
560
561 return _result, _err
562 }
563 if dara.BoolValue(client.DisableSDKError) != true {
564 _resultErr = dara.TeaSDKError(_resultErr)
565 }
566 return _result, _resultErr
567 }
568
569 // Description:
570 //
571 // # Encapsulate the request and invoke the network with form body
572 //
573 // @param action - api name
574 //
575 // @param version - product version
576 //
577 // @param protocol - http or https
578 //
579 // @param method - e.g. GET
580 //
581 // @param authType - authorization type e.g. AK
582 //
583 // @param pathname - pathname of every api
584 //
585 // @param bodyType - response body type e.g. String
586 //
587 // @param request - object of OpenApiRequest
588 //
589 // @param runtime - which controls some details of call api, such as retry times
590 //
591 // @return the response
592 func (client *Client) DoROARequestWithForm(action *string, version *string, protocol *string, method *string, authType *string, pathname *string, bodyType *string, request *openapiutil.OpenApiRequest, runtime *dara.RuntimeOptions) (_result map[string]interface{}, _err error) {
593 _runtime := dara.NewRuntimeObject(map[string]interface{}{
594 "key": dara.ToString(dara.Default(dara.StringValue(runtime.Key), dara.StringValue(client.Key))),
595 "cert": dara.ToString(dara.Default(dara.StringValue(runtime.Cert), dara.StringValue(client.Cert))),
596 "ca": dara.ToString(dara.Default(dara.StringValue(runtime.Ca), dara.StringValue(client.Ca))),
597 "readTimeout": dara.ForceInt(dara.Default(dara.IntValue(runtime.ReadTimeout), dara.IntValue(client.ReadTimeout))),
598 "connectTimeout": dara.ForceInt(dara.Default(dara.IntValue(runtime.ConnectTimeout), dara.IntValue(client.ConnectTimeout))),
599 "httpProxy": dara.ToString(dara.Default(dara.StringValue(runtime.HttpProxy), dara.StringValue(client.HttpProxy))),
600 "httpsProxy": dara.ToString(dara.Default(dara.StringValue(runtime.HttpsProxy), dara.StringValue(client.HttpsProxy))),
601 "noProxy": dara.ToString(dara.Default(dara.StringValue(runtime.NoProxy), dara.StringValue(client.NoProxy))),
602 "socks5Proxy": dara.ToString(dara.Default(dara.StringValue(runtime.Socks5Proxy), dara.StringValue(client.Socks5Proxy))),
603 "socks5NetWork": dara.ToString(dara.Default(dara.StringValue(runtime.Socks5NetWork), dara.StringValue(client.Socks5NetWork))),
604 "maxIdleConns": dara.ForceInt(dara.Default(dara.IntValue(runtime.MaxIdleConns), dara.IntValue(client.MaxIdleConns))),
605 "retryOptions": client.RetryOptions,
606 "ignoreSSL": dara.BoolValue(runtime.IgnoreSSL),
607 "httpClient": client.HttpClient,
608 "tlsMinVersion": dara.StringValue(client.TlsMinVersion),
609 })
610
611 var retryPolicyContext *dara.RetryPolicyContext
612 var request_ *dara.Request
613 var response_ *dara.Response
614 var _resultErr error
615 retriesAttempted := int(0)
616 retryPolicyContext = &dara.RetryPolicyContext{
617 RetriesAttempted: retriesAttempted,
618 }
619
620 _result = make(map[string]interface{})
621 for dara.ShouldRetry(_runtime.RetryOptions, retryPolicyContext) {
622 _resultErr = nil
623 _backoffDelayTime := dara.GetBackoffDelay(_runtime.RetryOptions, retryPolicyContext)
624 dara.Sleep(_backoffDelayTime)
625
626 request_ = dara.NewRequest()
627 request_.Protocol = dara.String(dara.ToString(dara.Default(dara.StringValue(client.Protocol), dara.StringValue(protocol))))
628 request_.Method = method
629 request_.Pathname = pathname
630 globalQueries := make(map[string]*string)
631 globalHeaders := make(map[string]*string)
632 if !dara.IsNil(client.GlobalParameters) {
633 globalParams := client.GlobalParameters
634 if !dara.IsNil(globalParams.Queries) {
635 globalQueries = globalParams.Queries
636 }
637
638 if !dara.IsNil(globalParams.Headers) {
639 globalHeaders = globalParams.Headers
640 }
641
642 }
643
644 extendsHeaders := make(map[string]*string)
645 extendsQueries := make(map[string]*string)
646 if !dara.IsNil(runtime.ExtendsParameters) {
647 extendsParameters := runtime.ExtendsParameters
648 if !dara.IsNil(extendsParameters.Headers) {
649 extendsHeaders = extendsParameters.Headers
650 }
651
652 if !dara.IsNil(extendsParameters.Queries) {
653 extendsQueries = extendsParameters.Queries
654 }
655
656 }
657
658 request_.Headers = dara.Merge(map[string]*string{
659 "date": openapiutil.GetDateUTCString(),
660 "host": client.Endpoint,
661 "accept": dara.String("application/json"),
662 "x-acs-signature-nonce": openapiutil.GetNonce(),
663 "x-acs-signature-method": dara.String("HMAC-SHA1"),
664 "x-acs-signature-version": dara.String("1.0"),
665 "x-acs-version": version,
666 "x-acs-action": action,
667 "user-agent": openapiutil.GetUserAgent(client.UserAgent),
668 }, globalHeaders,
669 extendsHeaders,
670 request.Headers)
671 if !dara.IsNil(request.Body) {
672 m := dara.ToMap(request.Body)
673 request_.Body = dara.ToReader(openapiutil.ToForm(m))
674 request_.Headers["content-type"] = dara.String("application/x-www-form-urlencoded")
675 }
676
677 request_.Query = dara.Merge(globalQueries,
678 extendsQueries)
679 if !dara.IsNil(request.Query) {
680 request_.Query = dara.Merge(request_.Query,
681 request.Query)
682 }
683
684 if dara.StringValue(authType) != "Anonymous" {
685 if dara.IsNil(client.Credential) {
686 _err = &ClientError{
687 Code: dara.String("InvalidCredentials"),
688 Message: dara.String("Please set up the credentials correctly. If you are setting them through environment variables, please ensure that ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set correctly. See https://help.aliyun.com/zh/sdk/developer-reference/configure-the-alibaba-cloud-accesskey-environment-variable-on-linux-macos-and-windows-systems for more details."),
689 }
690 if dara.BoolValue(client.DisableSDKError) != true {
691 _err = dara.TeaSDKError(_err)
692 }
693 return _result, _err
694 }
695
696 credentialModel, _err := client.Credential.GetCredential()
697 if _err != nil {
698 retriesAttempted++
699 retryPolicyContext = &dara.RetryPolicyContext{
700 RetriesAttempted: retriesAttempted,
701 HttpRequest: request_,
702 HttpResponse: response_,
703 Exception: _err,
704 }
705 _resultErr = _err
706 continue
707 }
708
709 if !dara.IsNil(credentialModel.ProviderName) {
710 request_.Headers["x-acs-credentials-provider"] = credentialModel.ProviderName
711 }
712
713 credentialType := dara.StringValue(credentialModel.Type)
714 if credentialType == "bearer" {
715 bearerToken := dara.StringValue(credentialModel.BearerToken)
716 request_.Headers["x-acs-bearer-token"] = dara.String(bearerToken)
717 request_.Headers["x-acs-signature-type"] = dara.String("BEARERTOKEN")
718 } else if credentialType == "id_token" {
719 idToken := dara.StringValue(credentialModel.SecurityToken)
720 request_.Headers["x-acs-zero-trust-idtoken"] = dara.String(idToken)
721 } else {
722 accessKeyId := dara.StringValue(credentialModel.AccessKeyId)
723 accessKeySecret := dara.StringValue(credentialModel.AccessKeySecret)
724 securityToken := dara.StringValue(credentialModel.SecurityToken)
725 if !dara.IsNil(dara.String(securityToken)) && securityToken != "" {
726 request_.Headers["x-acs-accesskey-id"] = dara.String(accessKeyId)
727 request_.Headers["x-acs-security-token"] = dara.String(securityToken)
728 }
729
730 stringToSign := dara.StringValue(openapiutil.GetStringToSign(request_))
731 request_.Headers["authorization"] = dara.String("acs " + accessKeyId + ":" + dara.StringValue(openapiutil.GetROASignature(dara.String(stringToSign), dara.String(accessKeySecret))))
732 }
733
734 }
735
736 response_, _err := dara.DoRequest(request_, _runtime)
737 if _err != nil {
738 retriesAttempted++
739 retryPolicyContext = &dara.RetryPolicyContext{
740 RetriesAttempted: retriesAttempted,
741 HttpRequest: request_,
742 HttpResponse: response_,
743 Exception: _err,
744 }
745 _resultErr = _err
746 continue
747 }
748
749 _result, _err = doROARequestWithForm_opResponse(response_, client, bodyType)
750 if _err != nil {
751 retriesAttempted++
752 retryPolicyContext = &dara.RetryPolicyContext{
753 RetriesAttempted: retriesAttempted,
754 HttpRequest: request_,
755 HttpResponse: response_,
756 Exception: _err,
757 }
758 _resultErr = _err
759 continue
760 }
761
762 return _result, _err
763 }
764 if dara.BoolValue(client.DisableSDKError) != true {
765 _resultErr = dara.TeaSDKError(_resultErr)
766 }
767 return _result, _resultErr
768 }
769
770 // Description:
771 //
772 // # Encapsulate the request and invoke the network
773 //
774 // @param action - api name
775 //
776 // @param version - product version
777 //
778 // @param protocol - http or https
779 //
780 // @param method - e.g. GET
781 //
782 // @param authType - authorization type e.g. AK
783 //
784 // @param bodyType - response body type e.g. String
785 //
786 // @param request - object of OpenApiRequest
787 //
788 // @param runtime - which controls some details of call api, such as retry times
789 //
790 // @return the response
791 func (client *Client) DoRequest(params *openapiutil.Params, request *openapiutil.OpenApiRequest, runtime *dara.RuntimeOptions) (_result map[string]interface{}, _err error) {
792 _runtime := dara.NewRuntimeObject(map[string]interface{}{
793 "key": dara.ToString(dara.Default(dara.StringValue(runtime.Key), dara.StringValue(client.Key))),
794 "cert": dara.ToString(dara.Default(dara.StringValue(runtime.Cert), dara.StringValue(client.Cert))),
795 "ca": dara.ToString(dara.Default(dara.StringValue(runtime.Ca), dara.StringValue(client.Ca))),
796 "readTimeout": dara.ForceInt(dara.Default(dara.IntValue(runtime.ReadTimeout), dara.IntValue(client.ReadTimeout))),
797 "connectTimeout": dara.ForceInt(dara.Default(dara.IntValue(runtime.ConnectTimeout), dara.IntValue(client.ConnectTimeout))),
798 "httpProxy": dara.ToString(dara.Default(dara.StringValue(runtime.HttpProxy), dara.StringValue(client.HttpProxy))),
799 "httpsProxy": dara.ToString(dara.Default(dara.StringValue(runtime.HttpsProxy), dara.StringValue(client.HttpsProxy))),
800 "noProxy": dara.ToString(dara.Default(dara.StringValue(runtime.NoProxy), dara.StringValue(client.NoProxy))),
801 "socks5Proxy": dara.ToString(dara.Default(dara.StringValue(runtime.Socks5Proxy), dara.StringValue(client.Socks5Proxy))),
802 "socks5NetWork": dara.ToString(dara.Default(dara.StringValue(runtime.Socks5NetWork), dara.StringValue(client.Socks5NetWork))),
803 "maxIdleConns": dara.ForceInt(dara.Default(dara.IntValue(runtime.MaxIdleConns), dara.IntValue(client.MaxIdleConns))),
804 "retryOptions": client.RetryOptions,
805 "ignoreSSL": dara.BoolValue(runtime.IgnoreSSL),
806 "httpClient": client.HttpClient,
807 "tlsMinVersion": dara.StringValue(client.TlsMinVersion),
808 })
809
810 var retryPolicyContext *dara.RetryPolicyContext
811 var request_ *dara.Request
812 var response_ *dara.Response
813 var _resultErr error
814 retriesAttempted := int(0)
815 retryPolicyContext = &dara.RetryPolicyContext{
816 RetriesAttempted: retriesAttempted,
817 }
818
819 _result = make(map[string]interface{})
820 for dara.ShouldRetry(_runtime.RetryOptions, retryPolicyContext) {
821 _resultErr = nil
822 _backoffDelayTime := dara.GetBackoffDelay(_runtime.RetryOptions, retryPolicyContext)
823 dara.Sleep(_backoffDelayTime)
824
825 request_ = dara.NewRequest()
826 request_.Protocol = dara.String(dara.ToString(dara.Default(dara.StringValue(client.Protocol), dara.StringValue(params.Protocol))))
827 request_.Method = params.Method
828 request_.Pathname = params.Pathname
829 globalQueries := make(map[string]*string)
830 globalHeaders := make(map[string]*string)
831 if !dara.IsNil(client.GlobalParameters) {
832 globalParams := client.GlobalParameters
833 if !dara.IsNil(globalParams.Queries) {
834 globalQueries = globalParams.Queries
835 }
836
837 if !dara.IsNil(globalParams.Headers) {
838 globalHeaders = globalParams.Headers
839 }
840
841 }
842
843 extendsHeaders := make(map[string]*string)
844 extendsQueries := make(map[string]*string)
845 if !dara.IsNil(runtime.ExtendsParameters) {
846 extendsParameters := runtime.ExtendsParameters
847 if !dara.IsNil(extendsParameters.Headers) {
848 extendsHeaders = extendsParameters.Headers
849 }
850
851 if !dara.IsNil(extendsParameters.Queries) {
852 extendsQueries = extendsParameters.Queries
853 }
854
855 }
856
857 request_.Query = dara.Merge(globalQueries,
858 extendsQueries,
859 request.Query)
860 // endpoint is setted in product client
861 request_.Headers = dara.Merge(map[string]*string{
862 "host": client.Endpoint,
863 "x-acs-version": params.Version,
864 "x-acs-action": params.Action,
865 "user-agent": openapiutil.GetUserAgent(client.UserAgent),
866 "x-acs-date": openapiutil.GetTimestamp(),
867 "x-acs-signature-nonce": openapiutil.GetNonce(),
868 "accept": dara.String("application/json"),
869 }, globalHeaders,
870 extendsHeaders,
871 request.Headers)
872 if dara.StringValue(params.Style) == "RPC" {
873 headers, _err := client.GetRpcHeaders()
874 if _err != nil {
875 retriesAttempted++
876 retryPolicyContext = &dara.RetryPolicyContext{
877 RetriesAttempted: retriesAttempted,
878 HttpRequest: request_,
879 HttpResponse: response_,
880 Exception: _err,
881 }
882 _resultErr = _err
883 continue
884 }
885
886 if !dara.IsNil(headers) {
887 request_.Headers = dara.Merge(request_.Headers,
888 headers)
889 }
890
891 }
892
893 signatureAlgorithm := dara.ToString(dara.Default(dara.StringValue(client.SignatureAlgorithm), "ACS3-HMAC-SHA256"))
894 hashedRequestPayload := openapiutil.Hash(dara.BytesFromString("", "utf-8"), dara.String(signatureAlgorithm))
895 if !dara.IsNil(request.Stream) {
896 tmp, _err := dara.ReadAsBytes(request.Stream)
897 if _err != nil {
898 retriesAttempted++
899 retryPolicyContext = &dara.RetryPolicyContext{
900 RetriesAttempted: retriesAttempted,
901 HttpRequest: request_,
902 HttpResponse: response_,
903 Exception: _err,
904 }
905 _resultErr = _err
906 continue
907 }
908
909 hashedRequestPayload = openapiutil.Hash(tmp, dara.String(signatureAlgorithm))
910 request_.Body = dara.ToReader(tmp)
911 request_.Headers["content-type"] = dara.String("application/octet-stream")
912 } else {
913 if !dara.IsNil(request.Body) {
914 if dara.StringValue(params.ReqBodyType) == "byte" {
915 byteObj := []byte(dara.ToString(request.Body))
916 hashedRequestPayload = openapiutil.Hash(byteObj, dara.String(signatureAlgorithm))
917 request_.Body = dara.ToReader(byteObj)
918 } else if dara.StringValue(params.ReqBodyType) == "json" {
919 jsonObj := dara.Stringify(request.Body)
920 hashedRequestPayload = openapiutil.Hash(dara.ToBytes(jsonObj, "utf8"), dara.String(signatureAlgorithm))
921 request_.Body = dara.ToReader(dara.String(jsonObj))
922 request_.Headers["content-type"] = dara.String("application/json; charset=utf-8")
923 } else {
924 m := dara.ToMap(request.Body)
925 formObj := dara.StringValue(openapiutil.ToForm(m))
926 hashedRequestPayload = openapiutil.Hash(dara.ToBytes(formObj, "utf8"), dara.String(signatureAlgorithm))
927 request_.Body = dara.ToReader(dara.String(formObj))
928 request_.Headers["content-type"] = dara.String("application/x-www-form-urlencoded")
929 }
930
931 }
932
933 }
934
935 request_.Headers["x-acs-content-sha256"] = dara.String(hex.EncodeToString(hashedRequestPayload))
936 if dara.StringValue(params.AuthType) != "Anonymous" {
937 if dara.IsNil(client.Credential) {
938 _err = &ClientError{
939 Code: dara.String("InvalidCredentials"),
940 Message: dara.String("Please set up the credentials correctly. If you are setting them through environment variables, please ensure that ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set correctly. See https://help.aliyun.com/zh/sdk/developer-reference/configure-the-alibaba-cloud-accesskey-environment-variable-on-linux-macos-and-windows-systems for more details."),
941 }
942 if dara.BoolValue(client.DisableSDKError) != true {
943 _err = dara.TeaSDKError(_err)
944 }
945 return _result, _err
946 }
947
948 credentialModel, _err := client.Credential.GetCredential()
949 if _err != nil {
950 retriesAttempted++
951 retryPolicyContext = &dara.RetryPolicyContext{
952 RetriesAttempted: retriesAttempted,
953 HttpRequest: request_,
954 HttpResponse: response_,
955 Exception: _err,
956 }
957 _resultErr = _err
958 continue
959 }
960
961 if !dara.IsNil(credentialModel.ProviderName) {
962 request_.Headers["x-acs-credentials-provider"] = credentialModel.ProviderName
963 }
964
965 authType := dara.StringValue(credentialModel.Type)
966 if authType == "bearer" {
967 bearerToken := dara.StringValue(credentialModel.BearerToken)
968 request_.Headers["x-acs-bearer-token"] = dara.String(bearerToken)
969 if dara.StringValue(params.Style) == "RPC" {
970 request_.Query["SignatureType"] = dara.String("BEARERTOKEN")
971 } else {
972 request_.Headers["x-acs-signature-type"] = dara.String("BEARERTOKEN")
973 }
974
975 } else if authType == "id_token" {
976 idToken := dara.StringValue(credentialModel.SecurityToken)
977 request_.Headers["x-acs-zero-trust-idtoken"] = dara.String(idToken)
978 } else {
979 accessKeyId := dara.StringValue(credentialModel.AccessKeyId)
980 accessKeySecret := dara.StringValue(credentialModel.AccessKeySecret)
981 securityToken := dara.StringValue(credentialModel.SecurityToken)
982 if !dara.IsNil(dara.String(securityToken)) && securityToken != "" {
983 request_.Headers["x-acs-accesskey-id"] = dara.String(accessKeyId)
984 request_.Headers["x-acs-security-token"] = dara.String(securityToken)
985 }
986
987 request_.Headers["Authorization"] = openapiutil.GetAuthorization(request_, dara.String(signatureAlgorithm), dara.String(hex.EncodeToString(hashedRequestPayload)), dara.String(accessKeyId), dara.String(accessKeySecret))
988 }
989
990 }
991
992 response_, _err := dara.DoRequest(request_, _runtime)
993 if _err != nil {
994 retriesAttempted++
995 retryPolicyContext = &dara.RetryPolicyContext{
996 RetriesAttempted: retriesAttempted,
997 HttpRequest: request_,
998 HttpResponse: response_,
999 Exception: _err,
1000 }
1001 _resultErr = _err
1002 continue
1003 }
1004
1005 _result, _err = doRequest_opResponse(response_, client, params)
1006 if _err != nil {
1007 retriesAttempted++
1008 retryPolicyContext = &dara.RetryPolicyContext{
1009 RetriesAttempted: retriesAttempted,
1010 HttpRequest: request_,
1011 HttpResponse: response_,
1012 Exception: _err,
1013 }
1014 _resultErr = _err
1015 continue
1016 }
1017
1018 return _result, _err
1019 }
1020 if dara.BoolValue(client.DisableSDKError) != true {
1021 _resultErr = dara.TeaSDKError(_resultErr)
1022 }
1023 return _result, _resultErr
1024 }
1025
1026 // Description:
1027 //
1028 // # Encapsulate the request and invoke the network
1029 //
1030 // @param action - api name
1031 //
1032 // @param version - product version
1033 //
1034 // @param protocol - http or https
1035 //
1036 // @param method - e.g. GET
1037 //
1038 // @param authType - authorization type e.g. AK
1039 //
1040 // @param bodyType - response body type e.g. String
1041 //
1042 // @param request - object of OpenApiRequest
1043 //
1044 // @param runtime - which controls some details of call api, such as retry times
1045 //
1046 // @return the response
1047 func (client *Client) Execute(params *openapiutil.Params, request *openapiutil.OpenApiRequest, runtime *dara.RuntimeOptions) (_result map[string]interface{}, _err error) {
1048 _runtime := dara.NewRuntimeObject(map[string]interface{}{
1049 "key": dara.ToString(dara.Default(dara.StringValue(runtime.Key), dara.StringValue(client.Key))),
1050 "cert": dara.ToString(dara.Default(dara.StringValue(runtime.Cert), dara.StringValue(client.Cert))),
1051 "ca": dara.ToString(dara.Default(dara.StringValue(runtime.Ca), dara.StringValue(client.Ca))),
1052 "readTimeout": dara.ForceInt(dara.Default(dara.IntValue(runtime.ReadTimeout), dara.IntValue(client.ReadTimeout))),
1053 "connectTimeout": dara.ForceInt(dara.Default(dara.IntValue(runtime.ConnectTimeout), dara.IntValue(client.ConnectTimeout))),
1054 "httpProxy": dara.ToString(dara.Default(dara.StringValue(runtime.HttpProxy), dara.StringValue(client.HttpProxy))),
1055 "httpsProxy": dara.ToString(dara.Default(dara.StringValue(runtime.HttpsProxy), dara.StringValue(client.HttpsProxy))),
1056 "noProxy": dara.ToString(dara.Default(dara.StringValue(runtime.NoProxy), dara.StringValue(client.NoProxy))),
1057 "socks5Proxy": dara.ToString(dara.Default(dara.StringValue(runtime.Socks5Proxy), dara.StringValue(client.Socks5Proxy))),
1058 "socks5NetWork": dara.ToString(dara.Default(dara.StringValue(runtime.Socks5NetWork), dara.StringValue(client.Socks5NetWork))),
1059 "maxIdleConns": dara.ForceInt(dara.Default(dara.IntValue(runtime.MaxIdleConns), dara.IntValue(client.MaxIdleConns))),
1060 "retryOptions": client.RetryOptions,
1061 "ignoreSSL": dara.BoolValue(runtime.IgnoreSSL),
1062 "httpClient": client.HttpClient,
1063 "tlsMinVersion": dara.StringValue(client.TlsMinVersion),
1064 "disableHttp2": dara.ForceBoolean(dara.Default(dara.BoolValue(client.DisableHttp2), false)),
1065 })
1066
1067 var retryPolicyContext *dara.RetryPolicyContext
1068 var request_ *dara.Request
1069 var response_ *dara.Response
1070 var _resultErr error
1071 retriesAttempted := int(0)
1072 retryPolicyContext = &dara.RetryPolicyContext{
1073 RetriesAttempted: retriesAttempted,
1074 }
1075
1076 _result = make(map[string]interface{})
1077 for dara.ShouldRetry(_runtime.RetryOptions, retryPolicyContext) {
1078 _resultErr = nil
1079 _backoffDelayTime := dara.GetBackoffDelay(_runtime.RetryOptions, retryPolicyContext)
1080 dara.Sleep(_backoffDelayTime)
1081
1082 request_ = dara.NewRequest()
1083 // spi = new Gateway();//Gateway implements SPI,这一步在产品 SDK 中实例化
1084 headers, _err := client.GetRpcHeaders()
1085 if _err != nil {
1086 retriesAttempted++
1087 retryPolicyContext = &dara.RetryPolicyContext{
1088 RetriesAttempted: retriesAttempted,
1089 HttpRequest: request_,
1090 HttpResponse: response_,
1091 Exception: _err,
1092 }
1093 _resultErr = _err
1094 continue
1095 }
1096
1097 globalQueries := make(map[string]*string)
1098 globalHeaders := make(map[string]*string)
1099 if !dara.IsNil(client.GlobalParameters) {
1100 globalParams := client.GlobalParameters
1101 if !dara.IsNil(globalParams.Queries) {
1102 globalQueries = globalParams.Queries
1103 }
1104
1105 if !dara.IsNil(globalParams.Headers) {
1106 globalHeaders = globalParams.Headers
1107 }
1108
1109 }
1110
1111 extendsHeaders := make(map[string]*string)
1112 extendsQueries := make(map[string]*string)
1113 if !dara.IsNil(runtime.ExtendsParameters) {
1114 extendsParameters := runtime.ExtendsParameters
1115 if !dara.IsNil(extendsParameters.Headers) {
1116 extendsHeaders = extendsParameters.Headers
1117 }
1118
1119 if !dara.IsNil(extendsParameters.Queries) {
1120 extendsQueries = extendsParameters.Queries
1121 }
1122
1123 }
1124
1125 requestContext := &spi.InterceptorContextRequest{
1126 Headers: dara.Merge(globalHeaders,
1127 extendsHeaders,
1128 request.Headers,
1129 headers),
1130 Query: dara.Merge(globalQueries,
1131 extendsQueries,
1132 request.Query),
1133 Body: request.Body,
1134 Stream: request.Stream,
1135 HostMap: request.HostMap,
1136 Pathname: params.Pathname,
1137 ProductId: client.ProductId,
1138 Action: params.Action,
1139 Version: params.Version,
1140 Protocol: dara.String(dara.ToString(dara.Default(dara.StringValue(client.Protocol), dara.StringValue(params.Protocol)))),
1141 Method: dara.String(dara.ToString(dara.Default(dara.StringValue(client.Method), dara.StringValue(params.Method)))),
1142 AuthType: params.AuthType,
1143 BodyType: params.BodyType,
1144 ReqBodyType: params.ReqBodyType,
1145 Style: params.Style,
1146 Credential: client.Credential,
1147 SignatureVersion: client.SignatureVersion,
1148 SignatureAlgorithm: client.SignatureAlgorithm,
1149 UserAgent: openapiutil.GetUserAgent(client.UserAgent),
1150 }
1151 configurationContext := &spi.InterceptorContextConfiguration{
1152 RegionId: client.RegionId,
1153 Endpoint: dara.String(dara.ToString(dara.Default(dara.StringValue(request.EndpointOverride), dara.StringValue(client.Endpoint)))),
1154 EndpointRule: client.EndpointRule,
1155 EndpointMap: client.EndpointMap,
1156 EndpointType: client.EndpointType,
1157 Network: client.Network,
1158 Suffix: client.Suffix,
1159 }
1160 interceptorContext := &spi.InterceptorContext{
1161 Request: requestContext,
1162 Configuration: configurationContext,
1163 }
1164 attributeMap := &spi.AttributeMap{}
1165 if !dara.IsNil(client.AttributeMap) {
1166 attributeMap = client.AttributeMap
1167 }
1168
1169 // 1. spi.modifyConfiguration(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
1170 _err = client.Spi.ModifyConfiguration(interceptorContext, attributeMap)
1171 if _err != nil {
1172 retriesAttempted++
1173 retryPolicyContext = &dara.RetryPolicyContext{
1174 RetriesAttempted: retriesAttempted,
1175 HttpRequest: request_,
1176 HttpResponse: response_,
1177 Exception: _err,
1178 }
1179 _resultErr = _err
1180 continue
1181 }
1182
1183 // 2. spi.modifyRequest(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
1184 _err = client.Spi.ModifyRequest(interceptorContext, attributeMap)
1185 if _err != nil {
1186 retriesAttempted++
1187 retryPolicyContext = &dara.RetryPolicyContext{
1188 RetriesAttempted: retriesAttempted,
1189 HttpRequest: request_,
1190 HttpResponse: response_,
1191 Exception: _err,
1192 }
1193 _resultErr = _err
1194 continue
1195 }
1196
1197 request_.Protocol = interceptorContext.Request.Protocol
1198 request_.Method = interceptorContext.Request.Method
1199 request_.Pathname = interceptorContext.Request.Pathname
1200 request_.Query = interceptorContext.Request.Query
1201 request_.Body = interceptorContext.Request.Stream
1202 request_.Headers = interceptorContext.Request.Headers
1203 response_, _err := dara.DoRequest(request_, _runtime)
1204 if _err != nil {
1205 retriesAttempted++
1206 retryPolicyContext = &dara.RetryPolicyContext{
1207 RetriesAttempted: retriesAttempted,
1208 HttpRequest: request_,
1209 HttpResponse: response_,
1210 Exception: _err,
1211 }
1212 _resultErr = _err
1213 continue
1214 }
1215
1216 responseContext := &spi.InterceptorContextResponse{
1217 StatusCode: response_.StatusCode,
1218 Headers: response_.Headers,
1219 Body: response_.Body,
1220 }
1221 interceptorContext.Response = responseContext
1222 // 3. spi.modifyResponse(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
1223 _err = client.Spi.ModifyResponse(interceptorContext, attributeMap)
1224 if _err != nil {
1225 retriesAttempted++
1226 retryPolicyContext = &dara.RetryPolicyContext{
1227 RetriesAttempted: retriesAttempted,
1228 HttpRequest: request_,
1229 HttpResponse: response_,
1230 Exception: _err,
1231 }
1232 _resultErr = _err
1233 continue
1234 }
1235
1236 _err = dara.Convert(map[string]interface{}{
1237 "headers": interceptorContext.Response.Headers,
1238 "statusCode": dara.IntValue(interceptorContext.Response.StatusCode),
1239 "body": interceptorContext.Response.DeserializedBody,
1240 }, &_result)
1241
1242 return _result, _err
1243 }
1244 if dara.BoolValue(client.DisableSDKError) != true {
1245 _resultErr = dara.TeaSDKError(_resultErr)
1246 }
1247 return _result, _resultErr
1248 }
1249
1250 func (client *Client) CallSSEApi(params *openapiutil.Params, request *openapiutil.OpenApiRequest, runtime *dara.RuntimeOptions, _yield chan *SSEResponse, _yieldErr chan error) {
1251 defer close(_yield)
1252 defer close(_yieldErr)
1253 _runtime := dara.NewRuntimeObject(map[string]interface{}{
1254 "key": dara.ToString(dara.Default(dara.StringValue(runtime.Key), dara.StringValue(client.Key))),
1255 "cert": dara.ToString(dara.Default(dara.StringValue(runtime.Cert), dara.StringValue(client.Cert))),
1256 "ca": dara.ToString(dara.Default(dara.StringValue(runtime.Ca), dara.StringValue(client.Ca))),
1257 "readTimeout": dara.ForceInt(dara.Default(dara.IntValue(runtime.ReadTimeout), dara.IntValue(client.ReadTimeout))),
1258 "connectTimeout": dara.ForceInt(dara.Default(dara.IntValue(runtime.ConnectTimeout), dara.IntValue(client.ConnectTimeout))),
1259 "httpProxy": dara.ToString(dara.Default(dara.StringValue(runtime.HttpProxy), dara.StringValue(client.HttpProxy))),
1260 "httpsProxy": dara.ToString(dara.Default(dara.StringValue(runtime.HttpsProxy), dara.StringValue(client.HttpsProxy))),
1261 "noProxy": dara.ToString(dara.Default(dara.StringValue(runtime.NoProxy), dara.StringValue(client.NoProxy))),
1262 "socks5Proxy": dara.ToString(dara.Default(dara.StringValue(runtime.Socks5Proxy), dara.StringValue(client.Socks5Proxy))),
1263 "socks5NetWork": dara.ToString(dara.Default(dara.StringValue(runtime.Socks5NetWork), dara.StringValue(client.Socks5NetWork))),
1264 "maxIdleConns": dara.ForceInt(dara.Default(dara.IntValue(runtime.MaxIdleConns), dara.IntValue(client.MaxIdleConns))),
1265 "retryOptions": client.RetryOptions,
1266 "ignoreSSL": dara.BoolValue(runtime.IgnoreSSL),
1267 "httpClient": client.HttpClient,
1268 "tlsMinVersion": dara.StringValue(client.TlsMinVersion),
1269 })
1270
1271 var retryPolicyContext *dara.RetryPolicyContext
1272 var request_ *dara.Request
1273 var response_ *dara.Response
1274 var _resultErr error
1275 retriesAttempted := int(0)
1276 retryPolicyContext = &dara.RetryPolicyContext{
1277 RetriesAttempted: retriesAttempted,
1278 }
1279
1280 for dara.ShouldRetry(_runtime.RetryOptions, retryPolicyContext) {
1281 _resultErr = nil
1282 _backoffDelayTime := dara.GetBackoffDelay(_runtime.RetryOptions, retryPolicyContext)
1283 dara.Sleep(_backoffDelayTime)
1284
1285 request_ = dara.NewRequest()
1286 request_.Protocol = dara.String(dara.ToString(dara.Default(dara.StringValue(client.Protocol), dara.StringValue(params.Protocol))))
1287 request_.Method = params.Method
1288 request_.Pathname = params.Pathname
1289 globalQueries := make(map[string]*string)
1290 globalHeaders := make(map[string]*string)
1291 if !dara.IsNil(client.GlobalParameters) {
1292 globalParams := client.GlobalParameters
1293 if !dara.IsNil(globalParams.Queries) {
1294 globalQueries = globalParams.Queries
1295 }
1296
1297 if !dara.IsNil(globalParams.Headers) {
1298 globalHeaders = globalParams.Headers
1299 }
1300
1301 }
1302
1303 extendsHeaders := make(map[string]*string)
1304 extendsQueries := make(map[string]*string)
1305 if !dara.IsNil(runtime.ExtendsParameters) {
1306 extendsParameters := runtime.ExtendsParameters
1307 if !dara.IsNil(extendsParameters.Headers) {
1308 extendsHeaders = extendsParameters.Headers
1309 }
1310
1311 if !dara.IsNil(extendsParameters.Queries) {
1312 extendsQueries = extendsParameters.Queries
1313 }
1314
1315 }
1316
1317 request_.Query = dara.Merge(globalQueries,
1318 extendsQueries,
1319 request.Query)
1320 // endpoint is setted in product client
1321 request_.Headers = dara.Merge(map[string]*string{
1322 "host": client.Endpoint,
1323 "x-acs-version": params.Version,
1324 "x-acs-action": params.Action,
1325 "user-agent": openapiutil.GetUserAgent(client.UserAgent),
1326 "x-acs-date": openapiutil.GetTimestamp(),
1327 "x-acs-signature-nonce": openapiutil.GetNonce(),
1328 "accept": dara.String("application/json"),
1329 }, extendsHeaders,
1330 globalHeaders,
1331 request.Headers)
1332 if dara.StringValue(params.Style) == "RPC" {
1333 headers, _err := client.GetRpcHeaders()
1334 if _err != nil {
1335 retriesAttempted++
1336 retryPolicyContext = &dara.RetryPolicyContext{
1337 RetriesAttempted: retriesAttempted,
1338 HttpRequest: request_,
1339 HttpResponse: response_,
1340 Exception: _err,
1341 }
1342 _resultErr = _err
1343 continue
1344 }
1345
1346 if !dara.IsNil(headers) {
1347 request_.Headers = dara.Merge(request_.Headers,
1348 headers)
1349 }
1350
1351 }
1352
1353 signatureAlgorithm := dara.ToString(dara.Default(dara.StringValue(client.SignatureAlgorithm), "ACS3-HMAC-SHA256"))
1354 hashedRequestPayload := openapiutil.Hash(dara.BytesFromString("", "utf-8"), dara.String(signatureAlgorithm))
1355 if !dara.IsNil(request.Stream) {
1356 tmp, _err := dara.ReadAsBytes(request.Stream)
1357 if _err != nil {
1358 retriesAttempted++
1359 retryPolicyContext = &dara.RetryPolicyContext{
1360 RetriesAttempted: retriesAttempted,
1361 HttpRequest: request_,
1362 HttpResponse: response_,
1363 Exception: _err,
1364 }
1365 _resultErr = _err
1366 continue
1367 }
1368
1369 hashedRequestPayload = openapiutil.Hash(tmp, dara.String(signatureAlgorithm))
1370 request_.Body = dara.ToReader(tmp)
1371 request_.Headers["content-type"] = dara.String("application/octet-stream")
1372 } else {
1373 if !dara.IsNil(request.Body) {
1374 if dara.StringValue(params.ReqBodyType) == "byte" {
1375 byteObj := []byte(dara.ToString(request.Body))
1376 hashedRequestPayload = openapiutil.Hash(byteObj, dara.String(signatureAlgorithm))
1377 request_.Body = dara.ToReader(byteObj)
1378 } else if dara.StringValue(params.ReqBodyType) == "json" {
1379 jsonObj := dara.Stringify(request.Body)
1380 hashedRequestPayload = openapiutil.Hash(dara.ToBytes(jsonObj, "utf8"), dara.String(signatureAlgorithm))
1381 request_.Body = dara.ToReader(dara.String(jsonObj))
1382 request_.Headers["content-type"] = dara.String("application/json; charset=utf-8")
1383 } else {
1384 m := dara.ToMap(request.Body)
1385 formObj := dara.StringValue(openapiutil.ToForm(m))
1386 hashedRequestPayload = openapiutil.Hash(dara.ToBytes(formObj, "utf8"), dara.String(signatureAlgorithm))
1387 request_.Body = dara.ToReader(dara.String(formObj))
1388 request_.Headers["content-type"] = dara.String("application/x-www-form-urlencoded")
1389 }
1390
1391 }
1392
1393 }
1394
1395 request_.Headers["x-acs-content-sha256"] = dara.String(hex.EncodeToString(hashedRequestPayload))
1396 if dara.StringValue(params.AuthType) != "Anonymous" {
1397 credentialModel, _err := client.Credential.GetCredential()
1398 if _err != nil {
1399 retriesAttempted++
1400 retryPolicyContext = &dara.RetryPolicyContext{
1401 RetriesAttempted: retriesAttempted,
1402 HttpRequest: request_,
1403 HttpResponse: response_,
1404 Exception: _err,
1405 }
1406 _resultErr = _err
1407 continue
1408 }
1409
1410 if !dara.IsNil(credentialModel.ProviderName) {
1411 request_.Headers["x-acs-credentials-provider"] = credentialModel.ProviderName
1412 }
1413
1414 authType := dara.StringValue(credentialModel.Type)
1415 if authType == "bearer" {
1416 bearerToken := dara.StringValue(credentialModel.BearerToken)
1417 request_.Headers["x-acs-bearer-token"] = dara.String(bearerToken)
1418 } else if authType == "id_token" {
1419 idToken := dara.StringValue(credentialModel.SecurityToken)
1420 request_.Headers["x-acs-zero-trust-idtoken"] = dara.String(idToken)
1421 } else {
1422 accessKeyId := dara.StringValue(credentialModel.AccessKeyId)
1423 accessKeySecret := dara.StringValue(credentialModel.AccessKeySecret)
1424 securityToken := dara.StringValue(credentialModel.SecurityToken)
1425 if !dara.IsNil(dara.String(securityToken)) && securityToken != "" {
1426 request_.Headers["x-acs-accesskey-id"] = dara.String(accessKeyId)
1427 request_.Headers["x-acs-security-token"] = dara.String(securityToken)
1428 }
1429
1430 request_.Headers["Authorization"] = openapiutil.GetAuthorization(request_, dara.String(signatureAlgorithm), dara.String(hex.EncodeToString(hashedRequestPayload)), dara.String(accessKeyId), dara.String(accessKeySecret))
1431 }
1432
1433 }
1434
1435 response_, _err := dara.DoRequest(request_, _runtime)
1436 if _err != nil {
1437 retriesAttempted++
1438 retryPolicyContext = &dara.RetryPolicyContext{
1439 RetriesAttempted: retriesAttempted,
1440 HttpRequest: request_,
1441 HttpResponse: response_,
1442 Exception: _err,
1443 }
1444 _resultErr = _err
1445 continue
1446 }
1447
1448 callSSEApi_opResponse(_yield, _yieldErr, response_)
1449 return
1450 }
1451 _yieldErr <- _resultErr
1452 return
1453 }
1454
1455 func (client *Client) CallApi(params *openapiutil.Params, request *openapiutil.OpenApiRequest, runtime *dara.RuntimeOptions) (_result map[string]interface{}, _err error) {
1456 if dara.IsNil(params) {
1457 _err = &ClientError{
1458 Code: dara.String("ParameterMissing"),
1459 Message: dara.String("'params' can not be unset"),
1460 }
1461 return _result, _err
1462 }
1463
1464 if dara.IsNil(client.SignatureVersion) || dara.StringValue(client.SignatureVersion) != "v4" {
1465 if dara.IsNil(client.SignatureAlgorithm) || dara.StringValue(client.SignatureAlgorithm) != "v2" {
1466 _body, _err := client.DoRequest(params, request, runtime)
1467 if _err != nil {
1468 return _result, _err
1469 }
1470 _result = _body
1471 return _result, _err
1472 } else if (dara.StringValue(params.Style) == "ROA") && (dara.StringValue(params.ReqBodyType) == "json") {
1473 _body, _err := client.DoROARequest(params.Action, params.Version, params.Protocol, params.Method, params.AuthType, params.Pathname, params.BodyType, request, runtime)
1474 if _err != nil {
1475 return _result, _err
1476 }
1477 _result = _body
1478 return _result, _err
1479 } else if dara.StringValue(params.Style) == "ROA" {
1480 _body, _err := client.DoROARequestWithForm(params.Action, params.Version, params.Protocol, params.Method, params.AuthType, params.Pathname, params.BodyType, request, runtime)
1481 if _err != nil {
1482 return _result, _err
1483 }
1484 _result = _body
1485 return _result, _err
1486 } else {
1487 _body, _err := client.DoRPCRequest(params.Action, params.Version, params.Protocol, params.Method, params.AuthType, params.BodyType, request, runtime)
1488 if _err != nil {
1489 return _result, _err
1490 }
1491 _result = _body
1492 return _result, _err
1493 }
1494
1495 } else {
1496 _body, _err := client.Execute(params, request, runtime)
1497 if _err != nil {
1498 return _result, _err
1499 }
1500 _result = _body
1501 return _result, _err
1502 }
1503
1504 }
1505
1506 // Description:
1507 //
1508 // # Get accesskey id by using credential
1509 //
1510 // @return accesskey id
1511 func (client *Client) GetAccessKeyId() (_result *string, _err error) {
1512 if dara.IsNil(client.Credential) {
1513 _result = dara.String("")
1514 return _result, _err
1515 }
1516
1517 accessKeyIdTmp, _err := client.Credential.GetAccessKeyId()
1518 accessKeyId := dara.StringValue(accessKeyIdTmp)
1519 if _err != nil {
1520 return _result, _err
1521 }
1522
1523 _result = dara.String(accessKeyId)
1524 return _result, _err
1525 }
1526
1527 // Description:
1528 //
1529 // # Get accesskey secret by using credential
1530 //
1531 // @return accesskey secret
1532 func (client *Client) GetAccessKeySecret() (_result *string, _err error) {
1533 if dara.IsNil(client.Credential) {
1534 _result = dara.String("")
1535 return _result, _err
1536 }
1537
1538 secretTmp, _err := client.Credential.GetAccessKeySecret()
1539 secret := dara.StringValue(secretTmp)
1540 if _err != nil {
1541 return _result, _err
1542 }
1543
1544 _result = dara.String(secret)
1545 return _result, _err
1546 }
1547
1548 // Description:
1549 //
1550 // # Get security token by using credential
1551 //
1552 // @return security token
1553 func (client *Client) GetSecurityToken() (_result *string, _err error) {
1554 if dara.IsNil(client.Credential) {
1555 _result = dara.String("")
1556 return _result, _err
1557 }
1558
1559 tokenTmp, _err := client.Credential.GetSecurityToken()
1560 token := dara.StringValue(tokenTmp)
1561 if _err != nil {
1562 return _result, _err
1563 }
1564
1565 _result = dara.String(token)
1566 return _result, _err
1567 }
1568
1569 // Description:
1570 //
1571 // # Get bearer token by credential
1572 //
1573 // @return bearer token
1574 func (client *Client) GetBearerToken() (_result *string, _err error) {
1575 if dara.IsNil(client.Credential) {
1576 _result = dara.String("")
1577 return _result, _err
1578 }
1579
1580 token := dara.StringValue(client.Credential.GetBearerToken())
1581 _result = dara.String(token)
1582 return _result, _err
1583 }
1584
1585 // Description:
1586 //
1587 // # Get credential type by credential
1588 //
1589 // @return credential type e.g. access_key
1590 func (client *Client) GetType() (_result *string, _err error) {
1591 if dara.IsNil(client.Credential) {
1592 _result = dara.String("")
1593 return _result, _err
1594 }
1595
1596 authType := dara.StringValue(client.Credential.GetType())
1597 _result = dara.String(authType)
1598 return _result, _err
1599 }
1600
1601 // Description:
1602 //
1603 // # If the endpointRule and config.endpoint are empty, throw error
1604 //
1605 // @param config - config contains the necessary information to create a client
1606 func (client *Client) CheckConfig(config *openapiutil.Config) (_err error) {
1607 if dara.IsNil(client.EndpointRule) && dara.IsNil(config.Endpoint) {
1608 _err = &ClientError{
1609 Code: dara.String("ParameterMissing"),
1610 Message: dara.String("'config.endpoint' can not be empty"),
1611 }
1612 return _err
1613 }
1614
1615 return _err
1616 }
1617
1618 // Description:
1619 //
1620 // set gateway client
1621 //
1622 // @param spi - .
1623 func (client *Client) SetGatewayClient(spi spi.ClientInterface) (_err error) {
1624 client.Spi = spi
1625 return _err
1626 }
1627
1628 // Description:
1629 //
1630 // set RPC header for debug
1631 //
1632 // @param headers - headers for debug, this header can be used only once.
1633 func (client *Client) SetRpcHeaders(headers map[string]*string) (_err error) {
1634 client.Headers = headers
1635 return _err
1636 }
1637
1638 // Description:
1639 //
1640 // get RPC header for debug
1641 func (client *Client) GetRpcHeaders() (_result map[string]*string, _err error) {
1642 headers := client.Headers
1643 client.Headers = nil
1644 _result = headers
1645 return _result, _err
1646 }
1647
1648 func (client *Client) GetAccessDeniedDetail(err map[string]interface{}) (_result map[string]interface{}) {
1649 var accessDeniedDetail map[string]interface{}
1650 if !dara.IsNil(err["AccessDeniedDetail"]) {
1651 detail1 := dara.ToMap(err["AccessDeniedDetail"])
1652 accessDeniedDetail = detail1
1653 } else if !dara.IsNil(err["accessDeniedDetail"]) {
1654 detail2 := dara.ToMap(err["accessDeniedDetail"])
1655 accessDeniedDetail = detail2
1656 }
1657
1658 _result = accessDeniedDetail
1659 return _result
1660 }
1661
1662 func doRPCRequest_opResponse(response_ *dara.Response, client *Client, bodyType *string) (_result map[string]interface{}, _err error) {
1663 if (dara.IntValue(response_.StatusCode) >= 400) && (dara.IntValue(response_.StatusCode) < 600) {
1664 _res, _err := dara.ReadAsJSON(response_.Body)
1665 if _err != nil {
1666 return _result, _err
1667 }
1668
1669 err := dara.ToMap(_res)
1670 requestId := dara.Default(err["RequestId"], err["requestId"])
1671 code := dara.Default(err["Code"], err["code"])
1672 if (dara.ToString(code) == "Throttling") || (dara.ToString(code) == "Throttling.User") || (dara.ToString(code) == "Throttling.Api") {
1673 _err = &ThrottlingError{
1674 StatusCode: response_.StatusCode,
1675 Code: dara.String(dara.ToString(code)),
1676 Message: dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + dara.ToString(requestId)),
1677 Description: dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
1678 RetryAfter: openapiutil.GetThrottlingTimeLeft(response_.Headers),
1679 Data: err,
1680 RequestId: dara.String(dara.ToString(requestId)),
1681 }
1682 return _result, _err
1683 } else if (dara.IntValue(response_.StatusCode) >= 400) && (dara.IntValue(response_.StatusCode) < 500) {
1684 _err = &ClientError{
1685 StatusCode: response_.StatusCode,
1686 Code: dara.String(dara.ToString(code)),
1687 Message: dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + dara.ToString(requestId)),
1688 Description: dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
1689 Data: err,
1690 AccessDeniedDetail: client.GetAccessDeniedDetail(err),
1691 RequestId: dara.String(dara.ToString(requestId)),
1692 }
1693 return _result, _err
1694 } else {
1695 _err = &ServerError{
1696 StatusCode: response_.StatusCode,
1697 Code: dara.String(dara.ToString(code)),
1698 Message: dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + dara.ToString(requestId)),
1699 Description: dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
1700 Data: err,
1701 RequestId: dara.String(dara.ToString(requestId)),
1702 }
1703 return _result, _err
1704 }
1705
1706 }
1707
1708 if dara.StringValue(bodyType) == "binary" {
1709 resp := map[string]interface{}{
1710 "body": response_.Body,
1711 "headers": response_.Headers,
1712 "statusCode": dara.IntValue(response_.StatusCode),
1713 }
1714 _result = resp
1715 return _result, _err
1716 } else if dara.StringValue(bodyType) == "byte" {
1717 byt, _err := dara.ReadAsBytes(response_.Body)
1718 if _err != nil {
1719 return _result, _err
1720 }
1721
1722 _err = dara.Convert(map[string]interface{}{
1723 "body": byt,
1724 "headers": response_.Headers,
1725 "statusCode": dara.IntValue(response_.StatusCode),
1726 }, &_result)
1727
1728 return _result, _err
1729 } else if dara.StringValue(bodyType) == "string" {
1730 _str, _err := dara.ReadAsString(response_.Body)
1731 if _err != nil {
1732 return _result, _err
1733 }
1734
1735 _err = dara.Convert(map[string]interface{}{
1736 "body": _str,
1737 "headers": response_.Headers,
1738 "statusCode": dara.IntValue(response_.StatusCode),
1739 }, &_result)
1740
1741 return _result, _err
1742 } else if dara.StringValue(bodyType) == "json" {
1743 obj, _err := dara.ReadAsJSON(response_.Body)
1744 if _err != nil {
1745 return _result, _err
1746 }
1747
1748 res := dara.ToMap(obj)
1749 _err = dara.Convert(map[string]interface{}{
1750 "body": res,
1751 "headers": response_.Headers,
1752 "statusCode": dara.IntValue(response_.StatusCode),
1753 }, &_result)
1754
1755 return _result, _err
1756 } else if dara.StringValue(bodyType) == "array" {
1757 arr, _err := dara.ReadAsJSON(response_.Body)
1758 if _err != nil {
1759 return _result, _err
1760 }
1761
1762 _err = dara.Convert(map[string]interface{}{
1763 "body": arr,
1764 "headers": response_.Headers,
1765 "statusCode": dara.IntValue(response_.StatusCode),
1766 }, &_result)
1767
1768 return _result, _err
1769 } else {
1770 _err = dara.Convert(map[string]interface{}{
1771 "headers": response_.Headers,
1772 "statusCode": dara.IntValue(response_.StatusCode),
1773 }, &_result)
1774
1775 return _result, _err
1776 }
1777
1778 }
1779
1780 func doROARequest_opResponse(response_ *dara.Response, client *Client, bodyType *string) (_result map[string]interface{}, _err error) {
1781 if dara.IntValue(response_.StatusCode) == 204 {
1782 _err = dara.Convert(map[string]map[string]*string{
1783 "headers": response_.Headers,
1784 }, &_result)
1785
1786 return _result, _err
1787 }
1788
1789 if (dara.IntValue(response_.StatusCode) >= 400) && (dara.IntValue(response_.StatusCode) < 600) {
1790 _res, _err := dara.ReadAsJSON(response_.Body)
1791 if _err != nil {
1792 return _result, _err
1793 }
1794
1795 err := dara.ToMap(_res)
1796 requestId := dara.ToString(dara.Default(err["RequestId"], err["requestId"]))
1797 requestId = dara.ToString(dara.Default(requestId, err["requestid"]))
1798 code := dara.ToString(dara.Default(err["Code"], err["code"]))
1799 if (code == "Throttling") || (code == "Throttling.User") || (code == "Throttling.Api") {
1800 _err = &ThrottlingError{
1801 StatusCode: response_.StatusCode,
1802 Code: dara.String(code),
1803 Message: dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + requestId),
1804 Description: dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
1805 RetryAfter: openapiutil.GetThrottlingTimeLeft(response_.Headers),
1806 Data: err,
1807 RequestId: dara.String(requestId),
1808 }
1809 return _result, _err
1810 } else if (dara.IntValue(response_.StatusCode) >= 400) && (dara.IntValue(response_.StatusCode) < 500) {
1811 _err = &ClientError{
1812 StatusCode: response_.StatusCode,
1813 Code: dara.String(code),
1814 Message: dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + requestId),
1815 Description: dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
1816 Data: err,
1817 AccessDeniedDetail: client.GetAccessDeniedDetail(err),
1818 RequestId: dara.String(requestId),
1819 }
1820 return _result, _err
1821 } else {
1822 _err = &ServerError{
1823 StatusCode: response_.StatusCode,
1824 Code: dara.String(code),
1825 Message: dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + requestId),
1826 Description: dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
1827 Data: err,
1828 RequestId: dara.String(requestId),
1829 }
1830 return _result, _err
1831 }
1832
1833 }
1834
1835 if dara.StringValue(bodyType) == "binary" {
1836 resp := map[string]interface{}{
1837 "body": response_.Body,
1838 "headers": response_.Headers,
1839 "statusCode": dara.IntValue(response_.StatusCode),
1840 }
1841 _result = resp
1842 return _result, _err
1843 } else if dara.StringValue(bodyType) == "byte" {
1844 byt, _err := dara.ReadAsBytes(response_.Body)
1845 if _err != nil {
1846 return _result, _err
1847 }
1848
1849 _err = dara.Convert(map[string]interface{}{
1850 "body": byt,
1851 "headers": response_.Headers,
1852 "statusCode": dara.IntValue(response_.StatusCode),
1853 }, &_result)
1854
1855 return _result, _err
1856 } else if dara.StringValue(bodyType) == "string" {
1857 _str, _err := dara.ReadAsString(response_.Body)
1858 if _err != nil {
1859 return _result, _err
1860 }
1861
1862 _err = dara.Convert(map[string]interface{}{
1863 "body": _str,
1864 "headers": response_.Headers,
1865 "statusCode": dara.IntValue(response_.StatusCode),
1866 }, &_result)
1867
1868 return _result, _err
1869 } else if dara.StringValue(bodyType) == "json" {
1870 obj, _err := dara.ReadAsJSON(response_.Body)
1871 if _err != nil {
1872 return _result, _err
1873 }
1874
1875 res := dara.ToMap(obj)
1876 _err = dara.Convert(map[string]interface{}{
1877 "body": res,
1878 "headers": response_.Headers,
1879 "statusCode": dara.IntValue(response_.StatusCode),
1880 }, &_result)
1881
1882 return _result, _err
1883 } else if dara.StringValue(bodyType) == "array" {
1884 arr, _err := dara.ReadAsJSON(response_.Body)
1885 if _err != nil {
1886 return _result, _err
1887 }
1888
1889 _err = dara.Convert(map[string]interface{}{
1890 "body": arr,
1891 "headers": response_.Headers,
1892 "statusCode": dara.IntValue(response_.StatusCode),
1893 }, &_result)
1894
1895 return _result, _err
1896 } else {
1897 _err = dara.Convert(map[string]interface{}{
1898 "headers": response_.Headers,
1899 "statusCode": dara.IntValue(response_.StatusCode),
1900 }, &_result)
1901
1902 return _result, _err
1903 }
1904
1905 }
1906
1907 func doROARequestWithForm_opResponse(response_ *dara.Response, client *Client, bodyType *string) (_result map[string]interface{}, _err error) {
1908 if dara.IntValue(response_.StatusCode) == 204 {
1909 _err = dara.Convert(map[string]map[string]*string{
1910 "headers": response_.Headers,
1911 }, &_result)
1912
1913 return _result, _err
1914 }
1915
1916 if (dara.IntValue(response_.StatusCode) >= 400) && (dara.IntValue(response_.StatusCode) < 600) {
1917 _res, _err := dara.ReadAsJSON(response_.Body)
1918 if _err != nil {
1919 return _result, _err
1920 }
1921
1922 err := dara.ToMap(_res)
1923 requestId := dara.ToString(dara.Default(err["RequestId"], err["requestId"]))
1924 code := dara.ToString(dara.Default(err["Code"], err["code"]))
1925 if (code == "Throttling") || (code == "Throttling.User") || (code == "Throttling.Api") {
1926 _err = &ThrottlingError{
1927 StatusCode: response_.StatusCode,
1928 Code: dara.String(code),
1929 Message: dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + requestId),
1930 Description: dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
1931 RetryAfter: openapiutil.GetThrottlingTimeLeft(response_.Headers),
1932 Data: err,
1933 RequestId: dara.String(requestId),
1934 }
1935 return _result, _err
1936 } else if (dara.IntValue(response_.StatusCode) >= 400) && (dara.IntValue(response_.StatusCode) < 500) {
1937 _err = &ClientError{
1938 StatusCode: response_.StatusCode,
1939 Code: dara.String(code),
1940 Message: dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + requestId),
1941 Description: dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
1942 Data: err,
1943 AccessDeniedDetail: client.GetAccessDeniedDetail(err),
1944 RequestId: dara.String(requestId),
1945 }
1946 return _result, _err
1947 } else {
1948 _err = &ServerError{
1949 StatusCode: response_.StatusCode,
1950 Code: dara.String(code),
1951 Message: dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + requestId),
1952 Description: dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
1953 Data: err,
1954 RequestId: dara.String(requestId),
1955 }
1956 return _result, _err
1957 }
1958
1959 }
1960
1961 if dara.StringValue(bodyType) == "binary" {
1962 resp := map[string]interface{}{
1963 "body": response_.Body,
1964 "headers": response_.Headers,
1965 "statusCode": dara.IntValue(response_.StatusCode),
1966 }
1967 _result = resp
1968 return _result, _err
1969 } else if dara.StringValue(bodyType) == "byte" {
1970 byt, _err := dara.ReadAsBytes(response_.Body)
1971 if _err != nil {
1972 return _result, _err
1973 }
1974
1975 _err = dara.Convert(map[string]interface{}{
1976 "body": byt,
1977 "headers": response_.Headers,
1978 "statusCode": dara.IntValue(response_.StatusCode),
1979 }, &_result)
1980
1981 return _result, _err
1982 } else if dara.StringValue(bodyType) == "string" {
1983 _str, _err := dara.ReadAsString(response_.Body)
1984 if _err != nil {
1985 return _result, _err
1986 }
1987
1988 _err = dara.Convert(map[string]interface{}{
1989 "body": _str,
1990 "headers": response_.Headers,
1991 "statusCode": dara.IntValue(response_.StatusCode),
1992 }, &_result)
1993
1994 return _result, _err
1995 } else if dara.StringValue(bodyType) == "json" {
1996 obj, _err := dara.ReadAsJSON(response_.Body)
1997 if _err != nil {
1998 return _result, _err
1999 }
2000
2001 res := dara.ToMap(obj)
2002 _err = dara.Convert(map[string]interface{}{
2003 "body": res,
2004 "headers": response_.Headers,
2005 "statusCode": dara.IntValue(response_.StatusCode),
2006 }, &_result)
2007
2008 return _result, _err
2009 } else if dara.StringValue(bodyType) == "array" {
2010 arr, _err := dara.ReadAsJSON(response_.Body)
2011 if _err != nil {
2012 return _result, _err
2013 }
2014
2015 _err = dara.Convert(map[string]interface{}{
2016 "body": arr,
2017 "headers": response_.Headers,
2018 "statusCode": dara.IntValue(response_.StatusCode),
2019 }, &_result)
2020
2021 return _result, _err
2022 } else {
2023 _err = dara.Convert(map[string]interface{}{
2024 "headers": response_.Headers,
2025 "statusCode": dara.IntValue(response_.StatusCode),
2026 }, &_result)
2027
2028 return _result, _err
2029 }
2030
2031 }
2032
2033 func doRequest_opResponse(response_ *dara.Response, client *Client, params *openapiutil.Params) (_result map[string]interface{}, _err error) {
2034 if (dara.IntValue(response_.StatusCode) >= 400) && (dara.IntValue(response_.StatusCode) < 600) {
2035 err := map[string]interface{}{}
2036 if !dara.IsNil(response_.Headers["content-type"]) && dara.StringValue(response_.Headers["content-type"]) == "text/xml;charset=utf-8" {
2037 _str, _err := dara.ReadAsString(response_.Body)
2038 if _err != nil {
2039 return _result, _err
2040 }
2041
2042 respMap := dara.ParseXml(_str, nil)
2043 err = dara.ToMap(respMap["Error"])
2044 } else {
2045 _res, _err := dara.ReadAsJSON(response_.Body)
2046 if _err != nil {
2047 return _result, _err
2048 }
2049
2050 err = dara.ToMap(_res)
2051 }
2052
2053 requestId := dara.ToString(dara.Default(err["RequestId"], err["requestId"]))
2054 code := dara.ToString(dara.Default(err["Code"], err["code"]))
2055 if (code == "Throttling") || (code == "Throttling.User") || (code == "Throttling.Api") {
2056 _err = &ThrottlingError{
2057 StatusCode: response_.StatusCode,
2058 Code: dara.String(code),
2059 Message: dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + requestId),
2060 Description: dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
2061 RetryAfter: openapiutil.GetThrottlingTimeLeft(response_.Headers),
2062 Data: err,
2063 RequestId: dara.String(requestId),
2064 }
2065 return _result, _err
2066 } else if (dara.IntValue(response_.StatusCode) >= 400) && (dara.IntValue(response_.StatusCode) < 500) {
2067 _err = &ClientError{
2068 StatusCode: response_.StatusCode,
2069 Code: dara.String(code),
2070 Message: dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + requestId),
2071 Description: dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
2072 Data: err,
2073 AccessDeniedDetail: client.GetAccessDeniedDetail(err),
2074 RequestId: dara.String(requestId),
2075 }
2076 return _result, _err
2077 } else {
2078 _err = &ServerError{
2079 StatusCode: response_.StatusCode,
2080 Code: dara.String(code),
2081 Message: dara.String("code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + requestId),
2082 Description: dara.String(dara.ToString(dara.Default(err["Description"], err["description"]))),
2083 Data: err,
2084 RequestId: dara.String(requestId),
2085 }
2086 return _result, _err
2087 }
2088
2089 }
2090
2091 if dara.StringValue(params.BodyType) == "binary" {
2092 resp := map[string]interface{}{
2093 "body": response_.Body,
2094 "headers": response_.Headers,
2095 "statusCode": dara.IntValue(response_.StatusCode),
2096 }
2097 _result = resp
2098 return _result, _err
2099 } else if dara.StringValue(params.BodyType) == "byte" {
2100 byt, _err := dara.ReadAsBytes(response_.Body)
2101 if _err != nil {
2102 return _result, _err
2103 }
2104
2105 _err = dara.Convert(map[string]interface{}{
2106 "body": byt,
2107 "headers": response_.Headers,
2108 "statusCode": dara.IntValue(response_.StatusCode),
2109 }, &_result)
2110
2111 return _result, _err
2112 } else if dara.StringValue(params.BodyType) == "string" {
2113 respStr, _err := dara.ReadAsString(response_.Body)
2114 if _err != nil {
2115 return _result, _err
2116 }
2117
2118 _err = dara.Convert(map[string]interface{}{
2119 "body": respStr,
2120 "headers": response_.Headers,
2121 "statusCode": dara.IntValue(response_.StatusCode),
2122 }, &_result)
2123
2124 return _result, _err
2125 } else if dara.StringValue(params.BodyType) == "json" {
2126 obj, _err := dara.ReadAsJSON(response_.Body)
2127 if _err != nil {
2128 return _result, _err
2129 }
2130
2131 res := dara.ToMap(obj)
2132 _err = dara.Convert(map[string]interface{}{
2133 "body": res,
2134 "headers": response_.Headers,
2135 "statusCode": dara.IntValue(response_.StatusCode),
2136 }, &_result)
2137
2138 return _result, _err
2139 } else if dara.StringValue(params.BodyType) == "array" {
2140 arr, _err := dara.ReadAsJSON(response_.Body)
2141 if _err != nil {
2142 return _result, _err
2143 }
2144
2145 _err = dara.Convert(map[string]interface{}{
2146 "body": arr,
2147 "headers": response_.Headers,
2148 "statusCode": dara.IntValue(response_.StatusCode),
2149 }, &_result)
2150
2151 return _result, _err
2152 } else {
2153 anything, _err := dara.ReadAsString(response_.Body)
2154 if _err != nil {
2155 return _result, _err
2156 }
2157
2158 _err = dara.Convert(map[string]interface{}{
2159 "body": anything,
2160 "headers": response_.Headers,
2161 "statusCode": dara.IntValue(response_.StatusCode),
2162 }, &_result)
2163
2164 return _result, _err
2165 }
2166
2167 }
2168
2169 func callSSEApi_opResponse(_yield chan *SSEResponse, _yieldErr chan error, response_ *dara.Response) {
2170 if (dara.IntValue(response_.StatusCode) >= 400) && (dara.IntValue(response_.StatusCode) < 600) {
2171 err := map[string]interface{}{}
2172 if !dara.IsNil(response_.Headers["content-type"]) && dara.StringValue(response_.Headers["content-type"]) == "text/xml;charset=utf-8" {
2173 _str, _err := dara.ReadAsString(response_.Body)
2174 if _err != nil {
2175 _yieldErr <- _err
2176 return
2177 }
2178
2179 respMap := dara.ParseXml(_str, nil)
2180 err = dara.ToMap(respMap["Error"])
2181 } else {
2182 _res, _err := dara.ReadAsJSON(response_.Body)
2183 if _err != nil {
2184 _yieldErr <- _err
2185 return
2186 }
2187
2188 err = dara.ToMap(_res)
2189 }
2190
2191 err["statusCode"] = response_.StatusCode
2192 _err := dara.NewSDKError(map[string]interface{}{
2193 "code": dara.ToString(dara.Default(err["Code"], err["code"])),
2194 "message": "code: " + dara.ToString(dara.IntValue(response_.StatusCode)) + ", " + dara.ToString(dara.Default(err["Message"], err["message"])) + " request id: " + dara.ToString(dara.Default(err["RequestId"], err["requestId"])),
2195 "data": err,
2196 "description": dara.ToString(dara.Default(err["Description"], err["description"])),
2197 "accessDeniedDetail": dara.Default(err["AccessDeniedDetail"], err["accessDeniedDetail"]),
2198 })
2199 _yieldErr <- _err
2200 return
2201 }
2202
2203 events := make(chan *dara.SSEEvent, 1)
2204 dara.ReadAsSSE(response_.Body, events, _yieldErr)
2205 for event := range events {
2206 _yield <- &SSEResponse{
2207 StatusCode: response_.StatusCode,
2208 Headers: response_.Headers,
2209 Event: event,
2210 }
2211 }
2212 return
2213 }
2214