aws-sdk-v1 1.52.0

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 (560) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +7 -0
  3. data/LICENSE.txt +12 -0
  4. data/README.md +337 -0
  5. data/bin/aws-rb +179 -0
  6. data/ca-bundle.crt +3554 -0
  7. data/endpoints.json +1671 -0
  8. data/lib/aws-sdk-v1.rb +2 -0
  9. data/lib/aws-sdk.rb +1 -0
  10. data/lib/aws.rb +14 -0
  11. data/lib/aws/api_config/AutoScaling-2011-01-01.yml +1070 -0
  12. data/lib/aws/api_config/CloudFormation-2010-05-15.yml +372 -0
  13. data/lib/aws/api_config/CloudFront-2013-05-12.yml +2448 -0
  14. data/lib/aws/api_config/CloudFront-2013-08-26.yml +2599 -0
  15. data/lib/aws/api_config/CloudFront-2013-09-27.yml +2765 -0
  16. data/lib/aws/api_config/CloudFront-2013-11-11.yml +2886 -0
  17. data/lib/aws/api_config/CloudFront-2013-11-22.yml +2918 -0
  18. data/lib/aws/api_config/CloudFront-2014-01-31.yml +2934 -0
  19. data/lib/aws/api_config/CloudFront-2014-05-31.yml +3100 -0
  20. data/lib/aws/api_config/CloudSearch-2011-02-01.yml +681 -0
  21. data/lib/aws/api_config/CloudSearch-2013-01-01.yml +1164 -0
  22. data/lib/aws/api_config/CloudTrail-2013-11-01.yml +130 -0
  23. data/lib/aws/api_config/CloudWatch-2010-08-01.yml +433 -0
  24. data/lib/aws/api_config/DataPipeline-2012-10-29.yml +422 -0
  25. data/lib/aws/api_config/DirectConnect-2012-10-25.yml +735 -0
  26. data/lib/aws/api_config/DynamoDB-2011-12-05.yml +1168 -0
  27. data/lib/aws/api_config/DynamoDB-2012-08-10.yml +2105 -0
  28. data/lib/aws/api_config/EC2-2013-08-15.yml +4708 -0
  29. data/lib/aws/api_config/EC2-2013-10-01.yml +4726 -0
  30. data/lib/aws/api_config/EC2-2013-10-15.yml +4651 -0
  31. data/lib/aws/api_config/EC2-2014-02-01.yml +4755 -0
  32. data/lib/aws/api_config/EC2-2014-05-01.yml +4812 -0
  33. data/lib/aws/api_config/ELB-2012-06-01.yml +766 -0
  34. data/lib/aws/api_config/EMR-2009-03-31.yml +972 -0
  35. data/lib/aws/api_config/ElastiCache-2013-06-15.yml +1188 -0
  36. data/lib/aws/api_config/ElastiCache-2014-03-24.yml +1375 -0
  37. data/lib/aws/api_config/ElastiCache-2014-07-15.yml +1385 -0
  38. data/lib/aws/api_config/ElasticBeanstalk-2010-12-01.yml +854 -0
  39. data/lib/aws/api_config/ElasticTranscoder-2012-09-25.yml +3082 -0
  40. data/lib/aws/api_config/Glacier-2012-06-01.yml +649 -0
  41. data/lib/aws/api_config/IAM-2010-05-08.yml +1339 -0
  42. data/lib/aws/api_config/ImportExport-2010-06-01.yml +109 -0
  43. data/lib/aws/api_config/Kinesis-2013-12-02.yml +201 -0
  44. data/lib/aws/api_config/OpsWorks-2013-02-18.yml +2025 -0
  45. data/lib/aws/api_config/RDS-2013-05-15.yml +2464 -0
  46. data/lib/aws/api_config/RDS-2013-09-09.yml +2640 -0
  47. data/lib/aws/api_config/Redshift-2012-12-01.yml +2161 -0
  48. data/lib/aws/api_config/Route53-2012-12-12.yml +547 -0
  49. data/lib/aws/api_config/Route53-2013-04-01.yml +889 -0
  50. data/lib/aws/api_config/SNS-2010-03-31.yml +448 -0
  51. data/lib/aws/api_config/SQS-2012-11-05.yml +404 -0
  52. data/lib/aws/api_config/STS-2011-06-15.yml +151 -0
  53. data/lib/aws/api_config/SimpleDB-2009-04-15.yml +306 -0
  54. data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +346 -0
  55. data/lib/aws/api_config/SimpleWorkflow-2012-01-25.yml +2388 -0
  56. data/lib/aws/api_config/StorageGateway-2012-06-30.yml +748 -0
  57. data/lib/aws/api_config/StorageGateway-2013-06-30.yml +1025 -0
  58. data/lib/aws/api_config/Support-2013-04-15.yml +489 -0
  59. data/lib/aws/auto_scaling.rb +163 -0
  60. data/lib/aws/auto_scaling/activity.rb +102 -0
  61. data/lib/aws/auto_scaling/activity_collection.rb +81 -0
  62. data/lib/aws/auto_scaling/client.rb +48 -0
  63. data/lib/aws/auto_scaling/config.rb +18 -0
  64. data/lib/aws/auto_scaling/errors.rb +22 -0
  65. data/lib/aws/auto_scaling/group.rb +421 -0
  66. data/lib/aws/auto_scaling/group_collection.rb +96 -0
  67. data/lib/aws/auto_scaling/group_options.rb +155 -0
  68. data/lib/aws/auto_scaling/instance.rb +192 -0
  69. data/lib/aws/auto_scaling/instance_collection.rb +63 -0
  70. data/lib/aws/auto_scaling/launch_configuration.rb +162 -0
  71. data/lib/aws/auto_scaling/launch_configuration_collection.rb +160 -0
  72. data/lib/aws/auto_scaling/notification_configuration.rb +89 -0
  73. data/lib/aws/auto_scaling/notification_configuration_collection.rb +183 -0
  74. data/lib/aws/auto_scaling/scaling_policy.rb +142 -0
  75. data/lib/aws/auto_scaling/scaling_policy_collection.rb +72 -0
  76. data/lib/aws/auto_scaling/scaling_policy_options.rb +65 -0
  77. data/lib/aws/auto_scaling/scheduled_action.rb +141 -0
  78. data/lib/aws/auto_scaling/scheduled_action_collection.rb +202 -0
  79. data/lib/aws/auto_scaling/tag.rb +59 -0
  80. data/lib/aws/auto_scaling/tag_collection.rb +114 -0
  81. data/lib/aws/cloud_formation.rb +272 -0
  82. data/lib/aws/cloud_formation/client.rb +48 -0
  83. data/lib/aws/cloud_formation/config.rb +18 -0
  84. data/lib/aws/cloud_formation/errors.rb +22 -0
  85. data/lib/aws/cloud_formation/stack.rb +266 -0
  86. data/lib/aws/cloud_formation/stack_collection.rb +232 -0
  87. data/lib/aws/cloud_formation/stack_event.rb +73 -0
  88. data/lib/aws/cloud_formation/stack_event_collection.rb +47 -0
  89. data/lib/aws/cloud_formation/stack_options.rb +72 -0
  90. data/lib/aws/cloud_formation/stack_output.rb +53 -0
  91. data/lib/aws/cloud_formation/stack_resource.rb +117 -0
  92. data/lib/aws/cloud_formation/stack_resource_collection.rb +83 -0
  93. data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +64 -0
  94. data/lib/aws/cloud_formation/stack_summary_collection.rb +123 -0
  95. data/lib/aws/cloud_front.rb +72 -0
  96. data/lib/aws/cloud_front/client.rb +57 -0
  97. data/lib/aws/cloud_front/config.rb +18 -0
  98. data/lib/aws/cloud_front/errors.rb +22 -0
  99. data/lib/aws/cloud_search.rb +73 -0
  100. data/lib/aws/cloud_search/client.rb +40 -0
  101. data/lib/aws/cloud_search/config.rb +18 -0
  102. data/lib/aws/cloud_search/errors.rb +22 -0
  103. data/lib/aws/cloud_trail.rb +72 -0
  104. data/lib/aws/cloud_trail/client.rb +35 -0
  105. data/lib/aws/cloud_trail/config.rb +18 -0
  106. data/lib/aws/cloud_trail/errors.rb +22 -0
  107. data/lib/aws/cloud_watch.rb +118 -0
  108. data/lib/aws/cloud_watch/alarm.rb +293 -0
  109. data/lib/aws/cloud_watch/alarm_collection.rb +153 -0
  110. data/lib/aws/cloud_watch/alarm_history_item.rb +50 -0
  111. data/lib/aws/cloud_watch/alarm_history_item_collection.rb +84 -0
  112. data/lib/aws/cloud_watch/client.rb +40 -0
  113. data/lib/aws/cloud_watch/config.rb +18 -0
  114. data/lib/aws/cloud_watch/errors.rb +22 -0
  115. data/lib/aws/cloud_watch/metric.rb +135 -0
  116. data/lib/aws/cloud_watch/metric_alarm_collection.rb +160 -0
  117. data/lib/aws/cloud_watch/metric_collection.rb +129 -0
  118. data/lib/aws/cloud_watch/metric_statistics.rb +69 -0
  119. data/lib/aws/core.rb +716 -0
  120. data/lib/aws/core/async_handle.rb +90 -0
  121. data/lib/aws/core/cacheable.rb +77 -0
  122. data/lib/aws/core/client.rb +787 -0
  123. data/lib/aws/core/collection.rb +263 -0
  124. data/lib/aws/core/collection/simple.rb +82 -0
  125. data/lib/aws/core/collection/with_limit_and_next_token.rb +71 -0
  126. data/lib/aws/core/collection/with_next_token.rb +97 -0
  127. data/lib/aws/core/configuration.rb +542 -0
  128. data/lib/aws/core/credential_providers.rb +639 -0
  129. data/lib/aws/core/data.rb +247 -0
  130. data/lib/aws/core/deprecations.rb +84 -0
  131. data/lib/aws/core/endpoints.rb +37 -0
  132. data/lib/aws/core/http/connection_pool.rb +369 -0
  133. data/lib/aws/core/http/curb_handler.rb +148 -0
  134. data/lib/aws/core/http/handler.rb +89 -0
  135. data/lib/aws/core/http/net_http_handler.rb +144 -0
  136. data/lib/aws/core/http/patch.rb +102 -0
  137. data/lib/aws/core/http/request.rb +259 -0
  138. data/lib/aws/core/http/response.rb +81 -0
  139. data/lib/aws/core/indifferent_hash.rb +88 -0
  140. data/lib/aws/core/inflection.rb +56 -0
  141. data/lib/aws/core/ini_parser.rb +42 -0
  142. data/lib/aws/core/json_client.rb +47 -0
  143. data/lib/aws/core/json_parser.rb +76 -0
  144. data/lib/aws/core/json_request_builder.rb +35 -0
  145. data/lib/aws/core/json_response_parser.rb +79 -0
  146. data/lib/aws/core/lazy_error_classes.rb +108 -0
  147. data/lib/aws/core/log_formatter.rb +428 -0
  148. data/lib/aws/core/managed_file.rb +32 -0
  149. data/lib/aws/core/meta_utils.rb +45 -0
  150. data/lib/aws/core/model.rb +62 -0
  151. data/lib/aws/core/naming.rb +30 -0
  152. data/lib/aws/core/option_grammar.rb +738 -0
  153. data/lib/aws/core/options/json_serializer.rb +82 -0
  154. data/lib/aws/core/options/validator.rb +155 -0
  155. data/lib/aws/core/options/xml_serializer.rb +118 -0
  156. data/lib/aws/core/page_result.rb +75 -0
  157. data/lib/aws/core/policy.rb +941 -0
  158. data/lib/aws/core/query_client.rb +41 -0
  159. data/lib/aws/core/query_error_parser.rb +24 -0
  160. data/lib/aws/core/query_request_builder.rb +47 -0
  161. data/lib/aws/core/query_response_parser.rb +35 -0
  162. data/lib/aws/core/region.rb +85 -0
  163. data/lib/aws/core/region_collection.rb +80 -0
  164. data/lib/aws/core/resource.rb +413 -0
  165. data/lib/aws/core/resource_cache.rb +40 -0
  166. data/lib/aws/core/response.rb +215 -0
  167. data/lib/aws/core/response_cache.rb +50 -0
  168. data/lib/aws/core/rest_error_parser.rb +24 -0
  169. data/lib/aws/core/rest_json_client.rb +40 -0
  170. data/lib/aws/core/rest_request_builder.rb +154 -0
  171. data/lib/aws/core/rest_response_parser.rb +66 -0
  172. data/lib/aws/core/rest_xml_client.rb +47 -0
  173. data/lib/aws/core/service_interface.rb +83 -0
  174. data/lib/aws/core/signers/base.rb +46 -0
  175. data/lib/aws/core/signers/cloud_front.rb +56 -0
  176. data/lib/aws/core/signers/s3.rb +159 -0
  177. data/lib/aws/core/signers/version_2.rb +72 -0
  178. data/lib/aws/core/signers/version_3.rb +86 -0
  179. data/lib/aws/core/signers/version_3_https.rb +61 -0
  180. data/lib/aws/core/signers/version_4.rb +228 -0
  181. data/lib/aws/core/signers/version_4/chunk_signed_stream.rb +191 -0
  182. data/lib/aws/core/uri_escape.rb +44 -0
  183. data/lib/aws/core/xml/frame.rb +245 -0
  184. data/lib/aws/core/xml/frame_stack.rb +85 -0
  185. data/lib/aws/core/xml/grammar.rb +307 -0
  186. data/lib/aws/core/xml/parser.rb +70 -0
  187. data/lib/aws/core/xml/root_frame.rb +65 -0
  188. data/lib/aws/core/xml/sax_handlers/libxml.rb +47 -0
  189. data/lib/aws/core/xml/sax_handlers/nokogiri.rb +56 -0
  190. data/lib/aws/core/xml/sax_handlers/ox.rb +41 -0
  191. data/lib/aws/core/xml/sax_handlers/rexml.rb +47 -0
  192. data/lib/aws/core/xml/stub.rb +123 -0
  193. data/lib/aws/data_pipeline.rb +72 -0
  194. data/lib/aws/data_pipeline/client.rb +36 -0
  195. data/lib/aws/data_pipeline/config.rb +18 -0
  196. data/lib/aws/data_pipeline/errors.rb +20 -0
  197. data/lib/aws/direct_connect.rb +73 -0
  198. data/lib/aws/direct_connect/client.rb +36 -0
  199. data/lib/aws/direct_connect/config.rb +18 -0
  200. data/lib/aws/direct_connect/errors.rb +22 -0
  201. data/lib/aws/dynamo_db.rb +230 -0
  202. data/lib/aws/dynamo_db/attribute_collection.rb +456 -0
  203. data/lib/aws/dynamo_db/batch_get.rb +213 -0
  204. data/lib/aws/dynamo_db/batch_write.rb +254 -0
  205. data/lib/aws/dynamo_db/binary.rb +35 -0
  206. data/lib/aws/dynamo_db/client.rb +129 -0
  207. data/lib/aws/dynamo_db/client/v20111205.rb +1266 -0
  208. data/lib/aws/dynamo_db/client/v20120810.rb +1409 -0
  209. data/lib/aws/dynamo_db/client_v2.rb +44 -0
  210. data/lib/aws/dynamo_db/config.rb +24 -0
  211. data/lib/aws/dynamo_db/errors.rb +20 -0
  212. data/lib/aws/dynamo_db/expectations.rb +40 -0
  213. data/lib/aws/dynamo_db/item.rb +133 -0
  214. data/lib/aws/dynamo_db/item_collection.rb +856 -0
  215. data/lib/aws/dynamo_db/item_data.rb +31 -0
  216. data/lib/aws/dynamo_db/keys.rb +41 -0
  217. data/lib/aws/dynamo_db/primary_key_element.rb +48 -0
  218. data/lib/aws/dynamo_db/resource.rb +33 -0
  219. data/lib/aws/dynamo_db/table.rb +492 -0
  220. data/lib/aws/dynamo_db/table_collection.rb +165 -0
  221. data/lib/aws/dynamo_db/types.rb +111 -0
  222. data/lib/aws/ec2.rb +428 -0
  223. data/lib/aws/ec2/attachment.rb +135 -0
  224. data/lib/aws/ec2/attachment_collection.rb +54 -0
  225. data/lib/aws/ec2/availability_zone.rb +86 -0
  226. data/lib/aws/ec2/availability_zone_collection.rb +43 -0
  227. data/lib/aws/ec2/block_device_mappings.rb +53 -0
  228. data/lib/aws/ec2/client.rb +154 -0
  229. data/lib/aws/ec2/collection.rb +36 -0
  230. data/lib/aws/ec2/config.rb +21 -0
  231. data/lib/aws/ec2/customer_gateway.rb +90 -0
  232. data/lib/aws/ec2/customer_gateway_collection.rb +73 -0
  233. data/lib/aws/ec2/dhcp_options.rb +106 -0
  234. data/lib/aws/ec2/dhcp_options_collection.rb +87 -0
  235. data/lib/aws/ec2/elastic_ip.rb +209 -0
  236. data/lib/aws/ec2/elastic_ip_collection.rb +93 -0
  237. data/lib/aws/ec2/errors.rb +32 -0
  238. data/lib/aws/ec2/export_task.rb +120 -0
  239. data/lib/aws/ec2/export_task_collection.rb +67 -0
  240. data/lib/aws/ec2/filtered_collection.rb +87 -0
  241. data/lib/aws/ec2/has_permissions.rb +44 -0
  242. data/lib/aws/ec2/image.rb +270 -0
  243. data/lib/aws/ec2/image_collection.rb +219 -0
  244. data/lib/aws/ec2/instance.rb +803 -0
  245. data/lib/aws/ec2/instance_collection.rb +402 -0
  246. data/lib/aws/ec2/internet_gateway.rb +122 -0
  247. data/lib/aws/ec2/internet_gateway/attachment.rb +78 -0
  248. data/lib/aws/ec2/internet_gateway_collection.rb +54 -0
  249. data/lib/aws/ec2/key_pair.rb +82 -0
  250. data/lib/aws/ec2/key_pair_collection.rb +99 -0
  251. data/lib/aws/ec2/network_acl.rb +256 -0
  252. data/lib/aws/ec2/network_acl/association.rb +56 -0
  253. data/lib/aws/ec2/network_acl/entry.rb +147 -0
  254. data/lib/aws/ec2/network_acl_collection.rb +64 -0
  255. data/lib/aws/ec2/network_interface.rb +237 -0
  256. data/lib/aws/ec2/network_interface/attachment.rb +100 -0
  257. data/lib/aws/ec2/network_interface_collection.rb +103 -0
  258. data/lib/aws/ec2/permission_collection.rb +174 -0
  259. data/lib/aws/ec2/region.rb +106 -0
  260. data/lib/aws/ec2/region_collection.rb +51 -0
  261. data/lib/aws/ec2/reserved_instances.rb +57 -0
  262. data/lib/aws/ec2/reserved_instances_collection.rb +40 -0
  263. data/lib/aws/ec2/reserved_instances_offering.rb +60 -0
  264. data/lib/aws/ec2/reserved_instances_offering_collection.rb +45 -0
  265. data/lib/aws/ec2/resource.rb +161 -0
  266. data/lib/aws/ec2/resource_tag_collection.rb +211 -0
  267. data/lib/aws/ec2/route_table.rb +205 -0
  268. data/lib/aws/ec2/route_table/association.rb +119 -0
  269. data/lib/aws/ec2/route_table/route.rb +119 -0
  270. data/lib/aws/ec2/route_table_collection.rb +72 -0
  271. data/lib/aws/ec2/security_group.rb +482 -0
  272. data/lib/aws/ec2/security_group/ip_permission.rb +135 -0
  273. data/lib/aws/ec2/security_group/ip_permission_collection.rb +82 -0
  274. data/lib/aws/ec2/security_group_collection.rb +133 -0
  275. data/lib/aws/ec2/snapshot.rb +143 -0
  276. data/lib/aws/ec2/snapshot_collection.rb +131 -0
  277. data/lib/aws/ec2/subnet.rb +161 -0
  278. data/lib/aws/ec2/subnet_collection.rb +119 -0
  279. data/lib/aws/ec2/tag.rb +81 -0
  280. data/lib/aws/ec2/tag_collection.rb +107 -0
  281. data/lib/aws/ec2/tagged_collection.rb +67 -0
  282. data/lib/aws/ec2/tagged_item.rb +85 -0
  283. data/lib/aws/ec2/volume.rb +185 -0
  284. data/lib/aws/ec2/volume_collection.rb +102 -0
  285. data/lib/aws/ec2/vpc.rb +174 -0
  286. data/lib/aws/ec2/vpc_collection.rb +70 -0
  287. data/lib/aws/ec2/vpn_connection.rb +99 -0
  288. data/lib/aws/ec2/vpn_connection/telemetry.rb +49 -0
  289. data/lib/aws/ec2/vpn_connection_collection.rb +96 -0
  290. data/lib/aws/ec2/vpn_gateway.rb +123 -0
  291. data/lib/aws/ec2/vpn_gateway/attachment.rb +45 -0
  292. data/lib/aws/ec2/vpn_gateway_collection.rb +77 -0
  293. data/lib/aws/elastic_beanstalk.rb +49 -0
  294. data/lib/aws/elastic_beanstalk/client.rb +36 -0
  295. data/lib/aws/elastic_beanstalk/config.rb +18 -0
  296. data/lib/aws/elastic_beanstalk/errors.rb +22 -0
  297. data/lib/aws/elastic_transcoder.rb +29 -0
  298. data/lib/aws/elastic_transcoder/client.rb +48 -0
  299. data/lib/aws/elastic_transcoder/config.rb +18 -0
  300. data/lib/aws/elastic_transcoder/errors.rb +23 -0
  301. data/lib/aws/elasticache.rb +49 -0
  302. data/lib/aws/elasticache/client.rb +41 -0
  303. data/lib/aws/elasticache/config.rb +18 -0
  304. data/lib/aws/elasticache/errors.rb +22 -0
  305. data/lib/aws/elb.rb +66 -0
  306. data/lib/aws/elb/availability_zone_collection.rb +138 -0
  307. data/lib/aws/elb/backend_server_policy_collection.rb +139 -0
  308. data/lib/aws/elb/client.rb +35 -0
  309. data/lib/aws/elb/config.rb +18 -0
  310. data/lib/aws/elb/errors.rb +26 -0
  311. data/lib/aws/elb/instance_collection.rb +168 -0
  312. data/lib/aws/elb/listener.rb +190 -0
  313. data/lib/aws/elb/listener_collection.rb +113 -0
  314. data/lib/aws/elb/listener_opts.rb +45 -0
  315. data/lib/aws/elb/load_balancer.rb +280 -0
  316. data/lib/aws/elb/load_balancer_collection.rb +146 -0
  317. data/lib/aws/elb/load_balancer_policy.rb +93 -0
  318. data/lib/aws/elb/load_balancer_policy_collection.rb +208 -0
  319. data/lib/aws/emr.rb +87 -0
  320. data/lib/aws/emr/client.rb +35 -0
  321. data/lib/aws/emr/config.rb +18 -0
  322. data/lib/aws/emr/errors.rb +22 -0
  323. data/lib/aws/emr/instance_group.rb +138 -0
  324. data/lib/aws/emr/instance_group_collection.rb +82 -0
  325. data/lib/aws/emr/job_flow.rb +307 -0
  326. data/lib/aws/emr/job_flow_collection.rb +183 -0
  327. data/lib/aws/errors.rb +162 -0
  328. data/lib/aws/glacier.rb +79 -0
  329. data/lib/aws/glacier/archive.rb +56 -0
  330. data/lib/aws/glacier/archive_collection.rb +146 -0
  331. data/lib/aws/glacier/client.rb +49 -0
  332. data/lib/aws/glacier/config.rb +19 -0
  333. data/lib/aws/glacier/errors.rb +22 -0
  334. data/lib/aws/glacier/resource.rb +30 -0
  335. data/lib/aws/glacier/vault.rb +145 -0
  336. data/lib/aws/glacier/vault_collection.rb +75 -0
  337. data/lib/aws/glacier/vault_notification_configuration.rb +29 -0
  338. data/lib/aws/iam.rb +408 -0
  339. data/lib/aws/iam/access_key.rb +185 -0
  340. data/lib/aws/iam/access_key_collection.rb +128 -0
  341. data/lib/aws/iam/account_alias_collection.rb +79 -0
  342. data/lib/aws/iam/client.rb +49 -0
  343. data/lib/aws/iam/collection.rb +83 -0
  344. data/lib/aws/iam/config.rb +18 -0
  345. data/lib/aws/iam/errors.rb +22 -0
  346. data/lib/aws/iam/group.rb +111 -0
  347. data/lib/aws/iam/group_collection.rb +132 -0
  348. data/lib/aws/iam/group_policy_collection.rb +47 -0
  349. data/lib/aws/iam/group_user_collection.rb +84 -0
  350. data/lib/aws/iam/login_profile.rb +111 -0
  351. data/lib/aws/iam/mfa_device.rb +52 -0
  352. data/lib/aws/iam/mfa_device_collection.rb +127 -0
  353. data/lib/aws/iam/policy.rb +46 -0
  354. data/lib/aws/iam/policy_collection.rb +188 -0
  355. data/lib/aws/iam/resource.rb +62 -0
  356. data/lib/aws/iam/server_certificate.rb +148 -0
  357. data/lib/aws/iam/server_certificate_collection.rb +138 -0
  358. data/lib/aws/iam/signing_certificate.rb +186 -0
  359. data/lib/aws/iam/signing_certificate_collection.rb +131 -0
  360. data/lib/aws/iam/user.rb +200 -0
  361. data/lib/aws/iam/user_collection.rb +133 -0
  362. data/lib/aws/iam/user_group_collection.rb +98 -0
  363. data/lib/aws/iam/user_policy.rb +90 -0
  364. data/lib/aws/iam/user_policy_collection.rb +45 -0
  365. data/lib/aws/iam/virtual_mfa_device.rb +139 -0
  366. data/lib/aws/iam/virtual_mfa_device_collection.rb +73 -0
  367. data/lib/aws/import_export.rb +73 -0
  368. data/lib/aws/import_export/client.rb +35 -0
  369. data/lib/aws/import_export/config.rb +19 -0
  370. data/lib/aws/import_export/errors.rb +22 -0
  371. data/lib/aws/kinesis.rb +53 -0
  372. data/lib/aws/kinesis/client.rb +35 -0
  373. data/lib/aws/kinesis/config.rb +18 -0
  374. data/lib/aws/kinesis/errors.rb +20 -0
  375. data/lib/aws/ops_works.rb +29 -0
  376. data/lib/aws/ops_works/client.rb +35 -0
  377. data/lib/aws/ops_works/config.rb +18 -0
  378. data/lib/aws/ops_works/errors.rb +20 -0
  379. data/lib/aws/rails.rb +195 -0
  380. data/lib/aws/rds.rb +70 -0
  381. data/lib/aws/rds/client.rb +42 -0
  382. data/lib/aws/rds/config.rb +18 -0
  383. data/lib/aws/rds/db_instance.rb +215 -0
  384. data/lib/aws/rds/db_instance_collection.rb +75 -0
  385. data/lib/aws/rds/db_snapshot.rb +163 -0
  386. data/lib/aws/rds/db_snapshot_collection.rb +89 -0
  387. data/lib/aws/rds/errors.rb +22 -0
  388. data/lib/aws/record.rb +139 -0
  389. data/lib/aws/record/abstract_base.rb +689 -0
  390. data/lib/aws/record/attributes.rb +388 -0
  391. data/lib/aws/record/conversion.rb +38 -0
  392. data/lib/aws/record/dirty_tracking.rb +287 -0
  393. data/lib/aws/record/errors.rb +143 -0
  394. data/lib/aws/record/exceptions.rb +51 -0
  395. data/lib/aws/record/hash_model.rb +204 -0
  396. data/lib/aws/record/hash_model/attributes.rb +195 -0
  397. data/lib/aws/record/hash_model/finder_methods.rb +172 -0
  398. data/lib/aws/record/hash_model/scope.rb +108 -0
  399. data/lib/aws/record/model.rb +453 -0
  400. data/lib/aws/record/model/attributes.rb +377 -0
  401. data/lib/aws/record/model/finder_methods.rb +232 -0
  402. data/lib/aws/record/model/scope.rb +212 -0
  403. data/lib/aws/record/naming.rb +31 -0
  404. data/lib/aws/record/scope.rb +203 -0
  405. data/lib/aws/record/validations.rb +694 -0
  406. data/lib/aws/record/validator.rb +246 -0
  407. data/lib/aws/record/validators/acceptance.rb +49 -0
  408. data/lib/aws/record/validators/block.rb +36 -0
  409. data/lib/aws/record/validators/confirmation.rb +41 -0
  410. data/lib/aws/record/validators/count.rb +106 -0
  411. data/lib/aws/record/validators/exclusion.rb +41 -0
  412. data/lib/aws/record/validators/format.rb +55 -0
  413. data/lib/aws/record/validators/inclusion.rb +54 -0
  414. data/lib/aws/record/validators/length.rb +105 -0
  415. data/lib/aws/record/validators/method.rb +31 -0
  416. data/lib/aws/record/validators/numericality.rb +136 -0
  417. data/lib/aws/record/validators/presence.rb +43 -0
  418. data/lib/aws/redshift.rb +51 -0
  419. data/lib/aws/redshift/client.rb +35 -0
  420. data/lib/aws/redshift/config.rb +18 -0
  421. data/lib/aws/redshift/errors.rb +22 -0
  422. data/lib/aws/route_53.rb +86 -0
  423. data/lib/aws/route_53/change_batch.rb +161 -0
  424. data/lib/aws/route_53/change_info.rb +72 -0
  425. data/lib/aws/route_53/client.rb +38 -0
  426. data/lib/aws/route_53/config.rb +18 -0
  427. data/lib/aws/route_53/errors.rb +22 -0
  428. data/lib/aws/route_53/hosted_zone.rb +134 -0
  429. data/lib/aws/route_53/hosted_zone_collection.rb +101 -0
  430. data/lib/aws/route_53/resource_record_set.rb +251 -0
  431. data/lib/aws/route_53/resource_record_set_collection.rb +110 -0
  432. data/lib/aws/s3.rb +156 -0
  433. data/lib/aws/s3/access_control_list.rb +265 -0
  434. data/lib/aws/s3/acl_object.rb +264 -0
  435. data/lib/aws/s3/acl_options.rb +204 -0
  436. data/lib/aws/s3/bucket.rb +742 -0
  437. data/lib/aws/s3/bucket_collection.rb +162 -0
  438. data/lib/aws/s3/bucket_lifecycle_configuration.rb +473 -0
  439. data/lib/aws/s3/bucket_tag_collection.rb +111 -0
  440. data/lib/aws/s3/bucket_version_collection.rb +79 -0
  441. data/lib/aws/s3/cipher_io.rb +120 -0
  442. data/lib/aws/s3/client.rb +2067 -0
  443. data/lib/aws/s3/client/xml.rb +266 -0
  444. data/lib/aws/s3/config.rb +48 -0
  445. data/lib/aws/s3/cors_rule.rb +108 -0
  446. data/lib/aws/s3/cors_rule_collection.rb +194 -0
  447. data/lib/aws/s3/data_options.rb +191 -0
  448. data/lib/aws/s3/encryption_utils.rb +146 -0
  449. data/lib/aws/s3/errors.rb +94 -0
  450. data/lib/aws/s3/multipart_upload.rb +353 -0
  451. data/lib/aws/s3/multipart_upload_collection.rb +76 -0
  452. data/lib/aws/s3/object_collection.rb +353 -0
  453. data/lib/aws/s3/object_metadata.rb +103 -0
  454. data/lib/aws/s3/object_upload_collection.rb +77 -0
  455. data/lib/aws/s3/object_version.rb +154 -0
  456. data/lib/aws/s3/object_version_collection.rb +89 -0
  457. data/lib/aws/s3/paginated_collection.rb +75 -0
  458. data/lib/aws/s3/policy.rb +74 -0
  459. data/lib/aws/s3/prefix_and_delimiter_collection.rb +47 -0
  460. data/lib/aws/s3/prefixed_collection.rb +85 -0
  461. data/lib/aws/s3/presign_v4.rb +136 -0
  462. data/lib/aws/s3/presigned_post.rb +554 -0
  463. data/lib/aws/s3/request.rb +62 -0
  464. data/lib/aws/s3/s3_object.rb +1784 -0
  465. data/lib/aws/s3/tree.rb +116 -0
  466. data/lib/aws/s3/tree/branch_node.rb +68 -0
  467. data/lib/aws/s3/tree/child_collection.rb +104 -0
  468. data/lib/aws/s3/tree/leaf_node.rb +94 -0
  469. data/lib/aws/s3/tree/node.rb +22 -0
  470. data/lib/aws/s3/tree/parent.rb +87 -0
  471. data/lib/aws/s3/uploaded_part.rb +82 -0
  472. data/lib/aws/s3/uploaded_part_collection.rb +84 -0
  473. data/lib/aws/s3/website_configuration.rb +102 -0
  474. data/lib/aws/simple_db.rb +218 -0
  475. data/lib/aws/simple_db/attribute.rb +156 -0
  476. data/lib/aws/simple_db/attribute_collection.rb +240 -0
  477. data/lib/aws/simple_db/client.rb +67 -0
  478. data/lib/aws/simple_db/config.rb +20 -0
  479. data/lib/aws/simple_db/consistent_read_option.rb +42 -0
  480. data/lib/aws/simple_db/delete_attributes.rb +62 -0
  481. data/lib/aws/simple_db/domain.rb +123 -0
  482. data/lib/aws/simple_db/domain_collection.rb +86 -0
  483. data/lib/aws/simple_db/domain_metadata.rb +110 -0
  484. data/lib/aws/simple_db/errors.rb +55 -0
  485. data/lib/aws/simple_db/expect_condition_option.rb +45 -0
  486. data/lib/aws/simple_db/item.rb +93 -0
  487. data/lib/aws/simple_db/item_collection.rb +654 -0
  488. data/lib/aws/simple_db/item_data.rb +73 -0
  489. data/lib/aws/simple_db/put_attributes.rb +60 -0
  490. data/lib/aws/simple_email_service.rb +443 -0
  491. data/lib/aws/simple_email_service/client.rb +37 -0
  492. data/lib/aws/simple_email_service/config.rb +18 -0
  493. data/lib/aws/simple_email_service/email_address_collection.rb +69 -0
  494. data/lib/aws/simple_email_service/errors.rb +22 -0
  495. data/lib/aws/simple_email_service/identity.rb +230 -0
  496. data/lib/aws/simple_email_service/identity_collection.rb +81 -0
  497. data/lib/aws/simple_email_service/quotas.rb +66 -0
  498. data/lib/aws/simple_workflow.rb +227 -0
  499. data/lib/aws/simple_workflow/activity_task.rb +178 -0
  500. data/lib/aws/simple_workflow/activity_task_collection.rb +123 -0
  501. data/lib/aws/simple_workflow/activity_type.rb +131 -0
  502. data/lib/aws/simple_workflow/activity_type_collection.rb +93 -0
  503. data/lib/aws/simple_workflow/client.rb +69 -0
  504. data/lib/aws/simple_workflow/config.rb +18 -0
  505. data/lib/aws/simple_workflow/count.rb +49 -0
  506. data/lib/aws/simple_workflow/decision_task.rb +603 -0
  507. data/lib/aws/simple_workflow/decision_task_collection.rb +223 -0
  508. data/lib/aws/simple_workflow/domain.rb +122 -0
  509. data/lib/aws/simple_workflow/domain_collection.rb +169 -0
  510. data/lib/aws/simple_workflow/errors.rb +20 -0
  511. data/lib/aws/simple_workflow/history_event.rb +276 -0
  512. data/lib/aws/simple_workflow/history_event_collection.rb +76 -0
  513. data/lib/aws/simple_workflow/option_formatters.rb +82 -0
  514. data/lib/aws/simple_workflow/resource.rb +94 -0
  515. data/lib/aws/simple_workflow/type.rb +89 -0
  516. data/lib/aws/simple_workflow/type_collection.rb +140 -0
  517. data/lib/aws/simple_workflow/workflow_execution.rb +384 -0
  518. data/lib/aws/simple_workflow/workflow_execution_collection.rb +617 -0
  519. data/lib/aws/simple_workflow/workflow_type.rb +177 -0
  520. data/lib/aws/simple_workflow/workflow_type_collection.rb +91 -0
  521. data/lib/aws/sns.rb +76 -0
  522. data/lib/aws/sns/client.rb +35 -0
  523. data/lib/aws/sns/config.rb +18 -0
  524. data/lib/aws/sns/errors.rb +22 -0
  525. data/lib/aws/sns/has_delivery_policy.rb +68 -0
  526. data/lib/aws/sns/message.rb +204 -0
  527. data/lib/aws/sns/originators/from_auto_scaling.rb +68 -0
  528. data/lib/aws/sns/policy.rb +47 -0
  529. data/lib/aws/sns/subscription.rb +165 -0
  530. data/lib/aws/sns/subscription_collection.rb +78 -0
  531. data/lib/aws/sns/topic.rb +403 -0
  532. data/lib/aws/sns/topic_collection.rb +62 -0
  533. data/lib/aws/sns/topic_subscription_collection.rb +54 -0
  534. data/lib/aws/sqs.rb +80 -0
  535. data/lib/aws/sqs/client.rb +53 -0
  536. data/lib/aws/sqs/config.rb +20 -0
  537. data/lib/aws/sqs/errors.rb +125 -0
  538. data/lib/aws/sqs/policy.rb +48 -0
  539. data/lib/aws/sqs/queue.rb +856 -0
  540. data/lib/aws/sqs/queue_collection.rb +186 -0
  541. data/lib/aws/sqs/received_message.rb +190 -0
  542. data/lib/aws/sqs/received_sns_message.rb +116 -0
  543. data/lib/aws/storage_gateway.rb +72 -0
  544. data/lib/aws/storage_gateway/client.rb +42 -0
  545. data/lib/aws/storage_gateway/config.rb +18 -0
  546. data/lib/aws/storage_gateway/errors.rb +22 -0
  547. data/lib/aws/sts.rb +164 -0
  548. data/lib/aws/sts/client.rb +55 -0
  549. data/lib/aws/sts/config.rb +18 -0
  550. data/lib/aws/sts/errors.rb +22 -0
  551. data/lib/aws/sts/federated_session.rb +56 -0
  552. data/lib/aws/sts/policy.rb +30 -0
  553. data/lib/aws/sts/session.rb +48 -0
  554. data/lib/aws/support.rb +29 -0
  555. data/lib/aws/support/client.rb +35 -0
  556. data/lib/aws/support/config.rb +18 -0
  557. data/lib/aws/support/errors.rb +20 -0
  558. data/lib/aws/version.rb +17 -0
  559. data/rails/init.rb +15 -0
  560. metadata +634 -0
