aws-sdk 1.1.3 → 1.1.4

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 (233) hide show
  1. data/ca-bundle.crt +2 -348
  2. data/lib/aws.rb +24 -49
  3. data/lib/aws/{common.rb → core.rb} +120 -9
  4. data/lib/aws/{api_config.rb → core/api_config.rb} +19 -20
  5. data/lib/aws/core/api_config_transform.rb +36 -0
  6. data/lib/aws/core/async_handle.rb +91 -0
  7. data/lib/aws/core/authorize_v2.rb +39 -0
  8. data/lib/aws/{authorize_v3.rb → core/authorize_v3.rb} +16 -15
  9. data/lib/aws/{api_config_transform.rb → core/authorize_with_session_token.rb} +9 -12
  10. data/lib/aws/core/autoloader.rb +64 -0
  11. data/lib/aws/core/cacheable.rb +78 -0
  12. data/lib/aws/core/client.rb +471 -0
  13. data/lib/aws/core/client_logging.rb +125 -0
  14. data/lib/aws/core/collections.rb +229 -0
  15. data/lib/aws/core/configuration.rb +358 -0
  16. data/lib/aws/core/configured_client_methods.rb +76 -0
  17. data/lib/aws/core/configured_grammars.rb +63 -0
  18. data/lib/aws/{configured_option_grammars.rb → core/configured_option_grammars.rb} +18 -20
  19. data/lib/aws/{configured_xml_grammars.rb → core/configured_xml_grammars.rb} +19 -21
  20. data/lib/aws/core/default_signer.rb +67 -0
  21. data/lib/aws/core/http/curb_handler.rb +129 -0
  22. data/lib/aws/core/http/handler.rb +77 -0
  23. data/lib/aws/core/http/httparty_handler.rb +113 -0
  24. data/lib/aws/core/http/net_http_handler.rb +124 -0
  25. data/lib/aws/core/http/request.rb +207 -0
  26. data/lib/aws/core/http/response.rb +73 -0
  27. data/lib/aws/{ignore_result_element.rb → core/ignore_result_element.rb} +14 -18
  28. data/lib/aws/core/indifferent_hash.rb +88 -0
  29. data/lib/aws/core/inflection.rb +47 -0
  30. data/lib/aws/core/lazy_error_classes.rb +62 -0
  31. data/lib/aws/{uri_escape.rb → core/meta_utils.rb} +24 -23
  32. data/lib/aws/core/model.rb +57 -0
  33. data/lib/aws/{authorize_with_session_token.rb → core/naming.rb} +9 -8
  34. data/lib/aws/core/option_grammar.rb +562 -0
  35. data/lib/aws/core/policy.rb +914 -0
  36. data/lib/aws/core/resource.rb +380 -0
  37. data/lib/aws/core/resource_cache.rb +40 -0
  38. data/lib/aws/core/response.rb +125 -0
  39. data/lib/aws/core/response_cache.rb +50 -0
  40. data/lib/aws/core/service_interface.rb +60 -0
  41. data/lib/aws/core/uri_escape.rb +46 -0
  42. data/lib/aws/core/xml_grammar.rb +926 -0
  43. data/lib/aws/ec2.rb +47 -16
  44. data/lib/aws/ec2/attachment.rb +0 -2
  45. data/lib/aws/ec2/attachment_collection.rb +1 -6
  46. data/lib/aws/ec2/availability_zone.rb +0 -2
  47. data/lib/aws/ec2/availability_zone_collection.rb +0 -3
  48. data/lib/aws/ec2/client.rb +6 -9
  49. data/lib/aws/ec2/client/xml.rb +3 -6
  50. data/lib/aws/ec2/collection.rb +1 -4
  51. data/lib/aws/ec2/config.rb +18 -0
  52. data/lib/aws/ec2/elastic_ip.rb +0 -2
  53. data/lib/aws/ec2/elastic_ip_collection.rb +0 -4
  54. data/lib/aws/ec2/errors.rb +1 -4
  55. data/lib/aws/ec2/has_permissions.rb +0 -2
  56. data/lib/aws/ec2/image.rb +0 -5
  57. data/lib/aws/ec2/image_collection.rb +0 -6
  58. data/lib/aws/ec2/instance.rb +23 -9
  59. data/lib/aws/ec2/instance_collection.rb +85 -22
  60. data/lib/aws/ec2/key_pair.rb +0 -2
  61. data/lib/aws/ec2/key_pair_collection.rb +1 -4
  62. data/lib/aws/ec2/permission_collection.rb +2 -5
  63. data/lib/aws/ec2/region.rb +0 -2
  64. data/lib/aws/ec2/region_collection.rb +0 -4
  65. data/lib/aws/ec2/request.rb +4 -9
  66. data/lib/aws/ec2/reserved_instances.rb +0 -3
  67. data/lib/aws/ec2/reserved_instances_collection.rb +0 -4
  68. data/lib/aws/ec2/reserved_instances_offering.rb +0 -3
  69. data/lib/aws/ec2/reserved_instances_offering_collection.rb +0 -4
  70. data/lib/aws/ec2/resource.rb +3 -5
  71. data/lib/aws/ec2/resource_tag_collection.rb +1 -6
  72. data/lib/aws/ec2/security_group.rb +204 -72
  73. data/lib/aws/ec2/security_group/egress_ip_permission_collection.rb +53 -0
  74. data/lib/aws/ec2/security_group/ip_permission.rb +92 -10
  75. data/lib/aws/ec2/security_group/ip_permission_collection.rb +14 -15
  76. data/lib/aws/ec2/security_group_collection.rb +11 -8
  77. data/lib/aws/ec2/snapshot.rb +0 -4
  78. data/lib/aws/ec2/snapshot_collection.rb +0 -4
  79. data/lib/aws/ec2/tag.rb +0 -3
  80. data/lib/aws/ec2/tag_collection.rb +1 -8
  81. data/lib/aws/ec2/tagged_item.rb +1 -3
  82. data/lib/aws/ec2/volume.rb +0 -6
  83. data/lib/aws/ec2/volume_collection.rb +0 -4
  84. data/lib/aws/errors.rb +0 -3
  85. data/lib/aws/iam.rb +33 -12
  86. data/lib/aws/iam/access_key.rb +0 -3
  87. data/lib/aws/iam/access_key_collection.rb +0 -3
  88. data/lib/aws/iam/account_alias_collection.rb +0 -2
  89. data/lib/aws/iam/client.rb +6 -8
  90. data/lib/aws/iam/client/xml.rb +4 -8
  91. data/lib/aws/iam/collection.rb +2 -5
  92. data/lib/aws/iam/config.rb +18 -0
  93. data/lib/aws/iam/errors.rb +2 -4
  94. data/lib/aws/iam/group.rb +0 -5
  95. data/lib/aws/iam/group_collection.rb +0 -3
  96. data/lib/aws/iam/group_policy_collection.rb +0 -2
  97. data/lib/aws/iam/group_user_collection.rb +1 -4
  98. data/lib/aws/iam/login_profile.rb +0 -2
  99. data/lib/aws/iam/mfa_device.rb +1 -3
  100. data/lib/aws/iam/mfa_device_collection.rb +0 -3
  101. data/lib/aws/iam/policy.rb +2 -4
  102. data/lib/aws/iam/policy_collection.rb +0 -3
  103. data/lib/aws/iam/request.rb +3 -7
  104. data/lib/aws/iam/resource.rb +1 -4
  105. data/lib/aws/iam/server_certificate.rb +0 -2
  106. data/lib/aws/iam/server_certificate_collection.rb +0 -3
  107. data/lib/aws/iam/signing_certificate.rb +0 -2
  108. data/lib/aws/iam/signing_certificate_collection.rb +0 -3
  109. data/lib/aws/iam/user.rb +0 -7
  110. data/lib/aws/iam/user_collection.rb +0 -3
  111. data/lib/aws/iam/user_group_collection.rb +0 -3
  112. data/lib/aws/iam/user_policy.rb +0 -2
  113. data/lib/aws/iam/user_policy_collection.rb +0 -3
  114. data/lib/aws/rails.rb +5 -4
  115. data/lib/aws/record.rb +4 -1
  116. data/lib/aws/record/base.rb +3 -2
  117. data/lib/aws/record/errors.rb +1 -3
  118. data/lib/aws/s3.rb +31 -6
  119. data/lib/aws/s3/access_control_list.rb +0 -2
  120. data/lib/aws/s3/acl_object.rb +10 -12
  121. data/lib/aws/s3/bucket.rb +1 -9
  122. data/lib/aws/s3/bucket_collection.rb +2 -5
  123. data/lib/aws/s3/bucket_version_collection.rb +1 -5
  124. data/lib/aws/s3/client.rb +34 -37
  125. data/lib/aws/s3/client/xml.rb +11 -14
  126. data/lib/aws/{resource_cache.rb → s3/config.rb} +6 -20
  127. data/lib/aws/s3/errors.rb +6 -7
  128. data/lib/aws/s3/multipart_upload.rb +1 -4
  129. data/lib/aws/s3/multipart_upload_collection.rb +1 -6
  130. data/lib/aws/s3/object_collection.rb +1 -5
  131. data/lib/aws/s3/object_metadata.rb +1 -3
  132. data/lib/aws/s3/object_upload_collection.rb +1 -7
  133. data/lib/aws/s3/object_version.rb +1 -4
  134. data/lib/aws/s3/object_version_collection.rb +1 -4
  135. data/lib/aws/s3/policy.rb +3 -5
  136. data/lib/aws/s3/prefix_and_delimiter_collection.rb +0 -2
  137. data/lib/aws/s3/prefixed_collection.rb +0 -2
  138. data/lib/aws/s3/presigned_post.rb +1 -3
  139. data/lib/aws/s3/request.rb +2 -5
  140. data/lib/aws/s3/s3_object.rb +1 -8
  141. data/lib/aws/s3/tree.rb +8 -6
  142. data/lib/aws/s3/tree/branch_node.rb +0 -3
  143. data/lib/aws/s3/tree/child_collection.rb +1 -5
  144. data/lib/aws/s3/tree/leaf_node.rb +0 -5
  145. data/lib/aws/s3/tree/parent.rb +1 -4
  146. data/lib/aws/s3/uploaded_part.rb +1 -3
  147. data/lib/aws/s3/uploaded_part_collection.rb +1 -5
  148. data/lib/aws/simple_db.rb +21 -6
  149. data/lib/aws/simple_db/attribute.rb +1 -6
  150. data/lib/aws/simple_db/attribute_collection.rb +1 -7
  151. data/lib/aws/simple_db/client.rb +7 -9
  152. data/lib/aws/simple_db/client/options.rb +2 -4
  153. data/lib/aws/simple_db/client/xml.rb +5 -10
  154. data/lib/aws/{naming.rb → simple_db/config.rb} +3 -14
  155. data/lib/aws/simple_db/delete_attributes.rb +0 -2
  156. data/lib/aws/simple_db/domain.rb +1 -6
  157. data/lib/aws/simple_db/domain_collection.rb +1 -4
  158. data/lib/aws/simple_db/domain_metadata.rb +1 -3
  159. data/lib/aws/simple_db/errors.rb +1 -4
  160. data/lib/aws/simple_db/item.rb +1 -7
  161. data/lib/aws/simple_db/item_collection.rb +22 -23
  162. data/lib/aws/simple_db/put_attributes.rb +0 -2
  163. data/lib/aws/simple_db/request.rb +3 -7
  164. data/lib/aws/simple_email_service.rb +11 -6
  165. data/lib/aws/simple_email_service/client.rb +7 -9
  166. data/lib/aws/simple_email_service/client/options.rb +3 -6
  167. data/lib/aws/simple_email_service/client/xml.rb +4 -8
  168. data/lib/aws/simple_email_service/config.rb +19 -0
  169. data/lib/aws/simple_email_service/email_address_collection.rb +1 -3
  170. data/lib/aws/simple_email_service/errors.rb +1 -4
  171. data/lib/aws/simple_email_service/quotas.rb +1 -3
  172. data/lib/aws/simple_email_service/request.rb +3 -7
  173. data/lib/aws/sns.rb +15 -8
  174. data/lib/aws/sns/client.rb +7 -8
  175. data/lib/aws/sns/client/options.rb +3 -6
  176. data/lib/aws/sns/client/xml.rb +4 -8
  177. data/lib/aws/sns/config.rb +18 -0
  178. data/lib/aws/sns/errors.rb +1 -4
  179. data/lib/aws/sns/policy.rb +3 -5
  180. data/lib/aws/sns/request.rb +4 -9
  181. data/lib/aws/sns/subscription.rb +1 -5
  182. data/lib/aws/sns/subscription_collection.rb +1 -5
  183. data/lib/aws/sns/topic.rb +1 -6
  184. data/lib/aws/sns/topic_collection.rb +1 -4
  185. data/lib/aws/sns/topic_subscription_collection.rb +1 -4
  186. data/lib/aws/sqs.rb +14 -5
  187. data/lib/aws/sqs/client.rb +6 -9
  188. data/lib/aws/sqs/client/xml.rb +4 -7
  189. data/lib/aws/sqs/config.rb +18 -0
  190. data/lib/aws/sqs/errors.rb +1 -4
  191. data/lib/aws/sqs/policy.rb +3 -5
  192. data/lib/aws/sqs/queue.rb +2 -7
  193. data/lib/aws/sqs/queue_collection.rb +4 -5
  194. data/lib/aws/sqs/received_message.rb +1 -3
  195. data/lib/aws/sqs/received_sns_message.rb +2 -2
  196. data/lib/aws/sqs/request.rb +4 -7
  197. data/lib/aws/sts.rb +12 -6
  198. data/lib/aws/sts/client.rb +6 -8
  199. data/lib/aws/sts/client/xml.rb +4 -8
  200. data/lib/aws/sts/config.rb +18 -0
  201. data/lib/aws/sts/errors.rb +1 -4
  202. data/lib/aws/sts/federated_session.rb +0 -2
  203. data/lib/aws/sts/policy.rb +3 -5
  204. data/lib/aws/sts/request.rb +3 -7
  205. metadata +60 -50
  206. data/lib/aws/async_handle.rb +0 -90
  207. data/lib/aws/authorize_v2.rb +0 -37
  208. data/lib/aws/base_client.rb +0 -488
  209. data/lib/aws/cacheable.rb +0 -79
  210. data/lib/aws/client_logging.rb +0 -122
  211. data/lib/aws/collections.rb +0 -230
  212. data/lib/aws/configuration.rb +0 -357
  213. data/lib/aws/configured_client_methods.rb +0 -81
  214. data/lib/aws/configured_grammars.rb +0 -65
  215. data/lib/aws/default_signer.rb +0 -65
  216. data/lib/aws/http/curb_handler.rb +0 -127
  217. data/lib/aws/http/handler.rb +0 -77
  218. data/lib/aws/http/httparty_handler.rb +0 -103
  219. data/lib/aws/http/request.rb +0 -165
  220. data/lib/aws/http/request_param.rb +0 -64
  221. data/lib/aws/http/response.rb +0 -72
  222. data/lib/aws/indifferent_hash.rb +0 -86
  223. data/lib/aws/inflection.rb +0 -46
  224. data/lib/aws/lazy_error_classes.rb +0 -64
  225. data/lib/aws/meta_utils.rb +0 -43
  226. data/lib/aws/model.rb +0 -57
  227. data/lib/aws/option_grammar.rb +0 -565
  228. data/lib/aws/policy.rb +0 -914
  229. data/lib/aws/resource.rb +0 -381
  230. data/lib/aws/response.rb +0 -125
  231. data/lib/aws/response_cache.rb +0 -50
  232. data/lib/aws/service_interface.rb +0 -60
  233. data/lib/aws/xml_grammar.rb +0 -925
