aws-sdk-core 2.3.23 → 3.89.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (496) hide show
  1. checksums.yaml +5 -5
  2. data/VERSION +1 -0
  3. data/ca-bundle.crt +3615 -3541
  4. data/lib/aws-sdk-core.rb +106 -404
  5. data/lib/aws-sdk-core/arn.rb +77 -0
  6. data/lib/aws-sdk-core/arn_parser.rb +38 -0
  7. data/lib/aws-sdk-core/assume_role_web_identity_credentials.rb +101 -0
  8. data/lib/aws-sdk-core/async_client_stubs.rb +80 -0
  9. data/lib/aws-sdk-core/binary.rb +6 -0
  10. data/lib/aws-sdk-core/binary/decode_handler.rb +56 -0
  11. data/lib/aws-sdk-core/binary/encode_handler.rb +32 -0
  12. data/lib/aws-sdk-core/binary/event_builder.rb +122 -0
  13. data/lib/aws-sdk-core/binary/event_parser.rb +134 -0
  14. data/lib/aws-sdk-core/binary/event_stream_decoder.rb +62 -0
  15. data/lib/aws-sdk-core/binary/event_stream_encoder.rb +53 -0
  16. data/lib/aws-sdk-core/client_side_monitoring/publisher.rb +49 -0
  17. data/lib/aws-sdk-core/client_side_monitoring/request_metrics.rb +197 -0
  18. data/lib/aws-sdk-core/client_stubs.rb +73 -10
  19. data/lib/aws-sdk-core/credential_provider.rb +0 -29
  20. data/lib/aws-sdk-core/credential_provider_chain.rb +56 -6
  21. data/lib/aws-sdk-core/deprecations.rb +16 -10
  22. data/lib/aws-sdk-core/ecs_credentials.rb +14 -10
  23. data/lib/aws-sdk-core/endpoint_cache.rb +191 -0
  24. data/lib/aws-sdk-core/errors.rb +221 -11
  25. data/lib/aws-sdk-core/event_emitter.rb +62 -0
  26. data/lib/aws-sdk-core/ini_parser.rb +41 -0
  27. data/lib/aws-sdk-core/instance_profile_credentials.rb +133 -42
  28. data/lib/aws-sdk-core/json.rb +9 -10
  29. data/lib/aws-sdk-core/json/builder.rb +4 -2
  30. data/lib/aws-sdk-core/json/error_handler.rb +19 -2
  31. data/lib/aws-sdk-core/json/handler.rb +22 -3
  32. data/lib/aws-sdk-core/json/parser.rb +1 -1
  33. data/lib/aws-sdk-core/log/formatter.rb +7 -1
  34. data/lib/aws-sdk-core/log/param_filter.rb +4 -3
  35. data/lib/aws-sdk-core/pageable_response.rb +1 -0
  36. data/lib/aws-sdk-core/pager.rb +30 -25
  37. data/lib/aws-sdk-core/param_converter.rb +3 -3
  38. data/lib/aws-sdk-core/param_validator.rb +60 -26
  39. data/lib/aws-sdk-core/plugins/api_key.rb +52 -0
  40. data/lib/aws-sdk-core/plugins/apig_authorizer_token.rb +30 -0
  41. data/lib/aws-sdk-core/plugins/apig_credentials_configuration.rb +34 -0
  42. data/lib/aws-sdk-core/plugins/apig_user_agent.rb +37 -0
  43. data/lib/aws-sdk-core/plugins/client_metrics_plugin.rb +280 -0
  44. data/lib/aws-sdk-core/plugins/client_metrics_send_plugin.rb +84 -0
  45. data/lib/aws-sdk-core/plugins/credentials_configuration.rb +62 -0
  46. data/lib/aws-sdk-core/plugins/endpoint_discovery.rb +160 -0
  47. data/lib/aws-sdk-core/plugins/endpoint_pattern.rb +63 -0
  48. data/lib/aws-sdk-core/plugins/event_stream_configuration.rb +30 -0
  49. data/lib/aws-sdk-core/plugins/global_configuration.rb +19 -10
  50. data/lib/aws-sdk-core/plugins/helpful_socket_errors.rb +41 -0
  51. data/lib/aws-sdk-core/plugins/idempotency_token.rb +36 -0
  52. data/lib/aws-sdk-core/plugins/invocation_id.rb +33 -0
  53. data/lib/aws-sdk-core/plugins/jsonvalue_converter.rb +29 -0
  54. data/lib/aws-sdk-core/plugins/logging.rb +18 -18
  55. data/lib/aws-sdk-core/plugins/param_converter.rb +9 -5
  56. data/lib/aws-sdk-core/plugins/param_validator.rb +8 -5
  57. data/lib/aws-sdk-core/plugins/protocols/api_gateway.rb +10 -0
  58. data/lib/aws-sdk-core/plugins/protocols/ec2.rb +2 -1
  59. data/lib/aws-sdk-core/plugins/protocols/json_rpc.rb +13 -12
  60. data/lib/aws-sdk-core/plugins/protocols/query.rb +2 -2
  61. data/lib/aws-sdk-core/plugins/regional_endpoint.rb +48 -19
  62. data/lib/aws-sdk-core/plugins/response_paging.rb +5 -18
  63. data/lib/aws-sdk-core/plugins/retry_errors.rb +102 -24
  64. data/lib/aws-sdk-core/plugins/signature_v2.rb +51 -0
  65. data/lib/aws-sdk-core/plugins/signature_v4.rb +141 -0
  66. data/lib/aws-sdk-core/plugins/stub_responses.rb +35 -18
  67. data/lib/aws-sdk-core/plugins/transfer_encoding.rb +53 -0
  68. data/lib/aws-sdk-core/plugins/user_agent.rb +23 -10
  69. data/lib/aws-sdk-core/process_credentials.rb +80 -0
  70. data/lib/aws-sdk-core/query.rb +5 -0
  71. data/lib/aws-sdk-core/query/ec2_param_builder.rb +9 -3
  72. data/lib/aws-sdk-core/query/handler.rb +20 -16
  73. data/lib/aws-sdk-core/query/param_builder.rb +10 -4
  74. data/lib/aws-sdk-core/refreshing_credentials.rb +1 -1
  75. data/lib/aws-sdk-core/resources/collection.rb +121 -0
  76. data/lib/aws-sdk-core/rest.rb +10 -0
  77. data/lib/aws-sdk-core/rest/handler.rb +1 -0
  78. data/lib/aws-sdk-core/rest/request/builder.rb +2 -1
  79. data/lib/aws-sdk-core/rest/request/endpoint.rb +11 -66
  80. data/lib/aws-sdk-core/rest/request/headers.rb +20 -1
  81. data/lib/aws-sdk-core/rest/request/querystring_builder.rb +103 -0
  82. data/lib/aws-sdk-core/rest/response/body.rb +14 -1
  83. data/lib/aws-sdk-core/rest/response/headers.rb +9 -0
  84. data/lib/aws-sdk-core/rest/response/parser.rb +18 -14
  85. data/lib/aws-sdk-core/shared_config.rb +451 -0
  86. data/lib/aws-sdk-core/shared_credentials.rb +16 -53
  87. data/lib/aws-sdk-core/structure.rb +22 -13
  88. data/lib/aws-sdk-core/stubbing/data_applicator.rb +1 -1
  89. data/lib/aws-sdk-core/stubbing/empty_stub.rb +10 -3
  90. data/lib/aws-sdk-core/stubbing/protocols/api_gateway.rb +8 -0
  91. data/lib/aws-sdk-core/stubbing/protocols/ec2.rb +1 -1
  92. data/lib/aws-sdk-core/stubbing/protocols/rest.rb +99 -1
  93. data/lib/aws-sdk-core/stubbing/protocols/rest_json.rb +5 -1
  94. data/lib/aws-sdk-core/stubbing/protocols/rest_xml.rb +9 -5
  95. data/lib/aws-sdk-core/stubbing/stub_data.rb +16 -3
  96. data/lib/aws-sdk-core/util.rb +66 -0
  97. data/lib/aws-sdk-core/waiters.rb +3 -0
  98. data/lib/aws-sdk-core/waiters/poller.rb +5 -7
  99. data/lib/aws-sdk-core/waiters/waiter.rb +3 -2
  100. data/lib/aws-sdk-core/xml.rb +9 -0
  101. data/lib/aws-sdk-core/xml/builder.rb +11 -5
  102. data/lib/aws-sdk-core/xml/error_handler.rb +27 -5
  103. data/lib/aws-sdk-core/xml/parser.rb +1 -11
  104. data/lib/aws-sdk-core/xml/parser/engines/ox.rb +5 -1
  105. data/lib/aws-sdk-core/xml/parser/frame.rb +6 -6
  106. data/lib/aws-sdk-sts.rb +45 -0
  107. data/lib/aws-sdk-sts/client.rb +2156 -0
  108. data/lib/aws-sdk-sts/client_api.rb +336 -0
  109. data/lib/aws-sdk-sts/customizations.rb +2 -0
  110. data/lib/aws-sdk-sts/errors.rb +142 -0
  111. data/lib/aws-sdk-sts/plugins/sts_regional_endpoints.rb +32 -0
  112. data/lib/aws-sdk-sts/presigner.rb +67 -0
  113. data/lib/aws-sdk-sts/resource.rb +23 -0
  114. data/lib/aws-sdk-sts/types.rb +1504 -0
  115. data/lib/seahorse.rb +60 -60
  116. data/lib/seahorse/client/async_base.rb +50 -0
  117. data/lib/seahorse/client/async_response.rb +62 -0
  118. data/lib/seahorse/client/base.rb +5 -9
  119. data/lib/seahorse/client/configuration.rb +10 -2
  120. data/lib/seahorse/client/events.rb +1 -1
  121. data/lib/seahorse/client/h2/connection.rb +246 -0
  122. data/lib/seahorse/client/h2/handler.rb +151 -0
  123. data/lib/seahorse/client/handler_list_entry.rb +2 -2
  124. data/lib/seahorse/client/http/async_response.rb +42 -0
  125. data/lib/seahorse/client/http/response.rb +13 -8
  126. data/lib/seahorse/client/logging/formatter.rb +7 -1
  127. data/lib/seahorse/client/logging/handler.rb +2 -0
  128. data/lib/seahorse/client/net_http/connection_pool.rb +46 -28
  129. data/lib/seahorse/client/net_http/handler.rb +17 -3
  130. data/lib/seahorse/client/net_http/patches.rb +9 -1
  131. data/lib/seahorse/client/networking_error.rb +28 -0
  132. data/lib/seahorse/client/plugin.rb +67 -6
  133. data/lib/seahorse/client/plugin_list.rb +3 -1
  134. data/lib/seahorse/client/plugins/content_length.rb +7 -2
  135. data/lib/seahorse/client/plugins/endpoint.rb +14 -10
  136. data/lib/seahorse/client/plugins/h2.rb +64 -0
  137. data/lib/seahorse/client/plugins/logging.rb +17 -19
  138. data/lib/seahorse/client/plugins/net_http.rb +23 -15
  139. data/lib/seahorse/client/plugins/raise_response_errors.rb +4 -4
  140. data/lib/seahorse/client/plugins/response_target.rb +10 -1
  141. data/lib/seahorse/client/request_context.rb +5 -0
  142. data/lib/seahorse/client/response.rb +9 -20
  143. data/lib/seahorse/model/api.rb +37 -0
  144. data/lib/seahorse/model/authorizer.rb +21 -0
  145. data/lib/seahorse/model/operation.rb +20 -0
  146. data/lib/seahorse/model/shapes.rb +44 -2
  147. data/lib/seahorse/util.rb +1 -21
  148. metadata +127 -360
  149. data/apis/acm/2015-12-08/api-2.json +0 -495
  150. data/apis/acm/2015-12-08/examples-1.json +0 -5
  151. data/apis/acm/2015-12-08/paginators-1.json +0 -10
  152. data/apis/apigateway/2015-07-09/api-2.json +0 -3347
  153. data/apis/apigateway/2015-07-09/examples-1.json +0 -5
  154. data/apis/apigateway/2015-07-09/paginators-1.json +0 -52
  155. data/apis/application-autoscaling/2016-02-06/api-2.json +0 -502
  156. data/apis/application-autoscaling/2016-02-06/examples-1.json +0 -5
  157. data/apis/application-autoscaling/2016-02-06/paginators-1.json +0 -22
  158. data/apis/autoscaling/2011-01-01/api-2.json +0 -2038
  159. data/apis/autoscaling/2011-01-01/examples-1.json +0 -5
  160. data/apis/autoscaling/2011-01-01/paginators-1.json +0 -52
  161. data/apis/autoscaling/2011-01-01/resources-1.json +0 -1613
  162. data/apis/autoscaling/2011-01-01/waiters-2.json +0 -62
  163. data/apis/cloudformation/2010-05-15/api-2.json +0 -1299
  164. data/apis/cloudformation/2010-05-15/examples-1.json +0 -5
  165. data/apis/cloudformation/2010-05-15/paginators-1.json +0 -27
  166. data/apis/cloudformation/2010-05-15/resources-1.json +0 -202
  167. data/apis/cloudformation/2010-05-15/waiters-2.json +0 -235
  168. data/apis/cloudfront/2016-01-28/api-2.json +0 -2218
  169. data/apis/cloudfront/2016-01-28/examples-1.json +0 -5
  170. data/apis/cloudfront/2016-01-28/paginators-1.json +0 -32
  171. data/apis/cloudfront/2016-01-28/waiters-2.json +0 -47
  172. data/apis/cloudhsm/2014-05-30/api-2.json +0 -877
  173. data/apis/cloudhsm/2014-05-30/examples-1.json +0 -5
  174. data/apis/cloudsearch/2013-01-01/api-2.json +0 -2001
  175. data/apis/cloudsearch/2013-01-01/paginators-1.json +0 -20
  176. data/apis/cloudsearchdomain/2013-01-01/api-2.json +0 -373
  177. data/apis/cloudsearchdomain/2013-01-01/examples-1.json +0 -5
  178. data/apis/cloudtrail/2013-11-01/api-2.json +0 -801
  179. data/apis/cloudtrail/2013-11-01/examples-1.json +0 -5
  180. data/apis/cloudtrail/2013-11-01/paginators-1.json +0 -7
  181. data/apis/codecommit/2015-04-13/api-2.json +0 -916
  182. data/apis/codecommit/2015-04-13/examples-1.json +0 -5
  183. data/apis/codecommit/2015-04-13/paginators-1.json +0 -14
  184. data/apis/codedeploy/2014-10-06/api-2.json +0 -1954
  185. data/apis/codedeploy/2014-10-06/examples-1.json +0 -5
  186. data/apis/codedeploy/2014-10-06/paginators-1.json +0 -34
  187. data/apis/codepipeline/2015-07-09/api-2.json +0 -1633
  188. data/apis/codepipeline/2015-07-09/examples-1.json +0 -902
  189. data/apis/cognito-identity/2014-06-30/api-2.json +0 -859
  190. data/apis/cognito-identity/2014-06-30/examples-1.json +0 -5
  191. data/apis/cognito-idp/2016-04-18/api-2.json +0 -1657
  192. data/apis/cognito-idp/2016-04-18/examples-1.json +0 -5
  193. data/apis/cognito-sync/2014-06-30/api-2.json +0 -1874
  194. data/apis/config/2014-11-12/api-2.json +0 -1303
  195. data/apis/config/2014-11-12/examples-1.json +0 -5
  196. data/apis/config/2014-11-12/paginators-1.json +0 -10
  197. data/apis/datapipeline/2012-10-29/api-2.json +0 -1167
  198. data/apis/datapipeline/2012-10-29/paginators-1.json +0 -26
  199. data/apis/devicefarm/2015-06-23/api-2.json +0 -1819
  200. data/apis/devicefarm/2015-06-23/examples-1.json +0 -5
  201. data/apis/devicefarm/2015-06-23/paginators-1.json +0 -74
  202. data/apis/directconnect/2012-10-25/api-2.json +0 -793
  203. data/apis/directconnect/2012-10-25/examples-1.json +0 -5
  204. data/apis/directconnect/2012-10-25/paginators-1.json +0 -22
  205. data/apis/discovery/2015-11-01/api-2.json +0 -556
  206. data/apis/discovery/2015-11-01/examples-1.json +0 -5
  207. data/apis/dms/2016-01-01/api-2.json +0 -1469
  208. data/apis/dms/2016-01-01/examples-1.json +0 -5
  209. data/apis/ds/2015-04-16/api-2.json +0 -1674
  210. data/apis/ds/2015-04-16/examples-1.json +0 -5
  211. data/apis/dynamodb/2012-08-10/api-2.json +0 -1200
  212. data/apis/dynamodb/2012-08-10/examples-1.json +0 -5
  213. data/apis/dynamodb/2012-08-10/paginators-1.json +0 -26
  214. data/apis/dynamodb/2012-08-10/resources-1.json +0 -136
  215. data/apis/dynamodb/2012-08-10/waiters-2.json +0 -35
  216. data/apis/ec2/2015-10-01/api-2.json +0 -13759
  217. data/apis/ec2/2015-10-01/examples-1.json +0 -5
  218. data/apis/ec2/2015-10-01/paginators-1.json +0 -138
  219. data/apis/ec2/2015-10-01/resources-1.json +0 -2582
  220. data/apis/ec2/2015-10-01/waiters-2.json +0 -593
  221. data/apis/ec2/2016-04-01/api-2.json +0 -13842
  222. data/apis/ec2/2016-04-01/examples-1.json +0 -5
  223. data/apis/ec2/2016-04-01/paginators-1.json +0 -138
  224. data/apis/ec2/2016-04-01/resources-1.json +0 -2582
  225. data/apis/ec2/2016-04-01/waiters-2.json +0 -593
  226. data/apis/ecr/2015-09-21/api-2.json +0 -849
  227. data/apis/ecr/2015-09-21/examples-1.json +0 -5
  228. data/apis/ecs/2014-11-13/api-2.json +0 -1396
  229. data/apis/ecs/2014-11-13/examples-1.json +0 -5
  230. data/apis/ecs/2014-11-13/paginators-1.json +0 -40
  231. data/apis/ecs/2014-11-13/waiters-2.json +0 -93
  232. data/apis/elasticache/2015-02-02/api-2.json +0 -2426
  233. data/apis/elasticache/2015-02-02/examples-1.json +0 -5
  234. data/apis/elasticache/2015-02-02/paginators-1.json +0 -76
  235. data/apis/elasticache/2015-02-02/waiters-2.json +0 -143
  236. data/apis/elasticbeanstalk/2010-12-01/api-2.json +0 -1894
  237. data/apis/elasticbeanstalk/2010-12-01/examples-1.json +0 -1109
  238. data/apis/elasticbeanstalk/2010-12-01/paginators-1.json +0 -25
  239. data/apis/elasticfilesystem/2015-02-01/api-2.json +0 -713
  240. data/apis/elasticfilesystem/2015-02-01/examples-1.json +0 -5
  241. data/apis/elasticloadbalancing/2012-06-01/api-2.json +0 -2145
  242. data/apis/elasticloadbalancing/2012-06-01/paginators-1.json +0 -18
  243. data/apis/elasticloadbalancing/2012-06-01/waiters-2.json +0 -49
  244. data/apis/elasticmapreduce/2009-03-31/api-2.json +0 -1341
  245. data/apis/elasticmapreduce/2009-03-31/examples-1.json +0 -5
  246. data/apis/elasticmapreduce/2009-03-31/paginators-1.json +0 -32
  247. data/apis/elasticmapreduce/2009-03-31/waiters-2.json +0 -67
  248. data/apis/elastictranscoder/2012-09-25/api-2.json +0 -1807
  249. data/apis/elastictranscoder/2012-09-25/paginators-1.json +0 -24
  250. data/apis/elastictranscoder/2012-09-25/waiters-2.json +0 -30
  251. data/apis/email/2010-12-01/api-2.json +0 -1791
  252. data/apis/email/2010-12-01/examples-1.json +0 -5
  253. data/apis/email/2010-12-01/paginators-1.json +0 -13
  254. data/apis/email/2010-12-01/waiters-2.json +0 -18
  255. data/apis/es/2015-01-01/api-2.json +0 -764
  256. data/apis/events/2015-10-07/api-2.json +0 -643
  257. data/apis/events/2015-10-07/examples-1.json +0 -5
  258. data/apis/firehose/2015-08-04/api-2.json +0 -719
  259. data/apis/gamelift/2015-10-01/api-2.json +0 -2307
  260. data/apis/gamelift/2015-10-01/examples-1.json +0 -5
  261. data/apis/glacier/2012-06-01/api-2.json +0 -2144
  262. data/apis/glacier/2012-06-01/paginators-1.json +0 -28
  263. data/apis/glacier/2012-06-01/resources-1.json +0 -563
  264. data/apis/glacier/2012-06-01/waiters-2.json +0 -39
  265. data/apis/iam/2010-05-08/api-2.json +0 -4514
  266. data/apis/iam/2010-05-08/examples-1.json +0 -5
  267. data/apis/iam/2010-05-08/paginators-1.json +0 -198
  268. data/apis/iam/2010-05-08/resources-1.json +0 -1740
  269. data/apis/iam/2010-05-08/waiters-2.json +0 -39
  270. data/apis/importexport/2010-06-01/api-2.json +0 -666
  271. data/apis/importexport/2010-06-01/paginators-1.json +0 -11
  272. data/apis/inspector/2016-02-16/api-2.json +0 -1964
  273. data/apis/inspector/2016-02-16/examples-1.json +0 -5
  274. data/apis/iot-data/2015-05-28/api-2.json +0 -263
  275. data/apis/iot/2015-05-28/api-2.json +0 -3800
  276. data/apis/iot/2015-05-28/examples-1.json +0 -5
  277. data/apis/kinesis/2013-12-02/api-2.json +0 -822
  278. data/apis/kinesis/2013-12-02/examples-1.json +0 -5
  279. data/apis/kinesis/2013-12-02/paginators-1.json +0 -18
  280. data/apis/kinesis/2013-12-02/waiters-2.json +0 -18
  281. data/apis/kms/2014-11-01/api-2.json +0 -1209
  282. data/apis/kms/2014-11-01/examples-1.json +0 -5
  283. data/apis/kms/2014-11-01/paginators-1.json +0 -32
  284. data/apis/lambda/2014-11-11/api-2.json +0 -667
  285. data/apis/lambda/2014-11-11/paginators-1.json +0 -16
  286. data/apis/lambda/2015-03-31/api-2.json +0 -1342
  287. data/apis/lambda/2015-03-31/examples-1.json +0 -5
  288. data/apis/lambda/2015-03-31/paginators-1.json +0 -16
  289. data/apis/logs/2014-03-28/api-2.json +0 -1138
  290. data/apis/logs/2014-03-28/examples-1.json +0 -5
  291. data/apis/logs/2014-03-28/paginators-1.json +0 -49
  292. data/apis/machinelearning/2014-12-12/api-2.json +0 -1947
  293. data/apis/machinelearning/2014-12-12/paginators-1.json +0 -28
  294. data/apis/machinelearning/2014-12-12/waiters-2.json +0 -81
  295. data/apis/marketplacecommerceanalytics/2015-07-01/api-2.json +0 -120
  296. data/apis/marketplacecommerceanalytics/2015-07-01/examples-1.json +0 -5
  297. data/apis/meteringmarketplace/2016-01-14/api-2.json +0 -127
  298. data/apis/meteringmarketplace/2016-01-14/examples-1.json +0 -5
  299. data/apis/monitoring/2010-08-01/api-2.json +0 -790
  300. data/apis/monitoring/2010-08-01/examples-1.json +0 -5
  301. data/apis/monitoring/2010-08-01/paginators-1.json +0 -24
  302. data/apis/monitoring/2010-08-01/resources-1.json +0 -346
  303. data/apis/monitoring/2010-08-01/waiters-2.json +0 -18
  304. data/apis/opsworks/2013-02-18/api-2.json +0 -2606
  305. data/apis/opsworks/2013-02-18/examples-1.json +0 -5
  306. data/apis/opsworks/2013-02-18/paginators-1.json +0 -55
  307. data/apis/opsworks/2013-02-18/resources-1.json +0 -173
  308. data/apis/opsworks/2013-02-18/waiters-2.json +0 -295
  309. data/apis/rds/2014-10-31/api-2.json +0 -4757
  310. data/apis/rds/2014-10-31/examples-1.json +0 -5
  311. data/apis/rds/2014-10-31/paginators-1.json +0 -110
  312. data/apis/rds/2014-10-31/resources-1.json +0 -3272
  313. data/apis/rds/2014-10-31/waiters-2.json +0 -102
  314. data/apis/redshift/2012-12-01/api-2.json +0 -3768
  315. data/apis/redshift/2012-12-01/examples-1.json +0 -5
  316. data/apis/redshift/2012-12-01/paginators-1.json +0 -94
  317. data/apis/redshift/2012-12-01/waiters-2.json +0 -97
  318. data/apis/route53/2013-04-01/api-2.json +0 -3245
  319. data/apis/route53/2013-04-01/examples-1.json +0 -5
  320. data/apis/route53/2013-04-01/paginators-1.json +0 -33
  321. data/apis/route53/2013-04-01/waiters-2.json +0 -18
  322. data/apis/route53domains/2014-05-15/api-2.json +0 -1197
  323. data/apis/route53domains/2014-05-15/paginators-1.json +0 -17
  324. data/apis/s3/2006-03-01/api-2.json +0 -4517
  325. data/apis/s3/2006-03-01/examples-1.json +0 -5
  326. data/apis/s3/2006-03-01/paginators-1.json +0 -66
  327. data/apis/s3/2006-03-01/resources-1.json +0 -1176
  328. data/apis/s3/2006-03-01/waiters-2.json +0 -73
  329. data/apis/sdb/2009-04-15/api-2.json +0 -954
  330. data/apis/sdb/2009-04-15/paginators-1.json +0 -15
  331. data/apis/servicecatalog/2015-12-10/api-2.json +0 -749
  332. data/apis/servicecatalog/2015-12-10/examples-1.json +0 -5
  333. data/apis/sns/2010-03-31/api-2.json +0 -1139
  334. data/apis/sns/2010-03-31/paginators-1.json +0 -29
  335. data/apis/sns/2010-03-31/resources-1.json +0 -327
  336. data/apis/sqs/2012-11-05/api-2.json +0 -950
  337. data/apis/sqs/2012-11-05/examples-1.json +0 -44
  338. data/apis/sqs/2012-11-05/paginators-1.json +0 -7
  339. data/apis/ssm/2014-11-06/api-2.json +0 -1742
  340. data/apis/ssm/2014-11-06/examples-1.json +0 -5
  341. data/apis/ssm/2014-11-06/paginators-1.json +0 -34
  342. data/apis/storagegateway/2013-06-30/api-2.json +0 -2275
  343. data/apis/storagegateway/2013-06-30/examples-1.json +0 -5
  344. data/apis/storagegateway/2013-06-30/paginators-1.json +0 -52
  345. data/apis/streams.dynamodb/2012-08-10/api-2.json +0 -397
  346. data/apis/streams.dynamodb/2012-08-10/examples-1.json +0 -5
  347. data/apis/sts/2011-06-15/api-2.json +0 -521
  348. data/apis/sts/2011-06-15/examples-1.json +0 -5
  349. data/apis/support/2013-04-15/api-2.json +0 -869
  350. data/apis/support/2013-04-15/paginators-1.json +0 -25
  351. data/apis/swf/2012-01-25/api-2.json +0 -2838
  352. data/apis/swf/2012-01-25/paginators-1.json +0 -46
  353. data/apis/waf/2015-08-24/api-2.json +0 -1959
  354. data/apis/waf/2015-08-24/examples-1.json +0 -5
  355. data/apis/workspaces/2015-04-08/api-2.json +0 -632
  356. data/apis/workspaces/2015-04-08/examples-1.json +0 -5
  357. data/apis/workspaces/2015-04-08/paginators-1.json +0 -20
  358. data/bin/aws.rb +0 -180
  359. data/endpoints.json +0 -1460
  360. data/lib/aws-sdk-core/acm.rb +0 -6
  361. data/lib/aws-sdk-core/api/builder.rb +0 -106
  362. data/lib/aws-sdk-core/api/customizations.rb +0 -217
  363. data/lib/aws-sdk-core/api/docs/builder.rb +0 -220
  364. data/lib/aws-sdk-core/api/docs/client_type_documenter.rb +0 -109
  365. data/lib/aws-sdk-core/api/docs/docstring_provider.rb +0 -75
  366. data/lib/aws-sdk-core/api/docs/operation_documenter.rb +0 -138
  367. data/lib/aws-sdk-core/api/docs/param_formatter.rb +0 -163
  368. data/lib/aws-sdk-core/api/docs/request_syntax_example.rb +0 -22
  369. data/lib/aws-sdk-core/api/docs/response_structure_example.rb +0 -91
  370. data/lib/aws-sdk-core/api/docs/shared_example.rb +0 -100
  371. data/lib/aws-sdk-core/api/docs/utils.rb +0 -133
  372. data/lib/aws-sdk-core/api/shape_map.rb +0 -142
  373. data/lib/aws-sdk-core/apigateway.rb +0 -6
  374. data/lib/aws-sdk-core/applicationautoscaling.rb +0 -6
  375. data/lib/aws-sdk-core/applicationdiscoveryservice.rb +0 -5
  376. data/lib/aws-sdk-core/autoscaling.rb +0 -8
  377. data/lib/aws-sdk-core/checksums.rb +0 -51
  378. data/lib/aws-sdk-core/client.rb +0 -67
  379. data/lib/aws-sdk-core/client_waiters.rb +0 -120
  380. data/lib/aws-sdk-core/cloudformation.rb +0 -8
  381. data/lib/aws-sdk-core/cloudfront.rb +0 -15
  382. data/lib/aws-sdk-core/cloudfront/url_signer.rb +0 -167
  383. data/lib/aws-sdk-core/cloudhsm.rb +0 -5
  384. data/lib/aws-sdk-core/cloudsearch.rb +0 -5
  385. data/lib/aws-sdk-core/cloudsearchdomain.rb +0 -5
  386. data/lib/aws-sdk-core/cloudtrail.rb +0 -6
  387. data/lib/aws-sdk-core/cloudwatch.rb +0 -8
  388. data/lib/aws-sdk-core/cloudwatchevents.rb +0 -5
  389. data/lib/aws-sdk-core/cloudwatchlogs.rb +0 -6
  390. data/lib/aws-sdk-core/codecommit.rb +0 -6
  391. data/lib/aws-sdk-core/codedeploy.rb +0 -6
  392. data/lib/aws-sdk-core/codepipeline.rb +0 -5
  393. data/lib/aws-sdk-core/cognitoidentity.rb +0 -5
  394. data/lib/aws-sdk-core/cognitoidentityprovider.rb +0 -5
  395. data/lib/aws-sdk-core/cognitosync.rb +0 -4
  396. data/lib/aws-sdk-core/configservice.rb +0 -6
  397. data/lib/aws-sdk-core/databasemigrationservice.rb +0 -5
  398. data/lib/aws-sdk-core/datapipeline.rb +0 -5
  399. data/lib/aws-sdk-core/devicefarm.rb +0 -6
  400. data/lib/aws-sdk-core/directconnect.rb +0 -6
  401. data/lib/aws-sdk-core/directoryservice.rb +0 -5
  402. data/lib/aws-sdk-core/dynamodb.rb +0 -40
  403. data/lib/aws-sdk-core/dynamodb/attribute_value.rb +0 -108
  404. data/lib/aws-sdk-core/dynamodbstreams.rb +0 -5
  405. data/lib/aws-sdk-core/ec2.rb +0 -8
  406. data/lib/aws-sdk-core/ecr.rb +0 -5
  407. data/lib/aws-sdk-core/ecs.rb +0 -7
  408. data/lib/aws-sdk-core/efs.rb +0 -5
  409. data/lib/aws-sdk-core/elasticache.rb +0 -7
  410. data/lib/aws-sdk-core/elasticbeanstalk.rb +0 -6
  411. data/lib/aws-sdk-core/elasticloadbalancing.rb +0 -6
  412. data/lib/aws-sdk-core/elasticsearchservice.rb +0 -4
  413. data/lib/aws-sdk-core/elastictranscoder.rb +0 -6
  414. data/lib/aws-sdk-core/empty_structure.rb +0 -3
  415. data/lib/aws-sdk-core/emr.rb +0 -7
  416. data/lib/aws-sdk-core/endpoint_provider.rb +0 -95
  417. data/lib/aws-sdk-core/firehose.rb +0 -4
  418. data/lib/aws-sdk-core/gamelift.rb +0 -5
  419. data/lib/aws-sdk-core/glacier.rb +0 -7
  420. data/lib/aws-sdk-core/iam.rb +0 -8
  421. data/lib/aws-sdk-core/importexport.rb +0 -5
  422. data/lib/aws-sdk-core/inspector.rb +0 -5
  423. data/lib/aws-sdk-core/iot.rb +0 -5
  424. data/lib/aws-sdk-core/iotdataplane.rb +0 -4
  425. data/lib/aws-sdk-core/kinesis.rb +0 -7
  426. data/lib/aws-sdk-core/kms.rb +0 -6
  427. data/lib/aws-sdk-core/lambda.rb +0 -6
  428. data/lib/aws-sdk-core/lambdapreview.rb +0 -5
  429. data/lib/aws-sdk-core/machinelearning.rb +0 -6
  430. data/lib/aws-sdk-core/marketplacecommerceanalytics.rb +0 -5
  431. data/lib/aws-sdk-core/marketplacemetering.rb +0 -5
  432. data/lib/aws-sdk-core/opsworks.rb +0 -8
  433. data/lib/aws-sdk-core/partitions.rb +0 -174
  434. data/lib/aws-sdk-core/partitions/partition.rb +0 -95
  435. data/lib/aws-sdk-core/partitions/partition_list.rb +0 -60
  436. data/lib/aws-sdk-core/partitions/region.rb +0 -78
  437. data/lib/aws-sdk-core/partitions/service.rb +0 -84
  438. data/lib/aws-sdk-core/plugins/api_gateway_header.rb +0 -19
  439. data/lib/aws-sdk-core/plugins/csd_conditional_signing.rb +0 -30
  440. data/lib/aws-sdk-core/plugins/dynamodb_crc32_validation.rb +0 -52
  441. data/lib/aws-sdk-core/plugins/dynamodb_extended_retries.rb +0 -22
  442. data/lib/aws-sdk-core/plugins/dynamodb_simple_attributes.rb +0 -209
  443. data/lib/aws-sdk-core/plugins/ec2_copy_encrypted_snapshot.rb +0 -87
  444. data/lib/aws-sdk-core/plugins/ec2_region_validation.rb +0 -17
  445. data/lib/aws-sdk-core/plugins/glacier_account_id.rb +0 -19
  446. data/lib/aws-sdk-core/plugins/glacier_api_version.rb +0 -19
  447. data/lib/aws-sdk-core/plugins/glacier_checksums.rb +0 -87
  448. data/lib/aws-sdk-core/plugins/machine_learning_predict_endpoint.rb +0 -20
  449. data/lib/aws-sdk-core/plugins/request_signer.rb +0 -138
  450. data/lib/aws-sdk-core/plugins/route_53_id_fix.rb +0 -55
  451. data/lib/aws-sdk-core/plugins/s3_accelerate.rb +0 -73
  452. data/lib/aws-sdk-core/plugins/s3_bucket_dns.rb +0 -86
  453. data/lib/aws-sdk-core/plugins/s3_bucket_name_restrictions.rb +0 -21
  454. data/lib/aws-sdk-core/plugins/s3_expect_100_continue.rb +0 -27
  455. data/lib/aws-sdk-core/plugins/s3_get_bucket_location_fix.rb +0 -21
  456. data/lib/aws-sdk-core/plugins/s3_http_200_errors.rb +0 -45
  457. data/lib/aws-sdk-core/plugins/s3_location_constraint.rb +0 -31
  458. data/lib/aws-sdk-core/plugins/s3_md5s.rb +0 -50
  459. data/lib/aws-sdk-core/plugins/s3_redirects.rb +0 -37
  460. data/lib/aws-sdk-core/plugins/s3_request_signer.rb +0 -166
  461. data/lib/aws-sdk-core/plugins/s3_sse_cpk.rb +0 -64
  462. data/lib/aws-sdk-core/plugins/s3_url_encoded_keys.rb +0 -92
  463. data/lib/aws-sdk-core/plugins/sqs_md5s.rb +0 -162
  464. data/lib/aws-sdk-core/plugins/sqs_queue_urls.rb +0 -34
  465. data/lib/aws-sdk-core/plugins/swf_read_timeouts.rb +0 -23
  466. data/lib/aws-sdk-core/rds.rb +0 -8
  467. data/lib/aws-sdk-core/redshift.rb +0 -7
  468. data/lib/aws-sdk-core/route53.rb +0 -7
  469. data/lib/aws-sdk-core/route53domains.rb +0 -5
  470. data/lib/aws-sdk-core/s3.rb +0 -26
  471. data/lib/aws-sdk-core/s3/bucket_region_cache.rb +0 -75
  472. data/lib/aws-sdk-core/s3/presigner.rb +0 -113
  473. data/lib/aws-sdk-core/service.rb +0 -4
  474. data/lib/aws-sdk-core/servicecatalog.rb +0 -5
  475. data/lib/aws-sdk-core/ses.rb +0 -7
  476. data/lib/aws-sdk-core/signers/base.rb +0 -31
  477. data/lib/aws-sdk-core/signers/s3.rb +0 -184
  478. data/lib/aws-sdk-core/signers/v2.rb +0 -51
  479. data/lib/aws-sdk-core/signers/v3.rb +0 -34
  480. data/lib/aws-sdk-core/signers/v4.rb +0 -233
  481. data/lib/aws-sdk-core/simpledb.rb +0 -5
  482. data/lib/aws-sdk-core/sns.rb +0 -6
  483. data/lib/aws-sdk-core/sqs.rb +0 -6
  484. data/lib/aws-sdk-core/ssm.rb +0 -6
  485. data/lib/aws-sdk-core/storagegateway.rb +0 -6
  486. data/lib/aws-sdk-core/sts.rb +0 -5
  487. data/lib/aws-sdk-core/support.rb +0 -5
  488. data/lib/aws-sdk-core/swf.rb +0 -5
  489. data/lib/aws-sdk-core/tree_hash.rb +0 -69
  490. data/lib/aws-sdk-core/version.rb +0 -3
  491. data/lib/aws-sdk-core/waf.rb +0 -5
  492. data/lib/aws-sdk-core/waiters/null_provider.rb +0 -12
  493. data/lib/aws-sdk-core/waiters/provider.rb +0 -35
  494. data/lib/aws-sdk-core/workspaces.rb +0 -6
  495. data/lib/seahorse/client/plugins/restful_bindings.rb +0 -127
  496. data/service-models.json +0 -285