@@ -0,0 +1,191 @@
1
+ # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ require 'pathname'
15
+
16
+ module AWS
17
+ class S3
18
+
19
+ # Used by S3#S3Object and S3::Client to accept options with
20
+ # data that should be uploaded (streamed).
21
+ # @api private
22
+ module DataOptions
23
+
24
+ protected
25
+
26
+ # @return [Hash] Returns a hash of options with a :data option that
27
+ # responds to #read and #eof?.
28
+ def compute_write_options *args, &block
29
+
30
+ options = convert_args_to_options_hash(*args)
31
+
32
+ validate_data!(options, &block)
33
+
34
+ rename_file_to_data(options)
35
+
36
+ convert_data_to_io_obj(options, &block)
37
+
38
+ try_to_determine_content_length(options)
39
+
40
+ options
41
+
42
+ end
43
+
44
+ # Converts an argument list into a single hash of options. Treats
45
+ # non-hash arguments in the first position as a data option.
46
+ def convert_args_to_options_hash *args
47
+ case args.count
48
+ when 0 then {}
49
+ when 1 then args[0].is_a?(Hash) ? args[0] : { :data => args[0] }
50
+ when 2 then args[1].merge(:data => args[0])
51
+ else
52
+ msg = "expected 0, 1 or 2 arguments, got #{args.count}"
53
+ raise ArgumentError, msg
54
+ end
55
+ end
56
+
57
+ # Moves options[:file] to options[:data]. If this option is a string
58
+ # then it is treated as a file path and is converted to an open file.
59
+ def rename_file_to_data options
60
+ if file = options.delete(:file)
61
+ options[:data] = file.is_a?(String) ? open_file(file) : file
62
+ end
63
+ end
64
+
65
+ # Converts the :data option to an IO-like object. This allows us
66
+ # to always perform streaming uploads.
67
+ def convert_data_to_io_obj options, &block
68
+
69
+ data = options.delete(:data)
70
+
71
+ if block_given?
72
+ options[:data] = IOProxy.new(block)
73
+ elsif data.is_a?(String)
74
+ data = data.dup if data.frozen?
75
+ data.force_encoding("BINARY") if data.respond_to?(:force_encoding)
76
+ options[:data] = StringIO.new(data)
77
+ elsif data.is_a?(Pathname)
78
+ options[:data] = open_file(data.to_s)
79
+ elsif io_like?(data)
80
+ options[:data] = data
81
+ else
82
+ msg = "invalid :data option, expected a String, Pathname or "
83
+ msg << "an object that responds to #read and #eof?"
84
+ raise ArgumentError, msg
85
+ end
86
+
87
+ end
88
+
89
+ # Attempts to determine the content length of the :data option.
90
+ # This is only done when a content length is not already provided.
91
+ def try_to_determine_content_length options
92
+ unless options[:content_length]
93
+
94
+ data = options[:data]
95
+
96
+ length = case
97
+ when data.respond_to?(:path) && data.path then File.size(data.path)
98
+ when data.respond_to?(:bytesize) then data.bytesize
99
+ when data.respond_to?(:size) then data.size
100
+ when data.respond_to?(:length) then data.length
101
+ else nil
102
+ end
103
+
104
+ options[:content_length] = length if length
105
+
106
+ end
107
+ end
108
+
109
+ def validate_data! options, &block
110
+
111
+ data = options[:data]
112
+ file = options[:file]
113
+
114
+ raise ArgumentError, 'Object data passed multiple ways.' if
115
+ [data, file, block].compact.count > 1
116
+
117
+ data = file if file
118
+
119
+ return if block_given?
120
+ return if data.kind_of?(String)
121
+ return if data.kind_of?(Pathname)
122
+ return if io_like?(data)
123
+
124
+ msg = ":data must be provided as a String, Pathname, File, or "
125
+ msg << "an object that responds to #read and #eof?"
126
+ raise ArgumentError, msg
127
+
128
+ end
129
+
130
+ # @return [Boolean] Returns `true` if the object responds to
131
+ # `#read` and `#eof?`.
132
+ def io_like? io
133
+ io.respond_to?(:read) and io.respond_to?(:eof?)
134
+ end
135
+
136
+ # @param [String] path Path to a file on disk.
137
+ # @return [File] Given a path string, returns an open File.
138
+ def open_file path
139
+ Core::ManagedFile.open(path)
140
+ end
141
+
142
+ # A utility class that turns a block (with 2 args) into an
143
+ # IO object that responds to #read and #eof.
144
+ # @api private
145
+ class IOProxy
146
+
147
+ def initialize write_block
148
+ unless write_block.arity == 2
149
+ msg = "a write block must accept 2 yield params: a buffer and "
150
+ msg << "a number of bytes to write"
151
+ raise ArgumentError, msg
152
+ end
153
+ @write_block = write_block
154
+ @eof = false
155
+ end
156
+
157
+ def read bytes = nil, output_buffer = nil
158
+ data = if bytes
159
+ (@eof) ? nil : read_chunk(bytes)
160
+ else
161
+ (@eof) ? "" : read_all
162
+ end
163
+ output_buffer ? output_buffer.replace(data || '') : data
164
+ end
165
+
166
+ def eof?
167
+ @eof
168
+ end
169
+
170
+ protected
171
+
172
+ def read_chunk bytes
173
+ buffer = StringIO.new
174
+ @write_block.call(buffer, bytes)
175
+ buffer.rewind
176
+ @eof = true if buffer.size < bytes
177
+ buffer.read
178
+ end
179
+
180
+ def read_all
181
+ buffer = StringIO.new
182
+ buffer << read_chunk(1024 * 1024 * 5) until @eof
183
+ buffer.rewind
184
+ buffer.read
185
+ end
186
+
187
+ end
188
+
189
+ end
190
+ end
191
+ end
@@ -0,0 +1,146 @@
1
+ # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ require 'openssl'
15
+
16
+ module AWS
17
+ class S3
18
+ # @api private
19
+ module EncryptionUtils
20
+
21
+ protected
22
+
23
+ UNSAFE_MSG = "Unsafe encryption, data is longer than key length"
24
+
25
+ # @param [OpenSSL::PKey::RSA, String] key Key used to encrypt.
26
+ #
27
+ # @param [String] data Data to be encrypted.
28
+ #
29
+ # @note Use check_encryption_materials before this method to check
30
+ # formatting of keys.
31
+ # @note This should not be used for data longer than the key length as
32
+ # it will not be cryptographically safe.
33
+ #
34
+ # @return [String] Returns the data encrypted with the key given.
35
+ def encrypt data, key
36
+ rsa = OpenSSL::PKey::RSA
37
+ data_cipher_size = get_cipher_size(data.length)
38
+
39
+ # Encrypting data key
40
+ case key
41
+ when rsa # Asymmetric encryption
42
+ warn UNSAFE_MSG if key.public_key.n.num_bits < data_cipher_size
43
+ key.public_encrypt(data)
44
+ when String # Symmetric encryption
45
+ warn UNSAFE_MSG if get_cipher_size(key.length) < data_cipher_size
46
+ cipher = get_aes_cipher(:encrypt, :ECB, key)
47
+ cipher.update(data) + cipher.final
48
+ end
49
+ end
50
+
51
+ # @param [OpenSSL::PKey::RSA, String] key Key used to encrypt.
52
+ #
53
+ # @param [String] data Data to be encrypted.
54
+ #
55
+ # @note Use check_encryption_materials before this method to check
56
+ # formatting of keys
57
+ #
58
+ # @return [String] Returns the data decrypted with the key given.
59
+ def decrypt data, key
60
+ rsa = OpenSSL::PKey::RSA
61
+ begin
62
+ case key
63
+ when rsa # Asymmetric Decryption
64
+ key.private_decrypt(data)
65
+ when String # Symmetric Decryption
66
+ cipher = get_aes_cipher(:decrypt, :ECB, key)
67
+ cipher.update(data) + cipher.final
68
+ end
69
+ rescue OpenSSL::Cipher::CipherError
70
+ raise RuntimeError, "decryption failed, incorrect key?"
71
+ end
72
+ end
73
+
74
+ # Checks for any formatting problems for keys and initialization vectors
75
+ # supported with EncryptionUtils.
76
+ def check_encryption_materials mode, key
77
+ rsa = OpenSSL::PKey::RSA
78
+ case key
79
+ when rsa
80
+ unless key.private? or mode == :encrypt
81
+ msg = "invalid key, #{rsa} requires a private key"
82
+ raise ArgumentError, msg
83
+ end
84
+ when String # no problem
85
+ else
86
+ msg = "invalid key, must be an #{rsa} or a cipher key string"
87
+ raise ArgumentError, msg
88
+ end
89
+ end
90
+
91
+ # @param [OpenSSL::Cipher] cipher The cipher with configured key and iv.
92
+ #
93
+ # @yield [String, String] key_iv_pair A randomly generated key, iv pair
94
+ # for use with the given cipher. Sets the key and iv on the cipher.
95
+ def generate_aes_key cipher, &block
96
+ key_iv_pair = [cipher.random_key, cipher.random_iv]
97
+ yield(key_iv_pair) if block_given?
98
+ end
99
+
100
+ # @param [Symbol] mode The encryption/decryption mode. Valid inputs are
101
+ # :encrypt or :decrypt
102
+ #
103
+ # @param [String] key Key for the cipher.
104
+ #
105
+ # @param [String] iv IV for the cipher.
106
+ #
107
+ # @return [OpenSSL::Cipher] Will return a configured `OpenSSL::Cipher`.
108
+ def get_aes_cipher mode, block_mode, key = nil, iv = nil
109
+
110
+ # If no key given, default to 256 bit
111
+ cipher_size = (key) ? get_cipher_size(key.length) : 256
112
+
113
+ cipher = OpenSSL::Cipher.new("AES-#{cipher_size}-#{block_mode}")
114
+
115
+ (mode == :encrypt) ? cipher.encrypt : cipher.decrypt
116
+ cipher.key = key if key
117
+ cipher.iv = iv if iv
118
+ cipher
119
+ end
120
+
121
+ # @param [Integer] size Size of data given.
122
+ # @return [Integer] Returns the AES encrypted size based on a given size.
123
+ def get_encrypted_size size
124
+ # The next multiple of 16
125
+ ((size / 16) + 1) * 16
126
+ end
127
+ module_function :get_encrypted_size
128
+
129
+ private
130
+
131
+ # @param [Fixnum] key_length Length of the key given.
132
+ # @return [Fixnum] Returns the cipher size based on the key length.
133
+ def get_cipher_size(key_length)
134
+ case key_length
135
+ when 32 then 256
136
+ when 24 then 192
137
+ when 16 then 128
138
+ else
139
+ msg = "invalid key, symmetric key required to be 16, 24, or 32 bytes "
140
+ msg << "in length, saw length #{key_length}"
141
+ raise ArgumentError, msg
142
+ end
143
+ end
144
+ end
145
+ end
146
+ end
@@ -0,0 +1,94 @@
1
+ # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ module AWS
15
+ class S3
16
+
17
+ # This module contains exception classes for each of the error
18
+ # types that S3 can return. You can use these classes to rescue
19
+ # specific errors, for example:
20
+ #
21
+ # begin
22
+ # S3.new.buckets.mybucket.
23
+ # objects.myobj.write("HELLO")
24
+ # rescue S3::Errors::NoSuchBucket => e
25
+ # S3.new.buckets.create("mybucket")
26
+ # retry
27
+ # end
28
+ #
29
+ # All errors raised as a result of error responses from the
30
+ # service are instances of either {ClientError} or {ServerError}.
31
+ module Errors
32
+
33
+ # @api private
34
+ GRAMMAR = Core::XML::Grammar.customize
35
+
36
+ extend Core::LazyErrorClasses
37
+
38
+ class BatchDeleteError < StandardError
39
+
40
+ def initialize error_counts
41
+ @error_counts = error_counts
42
+ total = error_counts.values.inject(0) {|sum,count| sum + count }
43
+ super("Failed to delete #{total} objects")
44
+ end
45
+
46
+ # @return [Hash] Returns a hash of error codes and how many
47
+ # objects failed with that code.
48
+ attr_reader :error_counts
49
+
50
+ end
51
+
52
+ # This error is special, because S3 does not (and must not
53
+ # according to RFC 2616) return a body with the HTTP response.
54
+ # The interface is the same as for any other client error.
55
+ class NotModified < AWS::Errors::Base
56
+
57
+ include AWS::Errors::ClientError
58
+
59
+ def initialize(req, resp)
60
+ super(req, resp, "NotModified", "Not Modified")
61
+ end
62
+
63
+ end
64
+
65
+ # This error is special, because S3 does not return a body with
66
+ # the HTTP response. The interface is the same as for any other
67
+ # client error.
68
+ class NoSuchKey < AWS::Errors::Base
69
+
70
+ include AWS::Errors::ClientError
71
+
72
+ def initialize(req, resp, code = nil, message = nil)
73
+ super(req, resp, "NoSuchKey", "No Such Key")
74
+ end
75
+
76
+ end
77
+
78
+ # This error is special, because S3 must first retrieve the client
79
+ # side encryption key in it's encrypted form before finding if the
80
+ # key is incorrect.
81
+ class IncorrectClientSideEncryptionKey < AWS::Errors::Base
82
+
83
+ include AWS::Errors::ClientError
84
+
85
+ def initialize(msg)
86
+ super("",
87
+ "",
88
+ "IncorrectClientSideEncryptionKey",
89
+ msg)
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,353 @@
1
+ # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ require 'thread'
15
+
16
+ module AWS
17
+ class S3
18
+
19
+ # Represents a multipart upload to an S3 object. See
20
+ # {S3Object#multipart_upload} for a convenient way to initiate a
21
+ # multipart upload.
22
+ #
23
+ # Note: After you initiate multipart upload and upload one or more
24
+ # parts, you must either complete or abort multipart upload in order
25
+ # to stop getting charged for storage of the uploaded parts. Only
26
+ # after you either complete or abort multipart upload, Amazon S3
27
+ # frees up the parts storage and stops charging you for the parts
28
+ # storage.
29
+ class MultipartUpload
30
+
31
+ include Core::Model
32
+
33
+ class EmptyUploadError < StandardError; end
34
+
35
+ # @api private
36
+ def initialize(object, id, options = {})
37
+ @id = id
38
+ @object = object
39
+
40
+ super
41
+
42
+ @completed_parts = {}
43
+ @increment_mutex = Mutex.new
44
+ @completed_mutex = Mutex.new
45
+ @last_part = 0
46
+ end
47
+
48
+ def bucket
49
+ object.bucket
50
+ end
51
+
52
+ def inspect
53
+ "<#{self.class}:#{object.bucket.name}/#{object.key}:#{id}>"
54
+ end
55
+ # @return [String] Returns the upload id.
56
+ attr_reader :id
57
+
58
+ alias_method :upload_id, :id
59
+
60
+ # @return [S3Object] Returns the object this upload is intended for.
61
+ attr_reader :object
62
+
63
+ # @return [Boolean] Returns true if both multipart uploads
64
+ # represent the same object and upload.
65
+ def ==(other)
66
+ other.kind_of?(MultipartUpload) and
67
+ other.object == object and
68
+ other.id == id
69
+ end
70
+
71
+ alias_method :eql?, :==
72
+
73
+ # @return [Boolean] True if the upload exists.
74
+ def exists?
75
+ client.list_parts(base_opts)
76
+ rescue Errors::NoSuchUpload => e
77
+ false
78
+ else
79
+ true
80
+ end
81
+
82
+ # @return The upload initiator. This object will have `:id`
83
+ # and `:display_name` methods; if the initiator is an IAM
84
+ # user, the `:id` method will return the ARN of the user, and
85
+ # if the initiator is an AWS account, this method will return
86
+ # the same data as {#owner}.
87
+ def initiator
88
+ client.list_parts(base_opts).initiator
89
+ end
90
+
91
+ # @return The upload owner. This object will have `:id`
92
+ # and `:display_name` methods.
93
+ def owner
94
+ client.list_parts(base_opts).owner
95
+ end
96
+
97
+ # @return [Symbol] The class of storage used to store the
98
+ # uploaded object. Possible values:
99
+ #
100
+ # * `:standard`
101
+ # * `:reduced_redundancy?`
102
+ def storage_class
103
+ client.list_parts(base_opts).storage_class.downcase.to_sym
104
+ end
105
+
106
+ # @return [Boolean] True if the uploaded object will be stored
107
+ # with reduced redundancy.
108
+ def reduced_redundancy?
109
+ storage_class == :reduced_redundancy
110
+ end
111
+
112
+ # Aborts the upload. After a multipart upload is aborted, no
113
+ # additional parts can be uploaded using that upload ID. The
114
+ # storage consumed by any previously uploaded parts will be
115
+ # freed. However, if any part uploads are currently in
116
+ # progress, those part uploads might or might not succeed. As
117
+ # a result, it might be necessary to abort a given multipart
118
+ # upload multiple times in order to completely free all
119
+ # storage consumed by all parts.
120
+ # @return [nil]
121
+ def abort
122
+ unless aborted?
123
+ client.abort_multipart_upload(base_opts)
124
+ @aborted = true
125
+ end
126
+ nil
127
+ end
128
+ alias_method :delete, :abort
129
+ alias_method :cancel, :abort
130
+
131
+ # @return [Boolean] True if the upload has been aborted.
132
+ # @see #abort
133
+ def aborted?
134
+ @aborted
135
+ end
136
+
137
+ # Uploads a part.
138
+ #
139
+ # @overload add_part(data, options = {})
140
+ #
141
+ # @param data The data to upload.
142
+ # Valid values include:
143
+ #
144
+ # * A string
145
+ # * A Pathname object
146
+ # * Any object responding to `read` and `eof?`; the object
147
+ # must support the following access methods:
148
+ #
149
+ # read # all at once
150
+ # read(length) until eof? # in chunks
151
+ #
152
+ # If you specify data this way, you must also include
153
+ # the `:content_length` option.
154
+ #
155
+ # @param [Hash] options Additional options for the upload.
156
+ #
157
+ # @option options [Integer] :content_length If provided,
158
+ # this option must match the total number of bytes written
159
+ # to S3 during the operation. This option is required if
160
+ # `:data` is an IO-like object without a `size` method.
161
+ #
162
+ # @overload add_part(options)
163
+ #
164
+ # @param [Hash] options Options for the upload. Either
165
+ # `:data` or `:file` is required.
166
+ #
167
+ # @option options :data The data to upload. Valid values
168
+ # include:
169
+ #
170
+ # * A string
171
+ # * A Pathname object
172
+ # * Any object responding to `read` and `eof?`; the object
173
+ # must support the following access methods:
174
+ #
175
+ # read # all at once
176
+ # read(length) until eof? # in chunks
177
+ #
178
+ # If you specify data this way, you must also include
179
+ # the `:content_length` option.
180
+ #
181
+ # @option options [String] :file Can be specified instead of
182
+ # `:data`; its value specifies the path of a file to
183
+ # upload.
184
+ #
185
+ # @option options [Integer] :content_length If provided,
186
+ # this option must match the total number of bytes written
187
+ # to S3 during the operation. This option is required if
188
+ # `:data` is an IO-like object without a `size` method.
189
+ #
190
+ # @option options [Integer] :part_number The part number.
191
+ def add_part(data_or_options, options = {})
192
+ if data_or_options.kind_of?(Hash)
193
+ part_options = base_opts.merge(data_or_options)
194
+ else
195
+ part_options = base_opts.merge(:data => data_or_options)
196
+ end
197
+ part_options.merge!(options)
198
+
199
+ unless part_options[:part_number]
200
+ @increment_mutex.synchronize do
201
+ part_options[:part_number] = (@last_part += 1)
202
+ end
203
+ end
204
+ part_number = part_options[:part_number]
205
+
206
+ resp = client.upload_part(part_options)
207
+ @completed_mutex.synchronize do
208
+ @completed_parts[part_number] = {
209
+ :part_number => part_number,
210
+ :etag => resp.etag
211
+ }
212
+ end
213
+ UploadedPart.new(self, part_number)
214
+ end
215
+
216
+ # Copies a part.
217
+ #
218
+ # @param [string] copy_source Full S3 name of source, ie bucket/key
219
+ #
220
+ # @param [Hash] options Additional options for the copy.
221
+ #
222
+ # @option options [Integer] :part_number The part number.
223
+ #
224
+ # @option options [Integer] :copy_source_range Range of bytes to copy, ie bytes=0-45687
225
+ def copy_part(copy_source, options = {})
226
+ part_options = base_opts.merge(options)
227
+ part_options.merge!(:copy_source => copy_source)
228
+
229
+ unless part_options[:part_number]
230
+ @increment_mutex.synchronize do
231
+ part_options[:part_number] = (@last_part += 1)
232
+ end
233
+ end
234
+ part_number = part_options[:part_number]
235
+
236
+ resp = client.copy_part(part_options)
237
+ @completed_mutex.synchronize do
238
+ @completed_parts[part_number] = {
239
+ :part_number => part_number,
240
+ :etag => resp[:etag]
241
+ }
242
+ end
243
+ UploadedPart.new(self, part_number)
244
+ end
245
+
246
+ # Completes the upload by assembling previously uploaded
247
+ # parts.
248
+ #
249
+ # @return [S3Object, ObjectVersion] If the bucket has versioning
250
+ # enabled, returns the {ObjectVersion} representing the
251
+ # version that was uploaded. If versioning is disabled,
252
+ # returns the object.
253
+ def complete(*parts)
254
+ parts = parts.flatten
255
+ case parts.first
256
+ when :remote_parts
257
+ complete_opts = get_complete_opts
258
+ when :local_parts, nil
259
+ complete_opts = base_opts.merge(:parts => completed_parts)
260
+ else
261
+ part_numbers = parts.map do |part|
262
+ case part
263
+ when Integer
264
+ part
265
+ when UploadedPart
266
+ raise ArgumentError.new("cannot complete an upload with parts "+
267
+ "from a different upload") unless
268
+ part.upload == self
269
+
270
+ part.part_number
271
+ else
272
+ raise ArgumentError.new("expected number or UploadedPart")
273
+ end
274
+ end
275
+ complete_opts = get_complete_opts(part_numbers)
276
+ end
277
+
278
+ raise EmptyUploadError.new("Unable to complete an empty upload.") if complete_opts[:parts].empty?
279
+
280
+ resp = client.complete_multipart_upload(complete_opts)
281
+ if resp.data[:version_id]
282
+ ObjectVersion.new(object, resp.data[:version_id])
283
+ else
284
+ object
285
+ end
286
+ end
287
+
288
+ # Completes the upload or aborts it if no parts have been
289
+ # uploaded yet. Does nothing if the upload has already been
290
+ # aborted.
291
+ #
292
+ # @return [S3Object, ObjectVersion] If the bucket has versioning
293
+ # enabled, returns the {ObjectVersion} representing the
294
+ # version that was uploaded. If versioning is disabled,
295
+ # returns the object. If no upload was attempted (e.g. if it
296
+ # was aborted or if no parts were uploaded), returns `nil`.
297
+ def close
298
+ if aborted?
299
+ nil
300
+ elsif completed_parts.empty?
301
+ abort
302
+ else
303
+ complete
304
+ end
305
+ end
306
+
307
+ # @return [UploadedPartCollection] A collection representing
308
+ # the parts that have been uploaded to S3 for this upload.
309
+ def parts
310
+ UploadedPartCollection.new(self)
311
+ end
312
+
313
+ # @api private
314
+ def completed_parts
315
+ @completed_parts.values.
316
+ sort { |a, b| a[:part_number] <=> b[:part_number] }
317
+ end
318
+
319
+ # @api private
320
+ def inspect
321
+ "<#{self.class}:#{object.bucket.name}/#{object.key}:#{id}>"
322
+ end
323
+
324
+ private
325
+
326
+ def get_complete_opts(part_numbers = nil)
327
+ parts = []
328
+ self.parts.each do |part|
329
+ parts << { :part_number => part.part_number, :etag => part.etag }
330
+ end
331
+
332
+ if part_numbers
333
+ parts.reject! do |part|
334
+ !part_numbers.include?(part[:part_number])
335
+ end
336
+ end
337
+
338
+ base_opts.merge(:parts => parts)
339
+ end
340
+
341
+ def base_opts
342
+ opts = {
343
+ :bucket_name => object.bucket.name,
344
+ :key => object.key
345
+ }
346
+ opts[:upload_id] = upload_id if upload_id
347
+ opts
348
+ end
349
+
350
+ end
351
+
352
+ end
353
+ end