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
|
@@ -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
|
-
|
|
20
|
-
|
|
17
|
+
# @private
|
|
18
|
+
module ConfiguredOptionGrammars
|
|
21
19
|
|
|
22
|
-
|
|
20
|
+
module ClassMethods
|
|
23
21
|
|
|
24
|
-
|
|
22
|
+
include ConfiguredGrammars::ClassMethods
|
|
25
23
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
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
|
|
18
|
+
module ConfiguredXmlGrammars
|
|
19
|
+
|
|
20
|
+
# @private
|
|
21
|
+
module ClassMethods
|
|
24
22
|
|
|
25
|
-
|
|
23
|
+
include ConfiguredGrammars::ClassMethods
|
|
26
24
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
-
|
|
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
|