@@ -0,0 +1,76 @@
1
+ # Copyright 2011 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
+ module Core
16
+
17
+ # @private
18
+ module ConfiguredClientMethods
19
+
20
+ # @private
21
+ module ClassMethods
22
+
23
+ include ApiConfig
24
+
25
+ def configure_client
26
+
27
+ super
28
+
29
+ unless self::XML.include?(ConfiguredXmlGrammars)
30
+ self::XML.module_eval do
31
+ include(ConfiguredXmlGrammars)
32
+ define_configured_grammars
33
+ end
34
+ end
35
+
36
+ unless self::Options.include?(ConfiguredOptionGrammars)
37
+ self::Options.module_eval do
38
+ include(ConfiguredOptionGrammars)
39
+ define_configured_grammars
40
+ end
41
+ end
42
+
43
+ api_config[:operations].each do |name, customizations|
44
+ option_grammar = self::Options.operation_grammar(name)
45
+ add_client_request_method(Inflection.ruby_name(name).to_sym,
46
+ :xml_grammar =>
47
+ self::XML.operation_grammar(name)) do
48
+ configure_request do |request, options|
49
+ request.add_param("Action", name)
50
+ option_grammar.request_params(options).each do |param|
51
+ request.add_param(param)
52
+ end
53
+ end
54
+ end
55
+ end
56
+
57
+ end
58
+
59
+ def operation_xml_grammar(name)
60
+ customized_name = "Customized#{name}"
61
+ if self::XML.const_defined?(customized_name)
62
+ self::XML.const_get(customized_name)
63
+ else
64
+ self::XML.const_get(name)
65
+ end
66
+ end
67
+
68
+ end
69
+
70
+ def self.included(mod)
71
+ mod.extend(ClassMethods)
72
+ end
73
+
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,63 @@
1
+ # Copyright 2011 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
+ module Core
16
+
17
+ # @private
18
+ module ConfiguredGrammars
19
+
20
+ # @private
21
+ module ClassMethods
22
+
23
+ include ApiConfig
24
+
25
+ def base_grammar
26
+ raise NotImplementedError
27
+ end
28
+
29
+ def operation_grammar(name)
30
+ customized_name = "Customized#{name}"
31
+ if const_defined?(customized_name)
32
+ const_get(customized_name)
33
+ else
34
+ const_get(name)
35
+ end
36
+ end
37
+
38
+ def input_or_output
39
+ raise NotImplementedError
40
+ end
41
+
42
+ def process_customizations(name, customizations)
43
+ customizations
44
+ end
45
+
46
+ def define_configured_grammars
47
+ api_config[:operations].each do |name, data|
48
+ customizations = process_customizations(name,
49
+ data[input_or_output])
50
+ const_set(name,
51
+ base_grammar.customize(customizations))
52
+ # BaseResponse.customize([{
53
+ # "#{name}Result" =>
54
+ # [:ignore, *data[:output]]
55
+ # }]))
56
+ end
57
+ end
58
+
59
+ end
60
+
61
+ end
62
+ end
63
+ end
@@ -11,36 +11,34 @@
11
11
  # ANY KIND, either express or implied. See the License for the specific