@@ -0,0 +1,103 @@
1
+ module Aws
2
+ module Rest
3
+ module Request
4
+ class QuerystringBuilder
5
+
6
+ include Seahorse::Model::Shapes
7
+
8
+ # Provide shape references and param values:
9
+ #
10
+ # [
11
+ # [shape_ref1, 123],
12
+ # [shape_ref2, "text"]
13
+ # ]
14
+ #
15
+ # Returns a querystring:
16
+ #
17
+ # "Count=123&Words=text"
18
+ #
19
+ # @param [Array<Array<Seahorse::Model::ShapeRef, Object>>] params An array of
20
+ # model shape references and request parameter value pairs.
21
+ #
22
+ # @return [String] Returns a built querystring
23
+ def build(params)
24
+ params.map do |(shape_ref, param_value)|
25
+ build_part(shape_ref, param_value)
26
+ end.join('&')
27
+ end
28
+
29
+ private
30
+
31
+ def build_part(shape_ref, param_value)
32
+ case shape_ref.shape
33
+ # supported scalar types
34
+ when StringShape, BooleanShape, FloatShape, IntegerShape, StringShape
35
+ param_name = shape_ref.location_name
36
+ "#{param_name}=#{escape(param_value.to_s)}"
37
+ when TimestampShape
38
+ param_name = shape_ref.location_name
39
+ "#{param_name}=#{escape(timestamp(shape_ref, param_value))}"
40
+ when MapShape
41
+ if StringShape === shape_ref.shape.value.shape
42
+ query_map_of_string(param_value)
43
+ elsif ListShape === shape_ref.shape.value.shape
44
+ query_map_of_string_list(param_value)
45
+ else
46
+ msg = "only map of string and string list supported"
47
+ raise NotImplementedError, msg
48
+ end
49
+ when ListShape
50
+ if StringShape === shape_ref.shape.member.shape
51
+ list_of_strings(shape_ref.location_name, param_value)
52
+ else
53
+ msg = "Only list of strings supported, got "
54
+ msg << shape_ref.shape.member.shape.class.name
55
+ raise NotImplementedError, msg
56
+ end
57
+ else
58
+ raise NotImplementedError
59
+ end
60
+ end
61
+
62
+ def timestamp(ref, value)
63
+ case ref['timestampFormat'] || ref.shape['timestampFormat']
64
+ when 'unixTimestamp' then value.to_i
65
+ when 'rfc822' then value.utc.httpdate
66
+ else
67
+ # querystring defaults to iso8601
68
+ value.utc.iso8601
69
+ end
70
+ end
71
+
72
+ def query_map_of_string(hash)
73
+ list = []
74
+ hash.each_pair do |key, value|
75
+ list << "#{escape(key)}=#{escape(value)}"
76
+ end
77
+ list
78
+ end
79
+
80
+ def query_map_of_string_list(hash)
81
+ list = []
82
+ hash.each_pair do |key, values|
83
+ values.each do |value|
84
+ list << "#{escape(key)}=#{escape(value)}"
85
+ end
86
+ end
87
+ list
88
+ end
89
+
90
+ def list_of_strings(name, values)
91
+ values.map do |value|
92
+ "#{name}=#{escape(value)}"
93
+ end
94
+ end
95
+
96
+ def escape(string)
97
+ Seahorse::Util.uri_escape(string)
98
+ end
99
+
100
+ end
101
+ end
102
+ end
103
+ end
@@ -15,7 +15,9 @@ module Aws
15
15
  # @param [IO] body
