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.
- data/ca-bundle.crt +2 -348
- data/lib/aws.rb +24 -49
- data/lib/aws/{common.rb → core.rb} +120 -9
- data/lib/aws/{api_config.rb → core/api_config.rb} +19 -20
- data/lib/aws/core/api_config_transform.rb +36 -0
- data/lib/aws/core/async_handle.rb +91 -0
- data/lib/aws/core/authorize_v2.rb +39 -0
- data/lib/aws/{authorize_v3.rb → core/authorize_v3.rb} +16 -15
- data/lib/aws/{api_config_transform.rb → core/authorize_with_session_token.rb} +9 -12
- data/lib/aws/core/autoloader.rb +64 -0
- data/lib/aws/core/cacheable.rb +78 -0
- data/lib/aws/core/client.rb +471 -0
- data/lib/aws/core/client_logging.rb +125 -0
- data/lib/aws/core/collections.rb +229 -0
- data/lib/aws/core/configuration.rb +358 -0
- data/lib/aws/core/configured_client_methods.rb +76 -0
- data/lib/aws/core/configured_grammars.rb +63 -0
- data/lib/aws/{configured_option_grammars.rb → core/configured_option_grammars.rb} +18 -20
- data/lib/aws/{configured_xml_grammars.rb → core/configured_xml_grammars.rb} +19 -21
- data/lib/aws/core/default_signer.rb +67 -0
- data/lib/aws/core/http/curb_handler.rb +129 -0
- data/lib/aws/core/http/handler.rb +77 -0
- data/lib/aws/core/http/httparty_handler.rb +113 -0
- data/lib/aws/core/http/net_http_handler.rb +124 -0
- data/lib/aws/core/http/request.rb +207 -0
- data/lib/aws/core/http/response.rb +73 -0
- data/lib/aws/{ignore_result_element.rb → core/ignore_result_element.rb} +14 -18
- data/lib/aws/core/indifferent_hash.rb +88 -0
- data/lib/aws/core/inflection.rb +47 -0
- data/lib/aws/core/lazy_error_classes.rb +62 -0
- data/lib/aws/{uri_escape.rb → core/meta_utils.rb} +24 -23
- data/lib/aws/core/model.rb +57 -0
- data/lib/aws/{authorize_with_session_token.rb → core/naming.rb} +9 -8
- data/lib/aws/core/option_grammar.rb +562 -0
- data/lib/aws/core/policy.rb +914 -0
- data/lib/aws/core/resource.rb +380 -0
- data/lib/aws/core/resource_cache.rb +40 -0
- data/lib/aws/core/response.rb +125 -0
- data/lib/aws/core/response_cache.rb +50 -0
- data/lib/aws/core/service_interface.rb +60 -0
- data/lib/aws/core/uri_escape.rb +46 -0
- data/lib/aws/core/xml_grammar.rb +926 -0
- data/lib/aws/ec2.rb +47 -16
- data/lib/aws/ec2/attachment.rb +0 -2
- data/lib/aws/ec2/attachment_collection.rb +1 -6
- data/lib/aws/ec2/availability_zone.rb +0 -2
- data/lib/aws/ec2/availability_zone_collection.rb +0 -3
- data/lib/aws/ec2/client.rb +6 -9
- data/lib/aws/ec2/client/xml.rb +3 -6
- data/lib/aws/ec2/collection.rb +1 -4
- data/lib/aws/ec2/config.rb +18 -0
- data/lib/aws/ec2/elastic_ip.rb +0 -2
- data/lib/aws/ec2/elastic_ip_collection.rb +0 -4
- data/lib/aws/ec2/errors.rb +1 -4
- data/lib/aws/ec2/has_permissions.rb +0 -2
- data/lib/aws/ec2/image.rb +0 -5
- data/lib/aws/ec2/image_collection.rb +0 -6
- data/lib/aws/ec2/instance.rb +23 -9
- data/lib/aws/ec2/instance_collection.rb +85 -22
- data/lib/aws/ec2/key_pair.rb +0 -2
- data/lib/aws/ec2/key_pair_collection.rb +1 -4
- data/lib/aws/ec2/permission_collection.rb +2 -5
- data/lib/aws/ec2/region.rb +0 -2
- data/lib/aws/ec2/region_collection.rb +0 -4
- data/lib/aws/ec2/request.rb +4 -9
- data/lib/aws/ec2/reserved_instances.rb +0 -3
- data/lib/aws/ec2/reserved_instances_collection.rb +0 -4
- data/lib/aws/ec2/reserved_instances_offering.rb +0 -3
- data/lib/aws/ec2/reserved_instances_offering_collection.rb +0 -4
- data/lib/aws/ec2/resource.rb +3 -5
- data/lib/aws/ec2/resource_tag_collection.rb +1 -6
- data/lib/aws/ec2/security_group.rb +204 -72
- data/lib/aws/ec2/security_group/egress_ip_permission_collection.rb +53 -0
- data/lib/aws/ec2/security_group/ip_permission.rb +92 -10
- data/lib/aws/ec2/security_group/ip_permission_collection.rb +14 -15
- data/lib/aws/ec2/security_group_collection.rb +11 -8
- data/lib/aws/ec2/snapshot.rb +0 -4
- data/lib/aws/ec2/snapshot_collection.rb +0 -4
- data/lib/aws/ec2/tag.rb +0 -3
- data/lib/aws/ec2/tag_collection.rb +1 -8
- data/lib/aws/ec2/tagged_item.rb +1 -3
- data/lib/aws/ec2/volume.rb +0 -6
- data/lib/aws/ec2/volume_collection.rb +0 -4
- data/lib/aws/errors.rb +0 -3
- data/lib/aws/iam.rb +33 -12
- data/lib/aws/iam/access_key.rb +0 -3
- data/lib/aws/iam/access_key_collection.rb +0 -3
- data/lib/aws/iam/account_alias_collection.rb +0 -2
- data/lib/aws/iam/client.rb +6 -8
- data/lib/aws/iam/client/xml.rb +4 -8
- data/lib/aws/iam/collection.rb +2 -5
- data/lib/aws/iam/config.rb +18 -0
- data/lib/aws/iam/errors.rb +2 -4
- data/lib/aws/iam/group.rb +0 -5
- data/lib/aws/iam/group_collection.rb +0 -3
- data/lib/aws/iam/group_policy_collection.rb +0 -2
- data/lib/aws/iam/group_user_collection.rb +1 -4
- data/lib/aws/iam/login_profile.rb +0 -2
- data/lib/aws/iam/mfa_device.rb +1 -3
- data/lib/aws/iam/mfa_device_collection.rb +0 -3
- data/lib/aws/iam/policy.rb +2 -4
- data/lib/aws/iam/policy_collection.rb +0 -3
- data/lib/aws/iam/request.rb +3 -7
- data/lib/aws/iam/resource.rb +1 -4
- data/lib/aws/iam/server_certificate.rb +0 -2
- data/lib/aws/iam/server_certificate_collection.rb +0 -3
- data/lib/aws/iam/signing_certificate.rb +0 -2
- data/lib/aws/iam/signing_certificate_collection.rb +0 -3
- data/lib/aws/iam/user.rb +0 -7
- data/lib/aws/iam/user_collection.rb +0 -3
- data/lib/aws/iam/user_group_collection.rb +0 -3
- data/lib/aws/iam/user_policy.rb +0 -2
- data/lib/aws/iam/user_policy_collection.rb +0 -3
- data/lib/aws/rails.rb +5 -4
- data/lib/aws/record.rb +4 -1
- data/lib/aws/record/base.rb +3 -2
- data/lib/aws/record/errors.rb +1 -3
- data/lib/aws/s3.rb +31 -6
- data/lib/aws/s3/access_control_list.rb +0 -2
- data/lib/aws/s3/acl_object.rb +10 -12
- data/lib/aws/s3/bucket.rb +1 -9
- data/lib/aws/s3/bucket_collection.rb +2 -5
- data/lib/aws/s3/bucket_version_collection.rb +1 -5
- data/lib/aws/s3/client.rb +34 -37
- data/lib/aws/s3/client/xml.rb +11 -14
- data/lib/aws/{resource_cache.rb → s3/config.rb} +6 -20
- data/lib/aws/s3/errors.rb +6 -7
- data/lib/aws/s3/multipart_upload.rb +1 -4
- data/lib/aws/s3/multipart_upload_collection.rb +1 -6
- data/lib/aws/s3/object_collection.rb +1 -5
- data/lib/aws/s3/object_metadata.rb +1 -3
- data/lib/aws/s3/object_upload_collection.rb +1 -7
- data/lib/aws/s3/object_version.rb +1 -4
- data/lib/aws/s3/object_version_collection.rb +1 -4
- data/lib/aws/s3/policy.rb +3 -5
- data/lib/aws/s3/prefix_and_delimiter_collection.rb +0 -2
- data/lib/aws/s3/prefixed_collection.rb +0 -2
- data/lib/aws/s3/presigned_post.rb +1 -3
- data/lib/aws/s3/request.rb +2 -5
- data/lib/aws/s3/s3_object.rb +1 -8
- data/lib/aws/s3/tree.rb +8 -6
- data/lib/aws/s3/tree/branch_node.rb +0 -3
- data/lib/aws/s3/tree/child_collection.rb +1 -5
- data/lib/aws/s3/tree/leaf_node.rb +0 -5
- data/lib/aws/s3/tree/parent.rb +1 -4
- data/lib/aws/s3/uploaded_part.rb +1 -3
- data/lib/aws/s3/uploaded_part_collection.rb +1 -5
- data/lib/aws/simple_db.rb +21 -6
- data/lib/aws/simple_db/attribute.rb +1 -6
- data/lib/aws/simple_db/attribute_collection.rb +1 -7
- data/lib/aws/simple_db/client.rb +7 -9
- data/lib/aws/simple_db/client/options.rb +2 -4
- data/lib/aws/simple_db/client/xml.rb +5 -10
- data/lib/aws/{naming.rb → simple_db/config.rb} +3 -14
- data/lib/aws/simple_db/delete_attributes.rb +0 -2
- data/lib/aws/simple_db/domain.rb +1 -6
- data/lib/aws/simple_db/domain_collection.rb +1 -4
- data/lib/aws/simple_db/domain_metadata.rb +1 -3
- data/lib/aws/simple_db/errors.rb +1 -4
- data/lib/aws/simple_db/item.rb +1 -7
- data/lib/aws/simple_db/item_collection.rb +22 -23
- data/lib/aws/simple_db/put_attributes.rb +0 -2
- data/lib/aws/simple_db/request.rb +3 -7
- data/lib/aws/simple_email_service.rb +11 -6
- data/lib/aws/simple_email_service/client.rb +7 -9
- data/lib/aws/simple_email_service/client/options.rb +3 -6
- data/lib/aws/simple_email_service/client/xml.rb +4 -8
- data/lib/aws/simple_email_service/config.rb +19 -0
- data/lib/aws/simple_email_service/email_address_collection.rb +1 -3
- data/lib/aws/simple_email_service/errors.rb +1 -4
- data/lib/aws/simple_email_service/quotas.rb +1 -3
- data/lib/aws/simple_email_service/request.rb +3 -7
- data/lib/aws/sns.rb +15 -8
- data/lib/aws/sns/client.rb +7 -8
- data/lib/aws/sns/client/options.rb +3 -6
- data/lib/aws/sns/client/xml.rb +4 -8
- data/lib/aws/sns/config.rb +18 -0
- data/lib/aws/sns/errors.rb +1 -4
- data/lib/aws/sns/policy.rb +3 -5
- data/lib/aws/sns/request.rb +4 -9
- data/lib/aws/sns/subscription.rb +1 -5
- data/lib/aws/sns/subscription_collection.rb +1 -5
- data/lib/aws/sns/topic.rb +1 -6
- data/lib/aws/sns/topic_collection.rb +1 -4
- data/lib/aws/sns/topic_subscription_collection.rb +1 -4
- data/lib/aws/sqs.rb +14 -5
- data/lib/aws/sqs/client.rb +6 -9
- data/lib/aws/sqs/client/xml.rb +4 -7
- data/lib/aws/sqs/config.rb +18 -0
- data/lib/aws/sqs/errors.rb +1 -4
- data/lib/aws/sqs/policy.rb +3 -5
- data/lib/aws/sqs/queue.rb +2 -7
- data/lib/aws/sqs/queue_collection.rb +4 -5
- data/lib/aws/sqs/received_message.rb +1 -3
- data/lib/aws/sqs/received_sns_message.rb +2 -2
- data/lib/aws/sqs/request.rb +4 -7
- data/lib/aws/sts.rb +12 -6
- data/lib/aws/sts/client.rb +6 -8
- data/lib/aws/sts/client/xml.rb +4 -8
- data/lib/aws/sts/config.rb +18 -0
- data/lib/aws/sts/errors.rb +1 -4
- data/lib/aws/sts/federated_session.rb +0 -2
- data/lib/aws/sts/policy.rb +3 -5
- data/lib/aws/sts/request.rb +3 -7
- metadata +60 -50
- data/lib/aws/async_handle.rb +0 -90
- data/lib/aws/authorize_v2.rb +0 -37
- data/lib/aws/base_client.rb +0 -488
- data/lib/aws/cacheable.rb +0 -79
- data/lib/aws/client_logging.rb +0 -122
- data/lib/aws/collections.rb +0 -230
- data/lib/aws/configuration.rb +0 -357
- data/lib/aws/configured_client_methods.rb +0 -81
- data/lib/aws/configured_grammars.rb +0 -65
- data/lib/aws/default_signer.rb +0 -65
- data/lib/aws/http/curb_handler.rb +0 -127
- data/lib/aws/http/handler.rb +0 -77
- data/lib/aws/http/httparty_handler.rb +0 -103
- data/lib/aws/http/request.rb +0 -165
- data/lib/aws/http/request_param.rb +0 -64
- data/lib/aws/http/response.rb +0 -72
- data/lib/aws/indifferent_hash.rb +0 -86
- data/lib/aws/inflection.rb +0 -46
- data/lib/aws/lazy_error_classes.rb +0 -64
- data/lib/aws/meta_utils.rb +0 -43
- data/lib/aws/model.rb +0 -57
- data/lib/aws/option_grammar.rb +0 -565
- data/lib/aws/policy.rb +0 -914
- data/lib/aws/resource.rb +0 -381
- data/lib/aws/response.rb +0 -125
- data/lib/aws/response_cache.rb +0 -50
- data/lib/aws/service_interface.rb +0 -60
- data/lib/aws/xml_grammar.rb +0 -925
|
@@ -1,81 +0,0 @@
|
|
|
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 'aws/api_config'
|
|
15
|
-
require 'aws/inflection'
|
|
16
|
-
require 'aws/configured_xml_grammars'
|
|
17
|
-
require 'aws/configured_option_grammars'
|
|
18
|
-
|
|
19
|
-
module AWS
|
|
20
|
-
|
|
21
|
-
# @private
|
|
22
|
-
module ConfiguredClientMethods
|
|
23
|
-
|
|
24
|
-
# @private
|
|
25
|
-
module ClassMethods
|
|
26
|
-
|
|
27
|
-
include ApiConfig
|
|
28
|
-
|
|
29
|
-
def configure_client
|
|
30
|
-
|
|
31
|
-
super
|
|
32
|
-
|
|
33
|
-
unless self::XML.include?(ConfiguredXmlGrammars)
|
|
34
|
-
self::XML.module_eval do
|
|
35
|
-
include(ConfiguredXmlGrammars)
|
|
36
|
-
define_configured_grammars
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
unless self::Options.include?(ConfiguredOptionGrammars)
|
|
41
|
-
self::Options.module_eval do
|
|
42
|
-
include(ConfiguredOptionGrammars)
|
|
43
|
-
define_configured_grammars
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
api_config[:operations].each do |name, customizations|
|
|
48
|
-
option_grammar = self::Options.operation_grammar(name)
|
|
49
|
-
add_client_request_method(Inflection.ruby_name(name).to_sym,
|
|
50
|
-
:xml_grammar =>
|
|
51
|
-
self::XML.operation_grammar(name)) do
|
|
52
|
-
configure_request do |request, options|
|
|
53
|
-
request.add_param("Action", name)
|
|
54
|
-
option_grammar.request_params(options).each do |param|
|
|
55
|
-
request.add_param(param)
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def operation_xml_grammar(name)
|
|
64
|
-
customized_name = "Customized#{name}"
|
|
65
|
-
if self::XML.const_defined?(customized_name)
|
|
66
|
-
self::XML.const_get(customized_name)
|
|
67
|
-
else
|
|
68
|
-
self::XML.const_get(name)
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
def self.included(mod)
|
|
75
|
-
mod.extend(ClassMethods)
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
end
|
|
81
|
-
|
|
@@ -1,65 +0,0 @@
|
|
|
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 'aws/api_config'
|
|
15
|
-
require 'aws/xml_grammar'
|
|
16
|
-
|
|
17
|
-
module AWS
|
|
18
|
-
|
|
19
|
-
# @private
|
|
20
|
-
module ConfiguredGrammars
|
|
21
|
-
|
|
22
|
-
# @private
|
|
23
|
-
module ClassMethods
|
|
24
|
-
|
|
25
|
-
include ApiConfig
|
|
26
|
-
|
|
27
|
-
def base_grammar
|
|
28
|
-
raise NotImplementedError
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def operation_grammar(name)
|
|
32
|
-
customized_name = "Customized#{name}"
|
|
33
|
-
if const_defined?(customized_name)
|
|
34
|
-
const_get(customized_name)
|
|
35
|
-
else
|
|
36
|
-
const_get(name)
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def input_or_output
|
|
41
|
-
raise NotImplementedError
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def process_customizations(name, customizations)
|
|
45
|
-
customizations
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def define_configured_grammars
|
|
49
|
-
api_config[:operations].each do |name, data|
|
|
50
|
-
customizations = process_customizations(name,
|
|
51
|
-
data[input_or_output])
|
|
52
|
-
const_set(name,
|
|
53
|
-
base_grammar.customize(customizations))
|
|
54
|
-
# BaseResponse.customize([{
|
|
55
|
-
# "#{name}Result" =>
|
|
56
|
-
# [:ignore, *data[:output]]
|
|
57
|
-
# }]))
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
end
|
data/lib/aws/default_signer.rb
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
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
|
-
|
|
19
|
-
# Computes signatures using credentials that are stored in memory.
|
|
20
|
-
class DefaultSigner
|
|
21
|
-
|
|
22
|
-
# @return [String] The Access Key ID used to sign requests.
|
|
23
|
-
attr_reader :access_key_id
|
|
24
|
-
|
|
25
|
-
# @return [String] The Secret Access Key used to sign requests.
|
|
26
|
-
attr_reader :secret_access_key
|
|
27
|
-
|
|
28
|
-
# @return [String] The Session Token used to sign requests.
|
|
29
|
-
attr_reader :session_token
|
|
30
|
-
|
|
31
|
-
# @param [String] access_key_id The Access Key ID used to sign
|
|
32
|
-
# requests.
|
|
33
|
-
#
|
|
34
|
-
# @param [String] secret_access_key The Secret Access Key used to
|
|
35
|
-
# sign requests.
|
|
36
|
-
#
|
|
37
|
-
# @param [String] session_token The Session Token used to sign
|
|
38
|
-
# requests. You can get credentials that include a session
|
|
39
|
-
# token using the {STS} class.
|
|
40
|
-
def initialize(access_key_id, secret_access_key, session_token = nil)
|
|
41
|
-
|
|
42
|
-
@access_key_id = access_key_id
|
|
43
|
-
@secret_access_key = secret_access_key
|
|
44
|
-
@session_token = session_token
|
|
45
|
-
|
|
46
|
-
raise "Missing credentials" unless access_key_id and secret_access_key
|
|
47
|
-
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
# Signs a string using the credentials stored in memory.
|
|
51
|
-
#
|
|
52
|
-
# @param [String] string_to_sign The string to sign.
|
|
53
|
-
#
|
|
54
|
-
# @param [String] digest_method The digest method to use when
|
|
55
|
-
# computing the HMAC digest.
|
|
56
|
-
def sign(string_to_sign, digest_method = 'sha256')
|
|
57
|
-
Base64.encode64(
|
|
58
|
-
OpenSSL::HMAC.digest(
|
|
59
|
-
OpenSSL::Digest::Digest.new(digest_method),
|
|
60
|
-
secret_access_key,
|
|
61
|
-
string_to_sign)).strip
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
end
|
|
65
|
-
end
|
|
@@ -1,127 +0,0 @@
|
|
|
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 Http
|
|
18
|
-
|
|
19
|
-
# @private
|
|
20
|
-
class CurbHandler
|
|
21
|
-
|
|
22
|
-
def initialize
|
|
23
|
-
@q = []
|
|
24
|
-
@sem = Mutex.new
|
|
25
|
-
@multi = Curl::Multi.new
|
|
26
|
-
|
|
27
|
-
start_processor
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def handle request, response
|
|
31
|
-
raise "unsupport http reqest method: #{request.http_method}" unless
|
|
32
|
-
['GET', 'HEAD', 'PUT', 'POST', 'DELETE'].include? request.http_method
|
|
33
|
-
@sem.synchronize do
|
|
34
|
-
@q << [request, response, Thread.current]
|
|
35
|
-
@processor.wakeup
|
|
36
|
-
end
|
|
37
|
-
Thread.stop
|
|
38
|
-
nil
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
# fills the Curl::Multi handle with the given array of queue
|
|
42
|
-
# items, calling make_easy_handle on each one first
|
|
43
|
-
private
|
|
44
|
-
def fill_multi(items)
|
|
45
|
-
items.each do |item|
|
|
46
|
-
c = make_easy_handle(*item)
|
|
47
|
-
@multi.add(c)
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
# starts a background thread that waits for new items and
|
|
52
|
-
# sends them through the Curl::Multi handle
|
|
53
|
-
private
|
|
54
|
-
def start_processor
|
|
55
|
-
@processor = Thread.new do
|
|
56
|
-
loop do
|
|
57
|
-
items = nil
|
|
58
|
-
@sem.synchronize do
|
|
59
|
-
items = @q.slice!(0..-1)
|
|
60
|
-
end
|
|
61
|
-
unless items.empty?
|
|
62
|
-
fill_multi(items)
|
|
63
|
-
@multi.perform do
|
|
64
|
-
# curl is idle, so process more items if we can get them
|
|
65
|
-
# without blocking
|
|
66
|
-
if !@q.empty? && @sem.try_lock
|
|
67
|
-
begin
|
|
68
|
-
fill_multi(@q.slice!(0..-1))
|
|
69
|
-
ensure
|
|
70
|
-
@sem.unlock
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
# wait for a new item to show up before continuing
|
|
77
|
-
Thread.stop if @q.empty?
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
private
|
|
83
|
-
def make_easy_handle request, response, thread = nil
|
|
84
|
-
|
|
85
|
-
url = request.use_ssl? ?
|
|
86
|
-
"https://#{request.host}:443#{request.uri}" :
|
|
87
|
-
"http://#{request.host}#{request.uri}"
|
|
88
|
-
|
|
89
|
-
curl = Curl::Easy.new(url)
|
|
90
|
-
curl.headers = request.headers
|
|
91
|
-
|
|
92
|
-
if proxy = request.proxy_uri
|
|
93
|
-
curl.proxy_url = proxy.to_s
|
|
94
|
-
curl.proxy_port = proxy.port
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
curl.on_header {|header_data|
|
|
98
|
-
name, value = header_data.strip.split(/:\s+/, 2)
|
|
99
|
-
response.headers[name] = value
|
|
100
|
-
header_data.length
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
case request.http_method
|
|
104
|
-
when 'GET'
|
|
105
|
-
# ....
|
|
106
|
-
when 'HEAD'
|
|
107
|
-
curl.head = true
|
|
108
|
-
when 'PUT'
|
|
109
|
-
curl.put_data = request.body
|
|
110
|
-
when 'POST'
|
|
111
|
-
curl.post_body = request.body
|
|
112
|
-
when 'DELETE'
|
|
113
|
-
curl.delete = true
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
curl.on_complete do
|
|
117
|
-
response.body = curl.body_str
|
|
118
|
-
response.status = curl.response_code
|
|
119
|
-
thread.run if thread
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
curl
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
end
|
|
126
|
-
end
|
|
127
|
-
end
|
data/lib/aws/http/handler.rb
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
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 'aws/meta_utils'
|
|
15
|
-
|
|
16
|
-
module AWS
|
|
17
|
-
module Http
|
|
18
|
-
|
|
19
|
-
# @private
|
|
20
|
-
class Handler
|
|
21
|
-
|
|
22
|
-
attr_reader :base
|
|
23
|
-
|
|
24
|
-
def initialize(base, &block)
|
|
25
|
-
@base = base
|
|
26
|
-
if base.respond_to?(:handle)
|
|
27
|
-
|
|
28
|
-
unless block.arity == 2
|
|
29
|
-
raise ArgumentError, 'passed block must accept 2 arguments'
|
|
30
|
-
end
|
|
31
|
-
MetaUtils.extend_method(self, :handle, &block)
|
|
32
|
-
|
|
33
|
-
elsif base.respond_to?(:handle_async)
|
|
34
|
-
|
|
35
|
-
unless block.arity == 3
|
|
36
|
-
raise ArgumentError, 'passed block must accept 3 arguments'
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
MetaUtils.extend_method(self, :handle_async) do |req, resp, handle|
|
|
40
|
-
@base.handle_async(req, resp, handle)
|
|
41
|
-
end
|
|
42
|
-
MetaUtils.extend(self) do
|
|
43
|
-
define_method(:handle) do |req, resp|
|
|
44
|
-
raise "attempted to call #handle on an async handler"
|
|
45
|
-
end
|
|
46
|
-
define_method(:handle_async, &block)
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
else
|
|
50
|
-
raise ArgumentError, 'base must respond to #handle or #handle_async'
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def handle(request, http_response)
|
|
55
|
-
@base.handle(request, http_response)
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def handle_async(request, http_response, handle)
|
|
59
|
-
Thread.new do
|
|
60
|
-
begin
|
|
61
|
-
self.handle(request, http_response)
|
|
62
|
-
rescue => e
|
|
63
|
-
handle.signal_failure
|
|
64
|
-
else
|
|
65
|
-
handle.signal_success
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def sleep_with_callback seconds, &block
|
|
71
|
-
Kernel.sleep(seconds)
|
|
72
|
-
yield
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
end
|
|
@@ -1,103 +0,0 @@
|
|
|
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 Http
|
|
18
|
-
|
|
19
|
-
# Makes HTTP requests using HTTParty. This is the default
|
|
20
|
-
# handler, so you don't need to do anything special to configure
|
|
21
|
-
# it. However, you can directly instantiate this class in order
|
|
22
|
-
# to send extra options to HTTParty, for example to enable an HTTP
|
|
23
|
-
# proxy:
|
|
24
|
-
#
|
|
25
|
-
# AWS.config(
|
|
26
|
-
# :http_handler => AWS::Http::HTTPartyHandler.new(
|
|
27
|
-
# :http_proxyaddr => "http://myproxy.com",
|
|
28
|
-
# :http_proxyport => 80
|
|
29
|
-
# )
|
|
30
|
-
# )
|
|
31
|
-
#
|
|
32
|
-
class HTTPartyHandler
|
|
33
|
-
|
|
34
|
-
# @return [Hash] The default options to send to HTTParty on each
|
|
35
|
-
# request.
|
|
36
|
-
attr_reader :default_request_options
|
|
37
|
-
|
|
38
|
-
# Constructs a new HTTP handler using HTTParty.
|
|
39
|
-
#
|
|
40
|
-
# @param [Hash] options Default options to send to HTTParty on
|
|
41
|
-
# each request. These options will be sent to +get+, +post+,
|
|
42
|
-
# +head+, +put+, or +delete+ when a request is made. Note
|
|
43
|
-
# that +:body+, +:headers+, +:parser+, and +:ssl_ca_file+ are
|
|
44
|
-
# ignored. If you need to set the CA file, you should use the
|
|
45
|
-
# +:ssl_ca_file+ option to {AWS.config} or
|
|
46
|
-
# {AWS::Configuration} instead.
|
|
47
|
-
def initialize options = {}
|
|
48
|
-
@default_request_options = options
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
include HTTParty
|
|
52
|
-
|
|
53
|
-
class NoOpParser < HTTParty::Parser
|
|
54
|
-
SupportedFormats = {}
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def handle(request, response)
|
|
58
|
-
|
|
59
|
-
opts = default_request_options.merge({
|
|
60
|
-
:body => request.body,
|
|
61
|
-
:parser => NoOpParser
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
if request.proxy_uri
|
|
65
|
-
opts[:http_proxyaddr] = request.proxy_uri.host
|
|
66
|
-
opts[:http_proxyport] = request.proxy_uri.port
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
if request.use_ssl?
|
|
70
|
-
url = "https://#{request.host}:443#{request.uri}"
|
|
71
|
-
opts[:ssl_ca_file] = request.ssl_ca_file if
|
|
72
|
-
request.ssl_verify_peer?
|
|
73
|
-
else
|
|
74
|
-
url = "http://#{request.host}#{request.uri}"
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
# get, post, put, delete, head
|
|
78
|
-
method = request.http_method.downcase
|
|
79
|
-
|
|
80
|
-
# Net::HTTP adds this header for us when the body is
|
|
81
|
-
# provided, but it messes up signing
|
|
82
|
-
headers = { 'content-type' => '' }
|
|
83
|
-
|
|
84
|
-
# headers must have string values (net http calls .strip on them)
|
|
85
|
-
request.headers.each_pair do |key,value|
|
|
86
|
-
headers[key] = value.to_s
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
opts[:headers] = headers
|
|
90
|
-
|
|
91
|
-
begin
|
|
92
|
-
http_response = self.class.send(method, url, opts)
|
|
93
|
-
rescue Timeout::Error, Errno::ETIMEDOUT => e
|
|
94
|
-
response.timeout = true
|
|
95
|
-
else
|
|
96
|
-
response.body = http_response.body
|
|
97
|
-
response.status = http_response.code.to_i
|
|
98
|
-
response.headers = http_response.to_hash
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
end
|