12
12
  # language governing permissions and limitations under the License.
13
13
 
14
- require 'aws/configured_grammars'
15
- require 'aws/option_grammar'
16
-
17
14
  module AWS
15
+ module Core
18
16
 
19
- # @private
20
- module ConfiguredOptionGrammars
17
+ # @private
18
+ module ConfiguredOptionGrammars
21
19
 
22
- module ClassMethods
20
+ module ClassMethods
23
21
 
24
- include ConfiguredGrammars::ClassMethods
22
+ include ConfiguredGrammars::ClassMethods
25
23
 
26
- def base_grammar
27
- if const_defined?(:BaseOptions)
28
- const_get(:BaseOptions)
29
- else
30
- OptionGrammar
24
+ def base_grammar
25
+ if const_defined?(:BaseOptions)
26
+ const_get(:BaseOptions)
27
+ else
28
+ OptionGrammar
29
+ end
30
+ end
31
+
32
+ def input_or_output
33
+ :input
31
34
  end
32
- end
33
35
 
34
- def input_or_output
35
- :input
36
36
  end
37
37
 
38
- end
38
+ def self.included(mod)
39
+ mod.extend(ClassMethods)
40
+ end
39
41
 
40
- def self.included(mod)
41
- mod.extend(ClassMethods)
42
42
  end