16
16
  # @param [Hash, Struct] data
17
17
  def apply(body, data)
18
- if streaming?
18
+ if event_stream?
19
+ data[@rules[:payload]] = parse_eventstream(body)
20
+ elsif streaming?
19
21
  data[@rules[:payload]] = body
20
22
  elsif @rules[:payload]
21
23
  data[@rules[:payload]] = parse(body.read, @rules[:payload_member])
@@ -26,6 +28,10 @@ module Aws
26
28
 
27
29
  private
28
30
 
31
+ def event_stream?
32
+ @rules[:payload] && @rules[:payload_member].eventstream
33
+ end
34
+
29
35
  def streaming?
30
36
  @rules[:payload] && (
31
37
  BlobShape === @rules[:payload_member].shape ||
@@ -37,6 +43,13 @@ module Aws
37
43
  @parser_class.new(rules).parse(body, target) if body.size > 0
38
44
  end
39
45
 
46
+ def parse_eventstream(body)
47
+ # body contains an array of parsed event when they arrive
48
+ @rules[:payload_member].shape.struct_class.new do |payload|
49
+ body.each { |event| payload << event }
50
+ end
51
+ end
52
+
40
53
  end
41
54
  end
42
55
  end
@@ -1,4 +1,6 @@
1
1
  require 'time'
2
+ require 'base64'
3
+ require 'json'
2
4
 
3
5
  module Aws
4
6
  module Rest
@@ -31,6 +33,7 @@ module Aws
31
33
  end
32
34
 
33
35
  def cast_value(ref, value)
36
+ value = extract_json_trait(value) if ref['jsonvalue']
34
37
  case ref.shape
35
38
  when StringShape then value
36
39
  when IntegerShape then value.to_i
@@ -39,6 +42,8 @@ module Aws
39
42
  when TimestampShape
40
43
  if value =~ /\d+(\.\d*)/
41
44
  Time.at(value.to_f)
45
+ elsif value =~ /^\d+$/
46
+ Time.at(value.to_i)
42
47
  else
43
48
  begin
44
49
  Time.parse(value)
@@ -60,6 +65,10 @@ module Aws
60
65
  end
61
66
  end
62
67
 
68
+ def extract_json_trait(value)
69
+ JSON.parse(Base64.decode64(value))
70
+ end
71
+
63
72
  end
64
73
  end
65
74
  end
@@ -5,31 +5,34 @@ module Aws
5
5
 
6
6
  def apply(response)
7
7
  # TODO : remove this unless check once response stubbing is fixed
8
- unless response.data
9
- response.data = response.context.operation.output[:struct_class].new
8
+ if rules = response.context.operation.output
9
+ response.data = rules.shape.struct_class.new
10
+ extract_status_code(rules, response)
11
+ extract_headers(rules, response)
12
+ extract_body(rules, response)
13
+ else
14
+ response.data = EmptyStructure.new
10
15
  end
11
- extract_status_code(response)
12
- extract_headers(response)
13
- extract_body(response)
14
16
  end
15
17
 
16
18
  private
17
19
 
18
- def extract_status_code(response)
19
- status_code = StatusCode.new(response.context.operation.output)
20
+ def extract_status_code(rules, response)
21
+ status_code = StatusCode.new(rules)
20
22
  status_code.apply(response.context.http_response, response.data)
21
23
  end
22
24
 
23
- def extract_headers(response)
24
- headers = Headers.new(response.context.operation.output)
25
+ def extract_headers(rules, response)
26
+ headers = Headers.new(rules)
25
27
  headers.apply(response.context.http_response, response.data)
26
28
  end
27
29
 
28
- def extract_body(response)
29
- Body.new(
30
- parser_class(response),
31
- response.context.operation.output,
32
- ).apply(response.context.http_response.body, response.data)
30
+ def extract_body(rules, response)
31
+ Body.new(parser_class(response), rules).
32
+ apply(
33
+ response.context.http_response.body,
34
+ response.data
35
+ )
33
36
  end
34
37
 
35
38
  def parser_class(response)
@@ -37,6 +40,7 @@ module Aws
37
40
  case protocol
38
41
  when 'rest-xml' then Xml::Parser
39
42
  when 'rest-json' then Json::Parser
43
+ when 'api-gateway' then Json::Parser
40
44
  else raise "unsupported protocol #{protocol}"
41
45
  end
42
46
  end
@@ -0,0 +1,451 @@
1
+ module Aws
2
+
3
+ # @api private
4
+ class SharedConfig
5
+
6
+ # @return [String]
7
+ attr_reader :credentials_path
8
+
9
+ # @return [String]
10
+ attr_reader :config_path
11
+
12
+ # @return [String]
13
+ attr_reader :profile_name
14
+
15
+ # Constructs a new SharedConfig provider object. This will load the shared
16
+ # credentials file, and optionally the shared configuration file, as ini
17
+ # files which support profiles.
18
+ #
19
+ # By default, the shared credential file (the default path for which is
20
+ # `~/.aws/credentials`) and the shared config file (the default path for
21
+ # which is `~/.aws/config`) are loaded. However, if you set the
22
+ # `ENV['AWS_SDK_CONFIG_OPT_OUT']` environment variable, only the shared
23
+ # credential file will be loaded. You can specify the shared credential
24
+ # file path with the `ENV['AWS_SHARED_CREDENTIALS_FILE']` environment
25
+ # variable or with the `:credentials_path` option. Similarly, you can
26
+ # specify the shared config file path with the `ENV['AWS_CONFIG_FILE']`
27
+ # environment variable or with the `:config_path` option.
28
+ #
29
+ # The default profile name is 'default'. You can specify the profile name
30
+ # with the `ENV['AWS_PROFILE']` environment variable or with the
31
+ # `:profile_name` option.
32
+ #
33
+ # @param [Hash] options
34
+ # @option options [String] :credentials_path Path to the shared credentials
35
+ # file. If not specified, will check `ENV['AWS_SHARED_CREDENTIALS_FILE']`
36
+ # before using the default value of "#{Dir.home}/.aws/credentials".
37
+ # @option options [String] :config_path Path to the shared config file.
38
+ # If not specified, will check `ENV['AWS_CONFIG_FILE']` before using the
39
+ # default value of "#{Dir.home}/.aws/config".
40
+ # @option options [String] :profile_name The credential/config profile name
41
+ # to use. If not specified, will check `ENV['AWS_PROFILE']` before using
42
+ # the fixed default value of 'default'.
43
+ # @option options [Boolean] :config_enabled If true, loads the shared config
44
+ # file and enables new config values outside of the old shared credential
45
+ # spec.
46
+ def initialize(options = {})
47
+ @parsed_config = nil
48
+ @profile_name = determine_profile(options)
49
+ @config_enabled = options[:config_enabled]
50
+ @credentials_path = options[:credentials_path] ||
51
+ determine_credentials_path
52
+ @parsed_credentials = {}
53
+ load_credentials_file if loadable?(@credentials_path)
54
+ if @config_enabled
55
+ @config_path = options[:config_path] || determine_config_path
56
+ load_config_file if loadable?(@config_path)
57
+ end
58
+ end
59
+
60
+ # @api private
61
+ def fresh(options = {})
62
+ @profile_name = nil
63
+ @credentials_path = nil
64
+ @config_path = nil
65
+ @parsed_credentials = {}
66
+ @parsed_config = nil
67
+ @config_enabled = options[:config_enabled] ? true : false
68
+ @profile_name = determine_profile(options)
69
+ @credentials_path = options[:credentials_path] ||
70
+ determine_credentials_path
71
+ load_credentials_file if loadable?(@credentials_path)
72
+ if @config_enabled
73
+ @config_path = options[:config_path] || determine_config_path
74
+ load_config_file if loadable?(@config_path)
75
+ end
76
+ end
77
+
78
+ # @return [Boolean] Returns `true` if a credential file
79
+ # exists and has appropriate read permissions at {#path}.
80
+ # @note This method does not indicate if the file found at {#path}
81
+ # will be parsable, only if it can be read.
82
+ def loadable?(path)
83
+ !path.nil? && File.exist?(path) && File.readable?(path)
84
+ end
85
+
86
+ # @return [Boolean] returns `true` if use of the shared config file is
87
+ # enabled.
88
+ def config_enabled?
89
+ @config_enabled ? true : false
90
+ end
91
+
92
+ # Sources static credentials from shared credential/config files.
93
+ #
94
+ # @param [Hash] opts
95
+ # @option options [String] :profile the name of the configuration file from
96
+ # which credentials are being sourced.
97
+ # @return [Aws::Credentials] credentials sourced from configuration values,
98
+ # or `nil` if no valid credentials were found.
99
+ def credentials(opts = {})
100
+ p = opts[:profile] || @profile_name
101
+ validate_profile_exists(p) if credentials_present?
102
+ if (credentials = credentials_from_shared(p, opts))
103
+ credentials
104
+ elsif (credentials = credentials_from_config(p, opts))
105
+ credentials
106
+ end
107
+ end
108
+
109
+ # Attempts to assume a role from shared config or shared credentials file.
110
+ # Will always attempt first to assume a role from the shared credentials
111
+ # file, if present.
112
+ def assume_role_credentials_from_config(opts = {})
113
+ p = opts.delete(:profile) || @profile_name
114
+ chain_config = opts.delete(:chain_config)
115
+ credentials = assume_role_from_profile(@parsed_credentials, p, opts, chain_config)
116
+ if @parsed_config
117
+ credentials ||= assume_role_from_profile(@parsed_config, p, opts, chain_config)
118
+ end
119
+ credentials
120
+ end
121
+
122
+ def assume_role_web_identity_credentials_from_config(profile)
123
+ p = profile || @profile_name
124
+ if @config_enabled && @parsed_config
125
+ entry = @parsed_config.fetch(p, {})
126
+ if entry['web_identity_token_file'] &&
127
+ entry['role_arn']
128
+ AssumeRoleWebIdentityCredentials.new(
129
+ role_arn: entry['role_arn'],
130
+ web_identity_token_file: entry['web_identity_token_file'],
131
+ role_session_name: entry['role_session_name']
132
+ )
133
+ else
134
+ nil
135
+ end
136
+ else
137
+ nil
138
+ end
139
+ end
140
+
141
+ def region(opts = {})
142
+ p = opts[:profile] || @profile_name
143
+ if @config_enabled
144
+ if @parsed_credentials
145
+ region = @parsed_credentials.fetch(p, {})["region"]
146
+ end
147
+ if @parsed_config
148
+ region ||= @parsed_config.fetch(p, {})["region"]
149
+ end
150
+ region
151
+ else
152
+ nil
153
+ end
154
+ end
155
+
156
+ def sts_regional_endpoints(opts = {})
157
+ p = opts[:profile] || @profile_name
158
+ if @config_enabled
159
+ if @parsed_credentials
160
+ mode = @parsed_credentials.fetch(p, {})["sts_regional_endpoints"]
161
+ end
162
+ if @parsed_config
163
+ mode ||= @parsed_config.fetch(p, {})["sts_regional_endpoints"]
164
+ end
165
+ mode
166
+ else
167
+ nil
168
+ end
169
+ end
170
+
171
+ def s3_us_east_1_regional_endpoint(opts = {})
172
+ p = opts[:profile] || @profile_name
173
+ if @config_enabled
174
+ if @parsed_credentials
175
+ mode = @parsed_credentials.fetch(p, {})["s3_us_east_1_regional_endpoint"]
176
+ end
177
+ if @parsed_config
178
+ mode ||= @parsed_config.fetch(p, {})["s3_us_east_1_regional_endpoint"]
179
+ end
180
+ mode
181
+ else
182
+ nil
183
+ end
184
+ end
185
+
186
+ def s3_use_arn_region(opts = {})
187
+ p = opts[:profile] || @profile_name
188
+ if @config_enabled
189
+ if @parsed_credentials
190
+ value = @parsed_credentials.fetch(p, {})["s3_use_arn_region"]
191
+ end
192
+ if @parsed_config
193
+ value ||= @parsed_config.fetch(p, {})["s3_use_arn_region"]
194
+ end
195
+ value
196
+ else
197
+ nil
198
+ end
199
+ end
200
+
201
+ def endpoint_discovery(opts = {})
202
+ p = opts[:profile] || @profile_name
203
+ if @config_enabled && @parsed_config
204
+ @parsed_config.fetch(p, {})["endpoint_discovery_enabled"]
205
+ end
206
+ end
207
+
208
+ def credentials_process(profile)
209
+ validate_profile_exists(profile)
210
+ @parsed_config[profile]['credential_process']
211
+ end
212
+
213
+ def csm_enabled(opts = {})
214
+ p = opts[:profile] || @profile_name
215
+ if @config_enabled
216
+ if @parsed_credentials
217
+ value = @parsed_credentials.fetch(p, {})["csm_enabled"]
218
+ end
219
+ if @parsed_config
220
+ value ||= @parsed_config.fetch(p, {})["csm_enabled"]
221
+ end
222
+ value
223
+ else
224
+ nil
225
+ end
226
+ end
227
+
228
+ def csm_client_id(opts = {})
229
+ p = opts[:profile] || @profile_name
230
+ if @config_enabled
231
+ if @parsed_credentials
232
+ value = @parsed_credentials.fetch(p, {})["csm_client_id"]
233
+ end
234
+ if @parsed_config
235
+ value ||= @parsed_config.fetch(p, {})["csm_client_id"]
236
+ end
237
+ value
238
+ else
239
+ nil
240
+ end
241
+ end
242
+
243
+ def csm_port(opts = {})
244
+ p = opts[:profile] || @profile_name
245
+ if @config_enabled
246
+ if @parsed_credentials
247
+ value = @parsed_credentials.fetch(p, {})["csm_port"]
248
+ end
249
+ if @parsed_config
250
+ value ||= @parsed_config.fetch(p, {})["csm_port"]
251
+ end
252
+ value
253
+ else
254
+ nil
255
+ end
256
+ end
257
+
258
+ def csm_host(opts = {})
259
+ p = opts[:profile] || @profile_name
260
+ if @config_enabled
261
+ if @parsed_credentials
262
+ value = @parsed_credentials.fetch(p, {})["csm_host"]
263
+ end
264
+ if @parsed_config
265
+ value ||= @parsed_config.fetch(p, {})["csm_host"]
266
+ end
267
+ value
268
+ else
269
+ nil
270
+ end
271
+ end
272
+
273
+ private
274
+
275
+ def credentials_present?
276
+ (@parsed_credentials && !@parsed_credentials.empty?) ||
277
+ (@parsed_config && !@parsed_config.empty?)
278
+ end
279
+
280
+ def assume_role_from_profile(cfg, profile, opts, chain_config)
281
+ if cfg && prof_cfg = cfg[profile]
282
+ opts[:source_profile] ||= prof_cfg["source_profile"]
283
+ credential_source = opts.delete(:credential_source)
284
+ credential_source ||= prof_cfg["credential_source"]
285
+ if opts[:source_profile] && credential_source
286
+ raise Errors::CredentialSourceConflictError.new(
287
+ "Profile #{profile} has a source_profile, and "\
288
+ "a credential_source. For assume role credentials, must "\
289
+ "provide only source_profile or credential_source, not both."
290
+ )
291
+ elsif opts[:source_profile]
292
+ opts[:credentials] = resolve_source_profile(opts[:source_profile])
293
+ if opts[:credentials]
294
+ opts[:role_session_name] ||= prof_cfg["role_session_name"]
295
+ opts[:role_session_name] ||= "default_session"
296
+ opts[:role_arn] ||= prof_cfg["role_arn"]
297
+ opts[:duration_seconds] ||= prof_cfg["duration_seconds"]
298
+ opts[:external_id] ||= prof_cfg["external_id"]
299
+ opts[:serial_number] ||= prof_cfg["mfa_serial"]
300
+ opts[:profile] = opts.delete(:source_profile)
301
+ AssumeRoleCredentials.new(opts)
302
+ else
303
+ raise Errors::NoSourceProfileError.new(
304
+ "Profile #{profile} has a role_arn, and source_profile, but the"\
305
+ " source_profile does not have credentials."
306
+ )
307
+ end
308
+ elsif credential_source
309
+ opts[:credentials] = credentials_from_source(
310
+ credential_source,
311
+ chain_config
312
+ )
313
+ if opts[:credentials]
314
+ opts[:role_session_name] ||= prof_cfg["role_session_name"]
315
+ opts[:role_session_name] ||= "default_session"
316
+ opts[:role_arn] ||= prof_cfg["role_arn"]
317
+ opts[:duration_seconds] ||= prof_cfg["duration_seconds"]
318
+ opts[:external_id] ||= prof_cfg["external_id"]
319
+ opts[:serial_number] ||= prof_cfg["mfa_serial"]
320
+ opts.delete(:source_profile) # Cleanup
321
+ AssumeRoleCredentials.new(opts)
322
+ else
323
+ raise Errors::NoSourceCredentials.new(
324
+ "Profile #{profile} could not get source credentials from"\
325
+ " provider #{credential_source}"
326
+ )
327
+ end
328
+ elsif prof_cfg["role_arn"]
329
+ raise Errors::NoSourceProfileError.new(
330
+ "Profile #{profile} has a role_arn, but no source_profile."
331
+ )
332
+ else
333
+ nil
334
+ end
335
+ else
336
+ nil
337
+ end
338
+ end
339
+
340
+ def resolve_source_profile(profile)
341
+ if (creds = credentials(profile: profile))
342
+ creds # static credentials
343
+ elsif (provider = assume_role_web_identity_credentials_from_config(profile))
344
+ if provider.credentials.set?
345
+ provider.credentials
346
+ end
347
+ elsif (provider = assume_role_process_credentials_from_config(profile))
348
+ if provider.credentials.set?
349
+ provider.credentials
350
+ end
351
+ end
352
+ end
353
+
354
+ def credentials_from_source(credential_source, config)
355
+ case credential_source
356
+ when "Ec2InstanceMetadata"
357
+ InstanceProfileCredentials.new(
358
+ retries: config ? config.instance_profile_credentials_retries : 0,
359
+ http_open_timeout: config ? config.instance_profile_credentials_timeout : 1,
360
+ http_read_timeout: config ? config.instance_profile_credentials_timeout : 1
361
+ )
362
+ when "EcsContainer"
363
+ ECSCredentials.new
364
+ else
365
+ raise Errors::InvalidCredentialSourceError.new(
366
+ "Unsupported credential_source: #{credential_source}"
367
+ )
368
+ end
369
+ end
370
+
371
+ def assume_role_process_credentials_from_config(profile)
372
+ credential_process = credentials_process(profile)
373
+ ProcessCredentials.new(credential_process) if credential_process
374
+ end
375
+
376
+ def credentials_from_shared(profile, opts)
377
+ if @parsed_credentials && prof_config = @parsed_credentials[profile]
378
+ credentials_from_profile(prof_config)
379
+ else
380
+ nil
381
+ end
382
+ end
383
+
384
+ def credentials_from_config(profile, opts)
385
+ if @parsed_config && prof_config = @parsed_config[profile]
386
+ credentials_from_profile(prof_config)
387
+ else
388
+ nil
389
+ end
390
+ end
391
+
392
+ def credentials_from_profile(prof_config)
393
+ creds = Credentials.new(
394
+ prof_config['aws_access_key_id'],
395
+ prof_config['aws_secret_access_key'],
396
+ prof_config['aws_session_token']
397
+ )
398
+ if credentials_complete(creds)
399
+ creds
400
+ else
401
+ nil
402
+ end
403
+ end
404
+
405
+ def credentials_complete(creds)
406
+ creds.set?
407
+ end
408
+
409
+ def load_credentials_file
410
+ @parsed_credentials = IniParser.ini_parse(
411
+ File.read(@credentials_path)
412
+ )
413
+ end
414
+
415
+ def load_config_file
416
+ @parsed_config = IniParser.ini_parse(File.read(@config_path))
417
+ end
418
+
419
+ def determine_credentials_path
420
+ ENV['AWS_SHARED_CREDENTIALS_FILE'] || default_shared_config_path('credentials')
421
+ end
422
+
423
+ def determine_config_path
424
+ ENV['AWS_CONFIG_FILE'] || default_shared_config_path('config')
425
+ end
426
+
427
+ def default_shared_config_path(file)
428
+ File.join(Dir.home, '.aws', file)
429
+ rescue ArgumentError
430
+ # Dir.home raises ArgumentError when ENV['home'] is not set
431
+ nil
432
+ end
433
+
434
+ def validate_profile_exists(profile)
435
+ unless (@parsed_credentials && @parsed_credentials[profile]) ||
436
+ (@parsed_config && @parsed_config[profile])
437
+ msg = "Profile `#{profile}' not found in #{@credentials_path}"
438
+ msg << " or #{@config_path}" if @config_path
439
+ raise Errors::NoSuchProfileError.new(msg)
440
+ end
441
+ end
442
+
443
+ def determine_profile(options)
444
+ ret = options[:profile_name]
445
+ ret ||= ENV["AWS_PROFILE"]
446
+ ret ||= "default"
447
+ ret
448
+ end
449
+
450
+ end
451
+ end