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,77 @@
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
+ module Http
17
+
18
+ # @private
19
+ class Handler
20
+
21
+ attr_reader :base
22
+
23
+ def initialize(base, &block)
24
+ @base = base
25
+ if base.respond_to?(:handle)
26
+
27
+ unless block.arity == 2
28
+ raise ArgumentError, 'passed block must accept 2 arguments'
29
+ end
30
+ MetaUtils.extend_method(self, :handle, &block)
31
+
32
+ elsif base.respond_to?(:handle_async)
33
+
34
+ unless block.arity == 3
35
+ raise ArgumentError, 'passed block must accept 3 arguments'
36
+ end
37
+
38
+ MetaUtils.extend_method(self, :handle_async) do |req, resp, handle|
39
+ @base.handle_async(req, resp, handle)
40
+ end
41
+ MetaUtils.extend(self) do
42
+ define_method(:handle) do |req, resp|
43
+ raise "attempted to call #handle on an async handler"
44
+ end
45
+ define_method(:handle_async, &block)
46
+ end
47
+
48
+ else
49
+ raise ArgumentError, 'base must respond to #handle or #handle_async'
50
+ end
51
+ end
52
+
53
+ def handle(request, http_response)
54
+ @base.handle(request, http_response)
55
+ end
56
+
57
+ def handle_async(request, http_response, handle)
58
+ Thread.new do
59
+ begin
60
+ self.handle(request, http_response)
61
+ rescue => e
62
+ handle.signal_failure
63
+ else
64
+ handle.signal_success
65
+ end
66
+ end
67
+ end
68
+
69
+ def sleep_with_callback seconds, &block
70
+ Kernel.sleep(seconds)
71
+ yield
72
+ end
73
+
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,113 @@
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 'httparty'
15
+
16
+ module AWS
17
+ module Core
18
+ module Http
19
+
20
+ # Makes HTTP requests using HTTParty. This is the default
21
+ # handler, so you don't need to do anything special to configure
22
+ # it. However, you can directly instantiate this class in order
23
+ # to send extra options to HTTParty, for example to enable an HTTP
24
+ # proxy:
25
+ #
26
+ # AWS.config(
27
+ # :http_handler => AWS::Http::HTTPartyHandler.new(
28
+ # :http_proxyaddr => "http://myproxy.com",
29
+ # :http_proxyport => 80
30
+ # )
31
+ # )
32
+ #
33
+ class HTTPartyHandler
34
+
35
+ # @return [Hash] The default options to send to HTTParty on each
36
+ # request.
37
+ attr_reader :default_request_options
38
+
39
+ # Constructs a new HTTP handler using HTTParty.
40
+ #
41
+ # @param [Hash] options Default options to send to HTTParty on
42
+ # each request. These options will be sent to +get+, +post+,
43
+ # +head+, +put+, or +delete+ when a request is made. Note
44
+ # that +:body+, +:headers+, +:parser+, and +:ssl_ca_file+ are
45
+ # ignored. If you need to set the CA file, you should use the
46
+ # +:ssl_ca_file+ option to {AWS.config} or
47
+ # {AWS::Configuration} instead.
48
+ def initialize options = {}
49
+ @default_request_options = options
50
+ end
51
+
52
+ include HTTParty
53
+
54
+ class NoOpParser < HTTParty::Parser
55
+ SupportedFormats = {}
56
+ end
57
+
58
+ def handle(request, response)
59
+
60
+ opts = default_request_options.merge({
61
+ :body => request.body,
62
+ :parser => NoOpParser
63
+ })
64
+
65
+ if request.proxy_uri
66
+ opts[:http_proxyaddr] = request.proxy_uri.host
67
+ opts[:http_proxyport] = request.proxy_uri.port
68
+ end
69
+
70
+ if request.use_ssl?
71
+ url = "https://#{request.host}:443#{request.uri}"
72
+ opts[:ssl_ca_file] = request.ssl_ca_file if
73
+ request.ssl_verify_peer?
74
+ else
75
+ url = "http://#{request.host}#{request.uri}"
76
+ end
77
+
78
+ # get, post, put, delete, head
79
+ method = request.http_method.downcase
80
+
81
+ # Net::HTTP adds this header for us when the body is
82
+ # provided, but it messes up signing
83
+ headers = { 'content-type' => '' }
84
+
85
+ # headers must have string values (net http calls .strip on them)
86
+ request.headers.each_pair do |key,value|
87
+ headers[key] = value.to_s
88
+ end
89
+
90
+ opts[:headers] = headers
91
+
92
+ begin
93
+ http_response = self.class.send(method, url, opts)
94
+ rescue Timeout::Error, Errno::ETIMEDOUT => e
95
+ response.timeout = true
96
+ else
97
+ response.body = http_response.body
98
+ response.status = http_response.code.to_i
99
+ response.headers = http_response.to_hash
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+
106
+ # We move this from AWS::Http to AWS::Core::Http, but we want the
107
+ # previous default handler to remain accessible from its old namesapce
108
+ # @private
109
+ module Http
110
+ class HTTPartyHandler < Core::Http::HTTPartyHandler; end
111
+ end
112
+
113
+ end
@@ -0,0 +1,124 @@
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 'net/http'
15
+ require 'net/https'
16
+ require 'openssl'
17
+
18
+ module AWS
19
+ module Core
20
+ module Http
21
+
22
+ # The default http request handler for the aws-sdk gem. It is based
23
+ # on Net::Http.
24
+ class NetHttpHandler
25
+
26
+ def handle request, response
27
+ http_session_for(request) do |http|
28
+ begin
29
+ http_resp = http.request(build_request(request))
30
+ response.body = http_resp.body
31
+ response.status = http_resp.code.to_i
32
+ response.headers = http_resp.to_hash
33
+ rescue Timeout::Error, Errno::ETIMEDOUT => e
34
+ response.timeout = true
35
+ end
36
+ end
37
+ end
38
+
39
+ # @private
40
+ protected
41
+ def http_session_for request, &block
42
+ begin
43
+ http = build_http(request)
44
+ http.start
45
+ yield(http)
46
+ ensure
47
+ http.finish if http.started?
48
+ end
49
+ end
50
+
51
+ # @private
52
+ protected
53
+ def build_http request
54
+
55
+ http_args = []
56
+ http_args << request.host
57
+ http_args << (request.use_ssl? ? 443 : 80)
58
+
59
+ ## add proxy arguments
60
+
61
+ if proxy = request.proxy_uri
62
+ proxy_addr = proxy.respond_to?(:request_uri) ?
63
+ "#{proxy.host}#{proxy.request_uri}" : proxy.host
64
+ http_args << proxy_addr
65
+ http_args << proxy.port
66
+ http_args << proxy.user
67
+ http_args << proxy.password
68
+ end
69
+
70
+ # ruby 1.8.7 does not accept a hash of options at the end of
71
+ # Net::HTTP.new like 1.9 does, therefore we have to set ssl
72
+ # options on the returned http object
73
+ http = Net::HTTP.new(*http_args)
74
+
75
+ ## configure ssl
76
+
77
+ if request.use_ssl?
78
+ http.use_ssl = true
79
+ if request.ssl_verify_peer?
80
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
81
+ http.ca_file = request.ssl_ca_file
82
+ else
83
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
84
+ end
85
+ else
86
+ http.use_ssl = false
87
+ end
88
+
89
+ http
90
+
91
+ end
92
+
93
+ # @private
94
+ protected
95
+ def build_request request
96
+
97
+ # Net::HTTP adds a content-type header automatically unless its set
98
+ # and this messes with request signature signing. Also, it expects
99
+ # all header values to be strings (it call strip on them).
100
+ headers = { 'content-type' => '' }
101
+ request.headers.each_pair do |key,value|
102
+ headers[key] = value.to_s
103
+ end
104
+
105
+ req_class = case request.http_method
106
+ when 'GET' then Net::HTTP::Get
107
+ when 'PUT' then Net::HTTP::Put
108
+ when 'POST' then Net::HTTP::Post
109
+ when 'HEAD' then Net::HTTP::Head
110
+ when 'DELETE' then Net::HTTP::Delete
111
+ else raise "unsupported http method: #{request.http_method}"
112
+ end
113
+
114
+ net_http_req = req_class.new(request.uri, headers)
115
+ net_http_req.body = request.body
116
+ net_http_req
117
+
118
+ end
119
+
120
+ end
121
+
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,207 @@
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
+ module Http
17
+
18
+ # Base class for all service reqeusts.
19
+ class Request
20
+
21
+ # Returns a new empty http request object.
22
+ def initialize
23
+ @host = nil
24
+ @http_method = 'POST'
25
+ @path = '/'
26
+ @headers = CaseInsensitiveHash.new
27
+ @params = []
28
+ @use_ssl = true
29
+ end
30
+
31
+ # @return [String] hostname of the request
32
+ attr_accessor :host
33
+
34
+ # @return [CaseInsensitiveHash] request headers
35
+ attr_reader :headers
36
+
37
+ # @return [Array] An array of request params, each param responds to
38
+ # #name and #value.
39
+ attr_reader :params
40
+
41
+ # @return [String] GET, PUT POST, HEAD or DELETE, defaults to POST
42
+ attr_accessor :http_method
43
+
44
+ # @return [String] path of the request URI, defaults to /
45
+ attr_reader :path
46
+
47
+ # @return [String] the AWS access key ID used to authorize the
48
+ # request
49
+ attr_accessor :access_key_id
50
+
51
+ # @return [nil, URI] The URI to the proxy server requests are
52
+ # sent through if configured. Returns nil if there is no proxy.
53
+ attr_accessor :proxy_uri
54
+
55
+ # @param [Boolean] ssl If the request should be sent over ssl or not.
56
+ def use_ssl= use_ssl
57
+ @use_ssl = use_ssl
58
+ end
59
+
60
+ # @return [Boolean] If this request should be sent over ssl or not.
61
+ def use_ssl?
62
+ @use_ssl
63
+ end
64
+
65
+ # @param [Boolean] verify_peer If the client should verify the
66
+ # peer certificate or not.
67
+ def ssl_verify_peer=(verify_peer)
68
+ @ssl_verify_peer = verify_peer
69
+ end
70
+
71
+ # @return [Boolean] If the client should verify the peer
72
+ # certificate or not.
73
+ def ssl_verify_peer?
74
+ @ssl_verify_peer
75
+ end
76
+
77
+ # @param [String] ca_file Path to a bundle of CA certs in PEM
78
+ # format; the HTTP handler should use this to verify all HTTPS
79
+ # requests if {#ssl_verify_peer?} is true.
80
+ def ssl_ca_file=(ca_file)
81
+ @ssl_ca_file = ca_file
82
+ end
83
+
84
+ # @return [String] Path to a bundle of CA certs in PEM format;
85
+ # the HTTP handler should use this to verify all HTTPS
86
+ # requests if {#ssl_verify_peer?} is true.
87
+ def ssl_ca_file
88
+ @ssl_ca_file
89
+ end
90
+
91
+ # Adds a request param.
92
+ #
93
+ # @overload add_param(param_name, param_value = nil)
94
+ # Add a param (name/value)
95
+ # @param [String] param_name
96
+ # @param [String] param_value Leave blank for sub resources
97
+ #
98
+ # @overload add_param(param_obj)
99
+ # Add a param (object)
100
+ # @param [Param] param_obj
101
+ #
102
+ def add_param name_or_param, value = nil
103
+ if name_or_param.kind_of?(Param)
104
+ @params << name_or_param
105
+ else
106
+ @params << Param.new(name_or_param, value)
107
+ end
108
+ end
109
+
110
+ # @private
111
+ def get_param param_name
112
+ @params.detect{|p| p.name == param_name } ||
113
+ raise("undefined param #{param_name}")
114
+ end
115
+
116
+ # @return [String] the request uri
117
+ def uri
118
+ querystring ? "#{path}?#{querystring}" : path
119
+ end
120
+
121
+ # @return [String] Returns the request params url encoded, or nil if
122
+ # this request has no params.
123
+ def url_encoded_params
124
+ if @params.empty?
125
+ nil
126
+ else
127
+ @params.sort.collect{|p| p.encoded }.join('&')
128
+ end
129
+ end
130
+
131
+ # @return [String, nil] Returns the requesty querystring.
132
+ def querystring
133
+ nil
134
+ end
135
+
136
+ # @return [String, nil] Returns the request body.
137
+ def body
138
+ url_encoded_params
139
+ end
140
+
141
+ # @private
142
+ class CaseInsensitiveHash < Hash
143
+
144
+ def []= key, value
145
+ super(key.to_s.downcase, value)
146
+ end
147
+
148
+ def [] key
149
+ super(key.to_s.downcase)
150
+ end
151
+
152
+ def has_key?(key)
153
+ super(key.to_s.downcase)
154
+ end
155
+ alias_method :key?, :has_key?
156
+ alias_method :include?, :has_key?
157
+ alias_method :member?, :has_key?
158
+
159
+ end
160
+
161
+ # Represents a single request paramater. Some services accept this
162
+ # in a form encoded body string, others as query parameters.
163
+ # It is up to each service's Request class to determine how to
164
+ # consume these params.
165
+ # @private
166
+ class Param
167
+
168
+ include UriEscape
169
+
170
+ attr_accessor :name, :value
171
+
172
+ def initialize name, value = nil
173
+ @name = name
174
+ @value = value
175
+ end
176
+
177
+ def <=> other
178
+ @name <=> other.name
179
+ end
180
+
181
+ def to_s
182
+ if value
183
+ "#{name}=#{value}"
184
+ else
185
+ name
186
+ end
187
+ end
188
+
189
+ def ==(other)
190
+ other.kind_of?(Param) &&
191
+ to_s == other.to_s
192
+ end
193
+
194
+ def encoded
195
+ if value
196
+ "#{escape(name)}=#{escape(value)}"
197
+ else
198
+ escape(name)
199
+ end
200
+ end
201
+
202
+ end
203
+
204
+ end
205
+ end
206
+ end
207
+ end