43
-
44
43
  end
45
-
46
44
  end
@@ -11,37 +11,35 @@
11
11
  # ANY KIND, either express or implied. See the License for the specific
12
12
  # language governing permissions and limitations under the License.
13
13
 
14
- require 'aws/configured_grammars'
15
- require 'aws/xml_grammar'
16
-
17
14
  module AWS
18
-
19
- # @private
20
- module ConfiguredXmlGrammars
15
+ module Core
21
16
 
22
17
  # @private
23
- module ClassMethods
18
+ module ConfiguredXmlGrammars
19
+
20
+ # @private
21
+ module ClassMethods
24
22
 
25
- include ConfiguredGrammars::ClassMethods
23
+ include ConfiguredGrammars::ClassMethods
26
24
 
27
- def base_grammar
28
- if const_defined?(:BaseResponse)
29
- const_get(:BaseResponse)
30
- else
31
- XmlGrammar
25
+ def base_grammar
26
+ if const_defined?(:BaseResponse)
27
+ const_get(:BaseResponse)
28
+ else
29
+ XmlGrammar
30
+ end
31
+ end
32
+
33
+ def input_or_output
34
+ :output
32
35
  end
33
- end
34
36
 
35
- def input_or_output
36
- :output
37
37
  end
38
38
 
39
- end
39
+ def self.included(mod)
40
+ mod.extend(ClassMethods)
41
+ end
40
42
 
