aws-sdk 1.1.3 → 1.1.4

Sign up to get free protection for your applications and to get access to all the features.
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