41
- def self.included(mod)
42
- mod.extend(ClassMethods)
43
43
  end
44
-
45
44
  end
46
-
47
45
  end
@@ -0,0 +1,67 @@
1
+ # Copyright 2011 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 'base64'
15
+ require 'openssl'
16
+
17
+ module AWS
18
+ module Core
19
+
20
+ # Computes signatures using credentials that are stored in memory.
21
+ class DefaultSigner
22
+
23
+ # @return [String] The Access Key ID used to sign requests.
24
+ attr_reader :access_key_id
25
+
26
+ # @return [String] The Secret Access Key used to sign requests.
27
+ attr_reader :secret_access_key
28
+
29
+ # @return [String] The Session Token used to sign requests.
30
+ attr_reader :session_token
31
+
32
+ # @param [String] access_key_id The Access Key ID used to sign
33
+ # requests.
34
+ #
35
+ # @param [String] secret_access_key The Secret Access Key used to
36
+ # sign requests.
37
+ #
38
+ # @param [String] session_token The Session Token used to sign
39
+ # requests. You can get credentials that include a session
40
+ # token using the {STS} class.
41
+ def initialize(access_key_id, secret_access_key, session_token = nil)
42
+
43
+ @access_key_id = access_key_id
44
+ @secret_access_key = secret_access_key
45
+ @session_token = session_token
46
+
47
+ raise "Missing credentials" unless access_key_id and secret_access_key
48
+
49
+ end
50
+
51
+ # Signs a string using the credentials stored in memory.
52
+ #
53
+ # @param [String] string_to_sign The string to sign.
54
+ #
55
+ # @param [String] digest_method The digest method to use when
56
+ # computing the HMAC digest.
57
+ def sign(string_to_sign, digest_method = 'sha256')
58
+ Base64.encode64(
59
+ OpenSSL::HMAC.digest(
60
+ OpenSSL::Digest::Digest.new(digest_method),
61
+ secret_access_key,
62
+ string_to_sign)).strip
63
+ end
64
+
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,129 @@
1
+ # Copyright 2011 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
+ module Core
18
+ module Http
19
+
20
+ # @private
21
+ class CurbHandler
22
+
23
+ def initialize
24
+ @q = []
25
+ @sem = Mutex.new
26
+ @multi = Curl::Multi.new
27
+
28
+ start_processor
29
+ end
30
+
31
+ def handle request, response
32
+ raise "unsupport http reqest method: #{request.http_method}" unless
33
+ ['GET', 'HEAD', 'PUT', 'POST', 'DELETE'].include? request.http_method
34
+ @sem.synchronize do
35
+ @q << [request, response, Thread.current]
36
+ @processor.wakeup
37
+ end
38
+ Thread.stop
39
+ nil
40
+ end
41
+
42
+ # fills the Curl::Multi handle with the given array of queue
43
+ # items, calling make_easy_handle on each one first
44
+ private
45
+ def fill_multi(items)
46
+ items.each do |item|
47
+ c = make_easy_handle(*item)
48
+ @multi.add(c)
49
+ end
50
+ end
51
+
52
+ # starts a background thread that waits for new items and
53
+ # sends them through the Curl::Multi handle
54
+ private
55
+ def start_processor
56
+ @processor = Thread.new do
57
+ loop do
58
+ items = nil
59
+ @sem.synchronize do
60
+ items = @q.slice!(0..-1)
61
+ end
62
+ unless items.empty?
63
+ fill_multi(items)
64
+ @multi.perform do
65
+ # curl is idle, so process more items if we can get them
66
+ # without blocking
67
+ if !@q.empty? && @sem.try_lock
68
+ begin
69
+ fill_multi(@q.slice!(0..-1))
70
+ ensure
71
+ @sem.unlock
72
+ end
73
+ end
74
+ end
75
+ end
76
+
77
+ # wait for a new item to show up before continuing
78
+ Thread.stop if @q.empty?
79
+ end
80
+ end
81
+ end
82
+
83
+ private
84
+ def make_easy_handle request, response, thread = nil
85
+
86
+ url = request.use_ssl? ?
87
+ "https://#{request.host}:443#{request.uri}" :
88
+ "http://#{request.host}#{request.uri}"
89
+
90
+ curl = Curl::Easy.new(url)
91
+ curl.headers = request.headers
92
+
93
+ if proxy = request.proxy_uri
94
+ curl.proxy_url = proxy.to_s
95
+ curl.proxy_port = proxy.port
96
+ end
97
+
98
+ curl.on_header {|header_data|
99
+ name, value = header_data.strip.split(/:\s+/, 2)
100
+ response.headers[name] = value
101
+ header_data.length
102
+ }
103
+
104
+ case request.http_method
105
+ when 'GET'
106
+ # ....
107
+ when 'HEAD'
108
+ curl.head = true
109
+ when 'PUT'
110
+ curl.put_data = request.body
111
+ when 'POST'
112
+ curl.post_body = request.body
113
+ when 'DELETE'
114
+ curl.delete = true
115
+ end
116
+
117
+ curl.on_complete do
118
+ response.body = curl.body_str
119
+ response.status = curl.response_code
120
+ thread.run if thread
121
+ end
122
+
123
+ curl
124
+ end
125
+
126
+ end
127
+ end
128
+ end
129
+ end