aws-sdk-core 3.185.1 → 3.240.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +705 -0
- data/VERSION +1 -1
- data/lib/aws-defaults.rb +4 -1
- data/lib/aws-sdk-core/arn.rb +1 -3
- data/lib/aws-sdk-core/assume_role_credentials.rb +21 -13
- data/lib/aws-sdk-core/assume_role_web_identity_credentials.rb +16 -9
- data/lib/aws-sdk-core/binary/decode_handler.rb +3 -9
- data/lib/aws-sdk-core/binary/encode_handler.rb +1 -1
- data/lib/aws-sdk-core/binary/event_builder.rb +34 -37
- data/lib/aws-sdk-core/binary/event_stream_decoder.rb +1 -0
- data/lib/aws-sdk-core/binary/event_stream_encoder.rb +4 -3
- data/lib/aws-sdk-core/cbor/decoder.rb +308 -0
- data/lib/aws-sdk-core/cbor/encoder.rb +243 -0
- data/lib/aws-sdk-core/cbor.rb +53 -0
- data/lib/aws-sdk-core/client_side_monitoring.rb +9 -0
- data/lib/aws-sdk-core/client_stubs.rb +39 -55
- data/lib/aws-sdk-core/credential_provider.rb +5 -1
- data/lib/aws-sdk-core/credential_provider_chain.rb +101 -25
- data/lib/aws-sdk-core/credentials.rb +19 -6
- data/lib/aws-sdk-core/ec2_metadata.rb +1 -1
- data/lib/aws-sdk-core/ecs_credentials.rb +92 -24
- data/lib/aws-sdk-core/endpoints/endpoint.rb +3 -1
- data/lib/aws-sdk-core/endpoints/matchers.rb +8 -10
- data/lib/aws-sdk-core/endpoints.rb +101 -21
- data/lib/aws-sdk-core/error_handler.rb +46 -0
- data/lib/aws-sdk-core/errors.rb +16 -4
- data/lib/aws-sdk-core/event_emitter.rb +1 -17
- data/lib/aws-sdk-core/instance_profile_credentials.rb +168 -155
- data/lib/aws-sdk-core/json/builder.rb +8 -1
- data/lib/aws-sdk-core/json/error_handler.rb +29 -13
- data/lib/aws-sdk-core/json/handler.rb +13 -6
- data/lib/aws-sdk-core/json/json_engine.rb +3 -1
- data/lib/aws-sdk-core/json/oj_engine.rb +7 -1
- data/lib/aws-sdk-core/json/parser.rb +32 -2
- data/lib/aws-sdk-core/json.rb +43 -14
- data/lib/aws-sdk-core/log/param_filter.rb +2 -2
- data/lib/aws-sdk-core/log/param_formatter.rb +7 -3
- data/lib/aws-sdk-core/log.rb +10 -0
- data/lib/aws-sdk-core/login_credentials.rb +229 -0
- data/lib/aws-sdk-core/lru_cache.rb +75 -0
- data/lib/aws-sdk-core/pageable_response.rb +1 -1
- data/lib/aws-sdk-core/param_validator.rb +7 -2
- data/lib/aws-sdk-core/plugins/bearer_authorization.rb +2 -0
- data/lib/aws-sdk-core/plugins/checksum_algorithm.rb +347 -168
- data/lib/aws-sdk-core/plugins/client_metrics_plugin.rb +1 -1
- data/lib/aws-sdk-core/plugins/client_metrics_send_plugin.rb +14 -2
- data/lib/aws-sdk-core/plugins/credentials_configuration.rb +78 -56
- data/lib/aws-sdk-core/plugins/endpoint_pattern.rb +40 -32
- data/lib/aws-sdk-core/plugins/global_configuration.rb +8 -9
- data/lib/aws-sdk-core/plugins/http_checksum.rb +3 -8
- data/lib/aws-sdk-core/plugins/invocation_id.rb +1 -11
- data/lib/aws-sdk-core/plugins/logging.rb +2 -0
- data/lib/aws-sdk-core/plugins/protocols/api_gateway.rb +3 -1
- data/lib/aws-sdk-core/plugins/protocols/ec2.rb +2 -24
- data/lib/aws-sdk-core/plugins/protocols/json_rpc.rb +6 -8
- data/lib/aws-sdk-core/plugins/protocols/query.rb +4 -2
- data/lib/aws-sdk-core/plugins/protocols/rest_json.rb +3 -15
- data/lib/aws-sdk-core/plugins/protocols/rest_xml.rb +3 -0
- data/lib/aws-sdk-core/plugins/protocols/rpc_v2.rb +17 -0
- data/lib/aws-sdk-core/plugins/regional_endpoint.rb +74 -25
- data/lib/aws-sdk-core/plugins/request_compression.rb +11 -2
- data/lib/aws-sdk-core/plugins/retry_errors.rb +12 -3
- data/lib/aws-sdk-core/plugins/sign.rb +55 -34
- data/lib/aws-sdk-core/plugins/signature_v2.rb +2 -1
- data/lib/aws-sdk-core/plugins/signature_v4.rb +2 -1
- data/lib/aws-sdk-core/plugins/stub_responses.rb +59 -9
- data/lib/aws-sdk-core/plugins/telemetry.rb +75 -0
- data/lib/aws-sdk-core/plugins/transfer_encoding.rb +16 -9
- data/lib/aws-sdk-core/plugins/user_agent.rb +103 -26
- data/lib/aws-sdk-core/plugins.rb +39 -0
- data/lib/aws-sdk-core/process_credentials.rb +48 -29
- data/lib/aws-sdk-core/query/ec2_handler.rb +27 -0
- data/lib/aws-sdk-core/query/ec2_param_builder.rb +5 -7
- data/lib/aws-sdk-core/query/handler.rb +4 -4
- data/lib/aws-sdk-core/query/param_builder.rb +2 -2
- data/lib/aws-sdk-core/query.rb +2 -1
- data/lib/aws-sdk-core/refreshing_credentials.rb +20 -17
- data/lib/aws-sdk-core/resources.rb +8 -0
- data/lib/aws-sdk-core/rest/content_type_handler.rb +60 -0
- data/lib/aws-sdk-core/rest/handler.rb +3 -4
- data/lib/aws-sdk-core/rest/request/body.rb +32 -5
- data/lib/aws-sdk-core/rest/request/endpoint.rb +24 -4
- data/lib/aws-sdk-core/rest/request/headers.rb +15 -7
- data/lib/aws-sdk-core/rest/request/querystring_builder.rb +62 -36
- data/lib/aws-sdk-core/rest/response/body.rb +15 -1
- data/lib/aws-sdk-core/rest/response/header_list_parser.rb +79 -0
- data/lib/aws-sdk-core/rest/response/headers.rb +8 -3
- data/lib/aws-sdk-core/rest.rb +1 -0
- data/lib/aws-sdk-core/rpc_v2/builder.rb +62 -0
- data/lib/aws-sdk-core/rpc_v2/cbor_engine.rb +18 -0
- data/lib/aws-sdk-core/rpc_v2/content_type_handler.rb +47 -0
- data/lib/aws-sdk-core/rpc_v2/error_handler.rb +95 -0
- data/lib/aws-sdk-core/rpc_v2/handler.rb +79 -0
- data/lib/aws-sdk-core/rpc_v2/parser.rb +98 -0
- data/lib/aws-sdk-core/rpc_v2.rb +69 -0
- data/lib/aws-sdk-core/shared_config.rb +110 -22
- data/lib/aws-sdk-core/shared_credentials.rb +1 -7
- data/lib/aws-sdk-core/sso_credentials.rb +5 -2
- data/lib/aws-sdk-core/static_token_provider.rb +1 -2
- data/lib/aws-sdk-core/stubbing/protocols/ec2.rb +12 -11
- data/lib/aws-sdk-core/stubbing/protocols/json.rb +11 -10
- data/lib/aws-sdk-core/stubbing/protocols/query.rb +7 -6
- data/lib/aws-sdk-core/stubbing/protocols/rest.rb +2 -1
- data/lib/aws-sdk-core/stubbing/protocols/rest_json.rb +9 -8
- data/lib/aws-sdk-core/stubbing/protocols/rest_xml.rb +6 -5
- data/lib/aws-sdk-core/stubbing/protocols/rpc_v2.rb +39 -0
- data/lib/aws-sdk-core/stubbing.rb +22 -0
- data/lib/aws-sdk-core/telemetry/base.rb +177 -0
- data/lib/aws-sdk-core/telemetry/no_op.rb +70 -0
- data/lib/aws-sdk-core/telemetry/otel.rb +235 -0
- data/lib/aws-sdk-core/telemetry/span_kind.rb +22 -0
- data/lib/aws-sdk-core/telemetry/span_status.rb +59 -0
- data/lib/aws-sdk-core/telemetry.rb +78 -0
- data/lib/aws-sdk-core/token.rb +3 -3
- data/lib/aws-sdk-core/token_provider.rb +4 -0
- data/lib/aws-sdk-core/token_provider_chain.rb +2 -6
- data/lib/aws-sdk-core/util.rb +41 -1
- data/lib/aws-sdk-core/waiters/poller.rb +10 -5
- data/lib/aws-sdk-core/xml/builder.rb +17 -9
- data/lib/aws-sdk-core/xml/error_handler.rb +35 -43
- data/lib/aws-sdk-core/xml/parser/frame.rb +4 -20
- data/lib/aws-sdk-core/xml/parser/stack.rb +2 -0
- data/lib/aws-sdk-core/xml/parser.rb +2 -6
- data/lib/aws-sdk-core.rb +86 -107
- data/lib/aws-sdk-signin/client.rb +604 -0
- data/lib/aws-sdk-signin/client_api.rb +119 -0
- data/lib/aws-sdk-signin/customizations.rb +1 -0
- data/lib/aws-sdk-signin/endpoint_parameters.rb +69 -0
- data/lib/aws-sdk-signin/endpoint_provider.rb +59 -0
- data/lib/aws-sdk-signin/endpoints.rb +20 -0
- data/lib/aws-sdk-signin/errors.rb +122 -0
- data/lib/aws-sdk-signin/plugins/endpoints.rb +77 -0
- data/lib/aws-sdk-signin/resource.rb +26 -0
- data/lib/aws-sdk-signin/types.rb +299 -0
- data/lib/aws-sdk-signin.rb +63 -0
- data/lib/aws-sdk-sso/client.rb +189 -96
- data/lib/aws-sdk-sso/client_api.rb +7 -0
- data/lib/aws-sdk-sso/endpoint_parameters.rb +13 -10
- data/lib/aws-sdk-sso/endpoint_provider.rb +16 -20
- data/lib/aws-sdk-sso/endpoints.rb +2 -54
- data/lib/aws-sdk-sso/plugins/endpoints.rb +23 -22
- data/lib/aws-sdk-sso/types.rb +1 -0
- data/lib/aws-sdk-sso.rb +15 -11
- data/lib/aws-sdk-ssooidc/client.rb +609 -129
- data/lib/aws-sdk-ssooidc/client_api.rb +94 -1
- data/lib/aws-sdk-ssooidc/endpoint_parameters.rb +13 -10
- data/lib/aws-sdk-ssooidc/endpoint_provider.rb +16 -20
- data/lib/aws-sdk-ssooidc/endpoints.rb +2 -40
- data/lib/aws-sdk-ssooidc/errors.rb +62 -0
- data/lib/aws-sdk-ssooidc/plugins/endpoints.rb +23 -20
- data/lib/aws-sdk-ssooidc/types.rb +419 -53
- data/lib/aws-sdk-ssooidc.rb +15 -11
- data/lib/aws-sdk-sts/client.rb +537 -156
- data/lib/aws-sdk-sts/client_api.rb +108 -8
- data/lib/aws-sdk-sts/customizations.rb +5 -2
- data/lib/aws-sdk-sts/endpoint_parameters.rb +15 -14
- data/lib/aws-sdk-sts/endpoint_provider.rb +52 -57
- data/lib/aws-sdk-sts/endpoints.rb +2 -118
- data/lib/aws-sdk-sts/errors.rb +79 -0
- data/lib/aws-sdk-sts/plugins/endpoints.rb +23 -30
- data/lib/aws-sdk-sts/presigner.rb +3 -7
- data/lib/aws-sdk-sts/types.rb +361 -35
- data/lib/aws-sdk-sts.rb +15 -11
- data/lib/seahorse/client/async_base.rb +4 -5
- data/lib/seahorse/client/async_response.rb +19 -0
- data/lib/seahorse/client/base.rb +18 -21
- data/lib/seahorse/client/h2/connection.rb +18 -28
- data/lib/seahorse/client/h2/handler.rb +19 -3
- data/lib/seahorse/client/handler.rb +1 -1
- data/lib/seahorse/client/http/response.rb +1 -1
- data/lib/seahorse/client/net_http/connection_pool.rb +15 -12
- data/lib/seahorse/client/net_http/handler.rb +21 -9
- data/lib/seahorse/client/net_http/patches.rb +1 -4
- data/lib/seahorse/client/networking_error.rb +1 -1
- data/lib/seahorse/client/plugin.rb +9 -0
- data/lib/seahorse/client/plugins/endpoint.rb +0 -1
- data/lib/seahorse/client/plugins/h2.rb +4 -4
- data/lib/seahorse/client/plugins/net_http.rb +57 -16
- data/lib/seahorse/client/request_context.rb +9 -2
- data/lib/seahorse/client/response.rb +2 -0
- data/lib/seahorse/model/shapes.rb +2 -2
- data/lib/seahorse/util.rb +2 -1
- data/sig/aws-sdk-core/async_client_stubs.rbs +21 -0
- data/sig/aws-sdk-core/client_stubs.rbs +10 -0
- data/sig/aws-sdk-core/errors.rbs +22 -0
- data/sig/aws-sdk-core/resources/collection.rbs +21 -0
- data/sig/aws-sdk-core/structure.rbs +4 -0
- data/sig/aws-sdk-core/telemetry/base.rbs +46 -0
- data/sig/aws-sdk-core/telemetry/otel.rbs +22 -0
- data/sig/aws-sdk-core/telemetry/span_kind.rbs +15 -0
- data/sig/aws-sdk-core/telemetry/span_status.rbs +24 -0
- data/sig/aws-sdk-core/waiters/errors.rbs +20 -0
- data/sig/aws-sdk-core.rbs +7 -0
- data/sig/seahorse/client/async_base.rbs +18 -0
- data/sig/seahorse/client/base.rbs +25 -0
- data/sig/seahorse/client/handler_builder.rbs +16 -0
- data/sig/seahorse/client/response.rbs +61 -0
- metadata +117 -23
- /data/lib/aws-sdk-core/xml/parser/{engines/libxml.rb → libxml_engine.rb} +0 -0
- /data/lib/aws-sdk-core/xml/parser/{engines/nokogiri.rb → nokogiri_engine.rb} +0 -0
- /data/lib/aws-sdk-core/xml/parser/{engines/oga.rb → oga_engine.rb} +0 -0
- /data/lib/aws-sdk-core/xml/parser/{engines/ox.rb → ox_engine.rb} +0 -0
- /data/lib/aws-sdk-core/xml/parser/{engines/rexml.rb → rexml_engine.rb} +0 -0
|
@@ -4,6 +4,63 @@ module Aws
|
|
|
4
4
|
module Plugins
|
|
5
5
|
# @api private
|
|
6
6
|
class UserAgent < Seahorse::Client::Plugin
|
|
7
|
+
METRICS = Aws::Json.load(<<-METRICS)
|
|
8
|
+
{
|
|
9
|
+
"RESOURCE_MODEL": "A",
|
|
10
|
+
"WAITER": "B",
|
|
11
|
+
"PAGINATOR": "C",
|
|
12
|
+
"RETRY_MODE_LEGACY": "D",
|
|
13
|
+
"RETRY_MODE_STANDARD": "E",
|
|
14
|
+
"RETRY_MODE_ADAPTIVE": "F",
|
|
15
|
+
"S3_TRANSFER": "G",
|
|
16
|
+
"S3_CRYPTO_V1N": "H",
|
|
17
|
+
"S3_CRYPTO_V2": "I",
|
|
18
|
+
"S3_EXPRESS_BUCKET": "J",
|
|
19
|
+
"S3_ACCESS_GRANTS": "K",
|
|
20
|
+
"GZIP_REQUEST_COMPRESSION": "L",
|
|
21
|
+
"PROTOCOL_RPC_V2_CBOR": "M",
|
|
22
|
+
"ENDPOINT_OVERRIDE": "N",
|
|
23
|
+
"ACCOUNT_ID_ENDPOINT": "O",
|
|
24
|
+
"ACCOUNT_ID_MODE_PREFERRED": "P",
|
|
25
|
+
"ACCOUNT_ID_MODE_DISABLED": "Q",
|
|
26
|
+
"ACCOUNT_ID_MODE_REQUIRED": "R",
|
|
27
|
+
"SIGV4A_SIGNING": "S",
|
|
28
|
+
"RESOLVED_ACCOUNT_ID": "T",
|
|
29
|
+
"FLEXIBLE_CHECKSUMS_REQ_CRC32" : "U",
|
|
30
|
+
"FLEXIBLE_CHECKSUMS_REQ_CRC32C" : "V",
|
|
31
|
+
"FLEXIBLE_CHECKSUMS_REQ_CRC64" : "W",
|
|
32
|
+
"FLEXIBLE_CHECKSUMS_REQ_SHA1" : "X",
|
|
33
|
+
"FLEXIBLE_CHECKSUMS_REQ_SHA256" : "Y",
|
|
34
|
+
"FLEXIBLE_CHECKSUMS_REQ_WHEN_SUPPORTED" : "Z",
|
|
35
|
+
"FLEXIBLE_CHECKSUMS_REQ_WHEN_REQUIRED" : "a",
|
|
36
|
+
"FLEXIBLE_CHECKSUMS_RES_WHEN_SUPPORTED" : "b",
|
|
37
|
+
"FLEXIBLE_CHECKSUMS_RES_WHEN_REQUIRED" : "c",
|
|
38
|
+
"DDB_MAPPER": "d",
|
|
39
|
+
"CREDENTIALS_CODE" : "e",
|
|
40
|
+
"CREDENTIALS_ENV_VARS" : "g",
|
|
41
|
+
"CREDENTIALS_ENV_VARS_STS_WEB_ID_TOKEN" : "h",
|
|
42
|
+
"CREDENTIALS_STS_ASSUME_ROLE" : "i",
|
|
43
|
+
"CREDENTIALS_STS_ASSUME_ROLE_WEB_ID" : "k",
|
|
44
|
+
"CREDENTIALS_PROFILE" : "n",
|
|
45
|
+
"CREDENTIALS_PROFILE_SOURCE_PROFILE" : "o",
|
|
46
|
+
"CREDENTIALS_PROFILE_NAMED_PROVIDER" : "p",
|
|
47
|
+
"CREDENTIALS_PROFILE_STS_WEB_ID_TOKEN" : "q",
|
|
48
|
+
"CREDENTIALS_PROFILE_SSO" : "r",
|
|
49
|
+
"CREDENTIALS_SSO" : "s",
|
|
50
|
+
"CREDENTIALS_PROFILE_SSO_LEGACY" : "t",
|
|
51
|
+
"CREDENTIALS_SSO_LEGACY" : "u",
|
|
52
|
+
"CREDENTIALS_PROFILE_PROCESS" : "v",
|
|
53
|
+
"CREDENTIALS_PROCESS" : "w",
|
|
54
|
+
"CREDENTIALS_HTTP" : "z",
|
|
55
|
+
"CREDENTIALS_IMDS" : "0",
|
|
56
|
+
"SSO_LOGIN_DEVICE" : "1",
|
|
57
|
+
"SSO_LOGIN_AUTH" : "2",
|
|
58
|
+
"BEARER_SERVICE_ENV_VARS": "3",
|
|
59
|
+
"CREDENTIALS_PROFILE_LOGIN": "AC",
|
|
60
|
+
"CREDENTIALS_LOGIN": "AD"
|
|
61
|
+
}
|
|
62
|
+
METRICS
|
|
63
|
+
|
|
7
64
|
# @api private
|
|
8
65
|
option(:user_agent_suffix)
|
|
9
66
|
# @api private
|
|
@@ -14,20 +71,27 @@ module Aws
|
|
|
14
71
|
doc_type: 'String',
|
|
15
72
|
docstring: <<-DOCS) do |cfg|
|
|
16
73
|
A unique and opaque application ID that is appended to the
|
|
17
|
-
User-Agent header as app
|
|
18
|
-
maximum length of 50.
|
|
74
|
+
User-Agent header as app/sdk_ua_app_id. It should have a
|
|
75
|
+
maximum length of 50. This variable is sourced from environment
|
|
76
|
+
variable AWS_SDK_UA_APP_ID or the shared config profile attribute sdk_ua_app_id.
|
|
19
77
|
DOCS
|
|
20
78
|
app_id = ENV['AWS_SDK_UA_APP_ID']
|
|
21
79
|
app_id ||= Aws.shared_config.sdk_ua_app_id(profile: cfg.profile)
|
|
22
80
|
app_id
|
|
23
81
|
end
|
|
24
82
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
83
|
+
# Deprecated - must exist for old service gems
|
|
84
|
+
def self.feature(_feature, &block)
|
|
85
|
+
block.call
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def self.metric(*metrics, &block)
|
|
89
|
+
Thread.current[:aws_sdk_core_user_agent_metric] ||= []
|
|
90
|
+
metrics = metrics.map { |metric| METRICS[metric] }.compact
|
|
91
|
+
Thread.current[:aws_sdk_core_user_agent_metric].concat(metrics)
|
|
28
92
|
block.call
|
|
29
93
|
ensure
|
|
30
|
-
Thread.current[:
|
|
94
|
+
Thread.current[:aws_sdk_core_user_agent_metric].pop(metrics.size)
|
|
31
95
|
end
|
|
32
96
|
|
|
33
97
|
# @api private
|
|
@@ -48,15 +112,24 @@ maximum length of 50.
|
|
|
48
112
|
|
|
49
113
|
def to_s
|
|
50
114
|
ua = "aws-sdk-ruby3/#{CORE_GEM_VERSION}"
|
|
51
|
-
ua += ' ua/2.
|
|
52
|
-
|
|
115
|
+
ua += ' ua/2.1'
|
|
116
|
+
if (api_m = api_metadata)
|
|
117
|
+
ua += " #{api_m}"
|
|
118
|
+
end
|
|
53
119
|
ua += " #{os_metadata}"
|
|
54
120
|
ua += " #{language_metadata}"
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
121
|
+
if (env_m = env_metadata)
|
|
122
|
+
ua += " #{env_m}"
|
|
123
|
+
end
|
|
124
|
+
if (app_id_m = app_id_metadata)
|
|
125
|
+
ua += " #{app_id_m}"
|
|
126
|
+
end
|
|
127
|
+
if (framework_m = framework_metadata)
|
|
128
|
+
ua += " #{framework_m}"
|
|
129
|
+
end
|
|
130
|
+
if (metric_m = metric_metadata)
|
|
131
|
+
ua += " #{metric_m}"
|
|
132
|
+
end
|
|
60
133
|
if @context.config.user_agent_suffix
|
|
61
134
|
ua += " #{@context.config.user_agent_suffix}"
|
|
62
135
|
end
|
|
@@ -92,7 +165,6 @@ maximum length of 50.
|
|
|
92
165
|
local_version = Gem::Platform.local.version
|
|
93
166
|
metadata += "##{local_version}" if local_version
|
|
94
167
|
metadata += " md/#{RbConfig::CONFIG['host_cpu']}"
|
|
95
|
-
metadata
|
|
96
168
|
end
|
|
97
169
|
|
|
98
170
|
# Used to be RUBY_ENGINE/RUBY_VERSION
|
|
@@ -106,11 +178,7 @@ maximum length of 50.
|
|
|
106
178
|
"exec-env/#{execution_env}"
|
|
107
179
|
end
|
|
108
180
|
|
|
109
|
-
def
|
|
110
|
-
"cfg/retry-mode##{@context.config.retry_mode}"
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
def app_id
|
|
181
|
+
def app_id_metadata
|
|
114
182
|
return unless (app_id = @context.config.sdk_ua_app_id)
|
|
115
183
|
|
|
116
184
|
# Sanitize and only allow these characters
|
|
@@ -118,12 +186,6 @@ maximum length of 50.
|
|
|
118
186
|
"app/#{app_id}"
|
|
119
187
|
end
|
|
120
188
|
|
|
121
|
-
def feature_metadata
|
|
122
|
-
return unless Thread.current[:aws_sdk_core_user_agent_feature]
|
|
123
|
-
|
|
124
|
-
Thread.current[:aws_sdk_core_user_agent_feature].join(' ')
|
|
125
|
-
end
|
|
126
|
-
|
|
127
189
|
def framework_metadata
|
|
128
190
|
if (frameworks_cfg = @context.config.user_agent_frameworks).empty?
|
|
129
191
|
return
|
|
@@ -140,10 +202,25 @@ maximum length of 50.
|
|
|
140
202
|
end
|
|
141
203
|
frameworks.map { |n, v| "lib/#{n}##{v}" }.join(' ')
|
|
142
204
|
end
|
|
205
|
+
|
|
206
|
+
def metric_metadata
|
|
207
|
+
if Thread.current[:aws_sdk_core_user_agent_metric].nil? ||
|
|
208
|
+
Thread.current[:aws_sdk_core_user_agent_metric].empty?
|
|
209
|
+
return
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
metrics = Thread.current[:aws_sdk_core_user_agent_metric].join(',')
|
|
213
|
+
# Metric metadata is limited to 1024 bytes
|
|
214
|
+
return "m/#{metrics}" if metrics.bytesize <= 1024
|
|
215
|
+
|
|
216
|
+
# Removes the last unfinished metric
|
|
217
|
+
"m/#{metrics[0...metrics[0..1024].rindex(',')]}"
|
|
218
|
+
end
|
|
143
219
|
end
|
|
144
220
|
end
|
|
145
221
|
|
|
146
|
-
|
|
222
|
+
# Priority set to 5 in order to add user agent as late as possible after signing
|
|
223
|
+
handler(Handler, step: :sign, priority: 5)
|
|
147
224
|
end
|
|
148
225
|
end
|
|
149
226
|
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Aws
|
|
4
|
+
# setup autoloading for Plugins
|
|
5
|
+
# Most plugins are required explicitly from service clients
|
|
6
|
+
# but users may reference them outside of client usage.
|
|
7
|
+
module Plugins
|
|
8
|
+
autoload :ApiKey, 'aws-sdk-core/plugins/api_key'
|
|
9
|
+
autoload :BearerAuthorization, 'aws-sdk-core/plugins/bearer_authorization'
|
|
10
|
+
autoload :ChecksumAlgorithm, 'aws-sdk-core/plugins/checksum_algorithm'
|
|
11
|
+
autoload :ClientMetricsPlugin, 'aws-sdk-core/plugins/client_metrics_plugin'
|
|
12
|
+
autoload :ClientMetricsSendPlugin, 'aws-sdk-core/plugins/client_metrics_send_plugin'
|
|
13
|
+
autoload :CredentialsConfiguration, 'aws-sdk-core/plugins/credentials_configuration'
|
|
14
|
+
autoload :DefaultsMode, 'aws-sdk-core/plugins/defaults_mode'
|
|
15
|
+
autoload :EndpointDiscovery, 'aws-sdk-core/plugins/endpoint_discovery'
|
|
16
|
+
autoload :EndpointPattern, 'aws-sdk-core/plugins/endpoint_pattern'
|
|
17
|
+
autoload :EventStreamConfiguration, 'aws-sdk-core/plugins/event_stream_configuration'
|
|
18
|
+
autoload :GlobalConfiguration, 'aws-sdk-core/plugins/global_configuration'
|
|
19
|
+
autoload :HelpfulSocketErrors, 'aws-sdk-core/plugins/helpful_socket_errors'
|
|
20
|
+
autoload :HttpChecksum, 'aws-sdk-core/plugins/http_checksum'
|
|
21
|
+
autoload :IdempotencyToken, 'aws-sdk-core/plugins/idempotency_token'
|
|
22
|
+
autoload :InvocationId, 'aws-sdk-core/plugins/invocation_id'
|
|
23
|
+
autoload :JsonvalueConverter, 'aws-sdk-core/plugins/jsonvalue_converter'
|
|
24
|
+
autoload :Logging, 'aws-sdk-core/plugins/logging'
|
|
25
|
+
autoload :ParamConverter, 'aws-sdk-core/plugins/param_converter'
|
|
26
|
+
autoload :ParamValidator, 'aws-sdk-core/plugins/param_validator'
|
|
27
|
+
autoload :RecursionDetection, 'aws-sdk-core/plugins/recursion_detection'
|
|
28
|
+
autoload :RegionalEndpoint, 'aws-sdk-core/plugins/regional_endpoint'
|
|
29
|
+
autoload :RequestCompression, 'aws-sdk-core/plugins/request_compression'
|
|
30
|
+
autoload :ResponsePaging, 'aws-sdk-core/plugins/response_paging'
|
|
31
|
+
autoload :RetryErrors, 'aws-sdk-core/plugins/retry_errors'
|
|
32
|
+
autoload :Sign, 'aws-sdk-core/plugins/sign'
|
|
33
|
+
autoload :SignatureV4, 'aws-sdk-core/plugins/signature_v4'
|
|
34
|
+
autoload :StubResponses, 'aws-sdk-core/plugins/stub_responses'
|
|
35
|
+
autoload :Telemetry, 'aws-sdk-core/plugins/telemetry'
|
|
36
|
+
autoload :TransferEncoding, 'aws-sdk-core/plugins/transfer_encoding'
|
|
37
|
+
autoload :UserAgent, 'aws-sdk-core/plugins/user_agent'
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -2,9 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
module Aws
|
|
4
4
|
# A credential provider that executes a given process and attempts
|
|
5
|
-
# to read its stdout to
|
|
5
|
+
# to read its stdout to receive a JSON payload containing the credentials.
|
|
6
6
|
#
|
|
7
|
-
# credentials = Aws::ProcessCredentials.new('/usr/bin/credential_proc')
|
|
7
|
+
# credentials = Aws::ProcessCredentials.new(['/usr/bin/credential_proc'])
|
|
8
|
+
# ec2 = Aws::EC2::Client.new(credentials: credentials)
|
|
9
|
+
#
|
|
10
|
+
# Arguments should be provided as strings in the array, for example:
|
|
11
|
+
#
|
|
12
|
+
# process = ['/usr/bin/credential_proc', 'arg1', 'arg2']
|
|
13
|
+
# credentials = Aws::ProcessCredentials.new(process)
|
|
8
14
|
# ec2 = Aws::EC2::Client.new(credentials: credentials)
|
|
9
15
|
#
|
|
10
16
|
# Automatically handles refreshing credentials if an Expiration time is
|
|
@@ -19,56 +25,69 @@ module Aws
|
|
|
19
25
|
# Creates a new ProcessCredentials object, which allows an
|
|
20
26
|
# external process to be used as a credential provider.
|
|
21
27
|
#
|
|
22
|
-
# @param [String] process
|
|
23
|
-
#
|
|
28
|
+
# @param [Array<String>, String] process An array of strings including
|
|
29
|
+
# the process name and its arguments to execute, or a single string to be
|
|
30
|
+
# executed by the shell (deprecated and insecure).
|
|
24
31
|
def initialize(process)
|
|
32
|
+
if process.is_a?(String)
|
|
33
|
+
warn('Passing a single string to Aws::ProcessCredentials.new '\
|
|
34
|
+
'is insecure, please use use an array of system arguments instead')
|
|
35
|
+
end
|
|
25
36
|
@process = process
|
|
26
|
-
@credentials = credentials_from_process
|
|
37
|
+
@credentials = credentials_from_process
|
|
27
38
|
@async_refresh = false
|
|
28
|
-
|
|
39
|
+
@metrics = ['CREDENTIALS_PROCESS']
|
|
29
40
|
super
|
|
30
41
|
end
|
|
31
42
|
|
|
32
43
|
private
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
44
|
+
|
|
45
|
+
def credentials_from_process
|
|
46
|
+
r, w = IO.pipe
|
|
47
|
+
success = system(*@process, out: w)
|
|
48
|
+
w.close
|
|
49
|
+
raw_out = r.read
|
|
50
|
+
r.close
|
|
51
|
+
|
|
52
|
+
unless success
|
|
53
|
+
raise Errors::InvalidProcessCredentialsPayload.new(
|
|
54
|
+
'credential_process provider failure, the credential process had '\
|
|
55
|
+
'non zero exit status and failed to provide credentials'
|
|
56
|
+
)
|
|
39
57
|
end
|
|
40
58
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
raise Errors::InvalidProcessCredentialsPayload.new("Invalid JSON response")
|
|
46
|
-
end
|
|
47
|
-
payload_version = creds_json['Version']
|
|
48
|
-
if payload_version == 1
|
|
49
|
-
_parse_payload_format_v1(creds_json)
|
|
50
|
-
else
|
|
51
|
-
raise Errors::InvalidProcessCredentialsPayload.new("Invalid version #{payload_version} for credentials payload")
|
|
52
|
-
end
|
|
53
|
-
else
|
|
54
|
-
raise Errors::InvalidProcessCredentialsPayload.new('credential_process provider failure, the credential process had non zero exit status and failed to provide credentials')
|
|
59
|
+
begin
|
|
60
|
+
creds_json = Aws::Json.load(raw_out)
|
|
61
|
+
rescue Aws::Json::ParseError
|
|
62
|
+
raise Errors::InvalidProcessCredentialsPayload.new('Invalid JSON response')
|
|
55
63
|
end
|
|
64
|
+
|
|
65
|
+
payload_version = creds_json['Version']
|
|
66
|
+
return _parse_payload_format_v1(creds_json) if payload_version == 1
|
|
67
|
+
|
|
68
|
+
raise Errors::InvalidProcessCredentialsPayload.new(
|
|
69
|
+
"Invalid version #{payload_version} for credentials payload"
|
|
70
|
+
)
|
|
56
71
|
end
|
|
57
72
|
|
|
58
73
|
def _parse_payload_format_v1(creds_json)
|
|
59
74
|
creds = Credentials.new(
|
|
60
75
|
creds_json['AccessKeyId'],
|
|
61
76
|
creds_json['SecretAccessKey'],
|
|
62
|
-
creds_json['SessionToken']
|
|
77
|
+
creds_json['SessionToken'],
|
|
78
|
+
account_id: creds_json['AccountId']
|
|
63
79
|
)
|
|
64
80
|
|
|
65
81
|
@expiration = creds_json['Expiration'] ? Time.iso8601(creds_json['Expiration']) : nil
|
|
66
82
|
return creds if creds.set?
|
|
67
|
-
|
|
83
|
+
|
|
84
|
+
raise Errors::InvalidProcessCredentialsPayload.new(
|
|
85
|
+
'Invalid payload for JSON credentials version 1'
|
|
86
|
+
)
|
|
68
87
|
end
|
|
69
88
|
|
|
70
89
|
def refresh
|
|
71
|
-
@credentials = credentials_from_process
|
|
90
|
+
@credentials = credentials_from_process
|
|
72
91
|
end
|
|
73
92
|
|
|
74
93
|
def near_expiration?(expiration_length)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Aws
|
|
4
|
+
# @api private
|
|
5
|
+
module Query
|
|
6
|
+
class EC2Handler < Aws::Query::Handler
|
|
7
|
+
|
|
8
|
+
def apply_params(param_list, params, rules)
|
|
9
|
+
Aws::Query::EC2ParamBuilder.new(param_list).apply(rules, params)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def parse_xml(context)
|
|
13
|
+
if (rules = context.operation.output)
|
|
14
|
+
parser = Xml::Parser.new(rules)
|
|
15
|
+
parser.parse(xml(context)) do |path, value|
|
|
16
|
+
if path.size == 2 && path.last == 'requestId'
|
|
17
|
+
context.metadata[:request_id] = value
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
else
|
|
21
|
+
EmptyStructure.new
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -31,13 +31,11 @@ module Aws
|
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
def list(ref, values, prefix)
|
|
34
|
-
if values.empty?
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
format(member_ref, value, "#{prefix}.#{n+1}")
|
|
40
|
-
end
|
|
34
|
+
return if values.empty?
|
|
35
|
+
|
|
36
|
+
member_ref = ref.shape.member
|
|
37
|
+
values.each.with_index do |value, n|
|
|
38
|
+
format(member_ref, value, "#{prefix}.#{n + 1}")
|
|
41
39
|
end
|
|
42
40
|
end
|
|
43
41
|
|
|
@@ -27,13 +27,13 @@ module Aws
|
|
|
27
27
|
# @return [Seahorse::Client::Response]
|
|
28
28
|
def call(context)
|
|
29
29
|
build_request(context)
|
|
30
|
-
@handler.call(context).on_success do |
|
|
31
|
-
|
|
30
|
+
@handler.call(context).on_success do |resp|
|
|
31
|
+
resp.error = nil
|
|
32
32
|
parsed = parse_xml(context)
|
|
33
33
|
if parsed.nil? || parsed == EmptyStructure
|
|
34
|
-
|
|
34
|
+
resp.data = EmptyStructure.new
|
|
35
35
|
else
|
|
36
|
-
|
|
36
|
+
resp.data = parsed
|
|
37
37
|
end
|
|
38
38
|
end
|
|
39
39
|
end
|
|
@@ -36,7 +36,7 @@ module Aws
|
|
|
36
36
|
return
|
|
37
37
|
end
|
|
38
38
|
if flat?(ref)
|
|
39
|
-
if name = query_name(
|
|
39
|
+
if (name = query_name(ref))
|
|
40
40
|
parts = prefix.split('.')
|
|
41
41
|
parts.pop
|
|
42
42
|
parts.push(name)
|
|
@@ -82,7 +82,7 @@ module Aws
|
|
|
82
82
|
end
|
|
83
83
|
|
|
84
84
|
def flat?(ref)
|
|
85
|
-
ref.shape.flattened
|
|
85
|
+
ref[:flattened] || ref.shape.flattened
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
def timestamp(ref, value)
|
data/lib/aws-sdk-core/query.rb
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'query/ec2_param_builder'
|
|
4
3
|
require_relative 'query/handler'
|
|
4
|
+
require_relative 'query/ec2_handler'
|
|
5
5
|
require_relative 'query/param'
|
|
6
6
|
require_relative 'query/param_builder'
|
|
7
|
+
require_relative 'query/ec2_param_builder'
|
|
7
8
|
require_relative 'query/param_list'
|
|
@@ -1,30 +1,26 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'thread'
|
|
4
|
-
|
|
5
3
|
module Aws
|
|
6
|
-
|
|
7
4
|
# Base class used credential classes that can be refreshed. This
|
|
8
5
|
# provides basic refresh logic in a thread-safe manner. Classes mixing in
|
|
9
|
-
# this module are expected to implement a
|
|
6
|
+
# this module are expected to implement a `#refresh` method that populates
|
|
10
7
|
# the following instance variables:
|
|
11
8
|
#
|
|
12
|
-
# * `@
|
|
13
|
-
# * `@
|
|
14
|
-
# * `@session_token`
|
|
15
|
-
# * `@expiration`
|
|
9
|
+
# * `@credentials` ({Credentials})
|
|
10
|
+
# * `@expiration` (Time)
|
|
16
11
|
#
|
|
17
|
-
# @api private
|
|
18
12
|
module RefreshingCredentials
|
|
19
|
-
|
|
20
13
|
SYNC_EXPIRATION_LENGTH = 300 # 5 minutes
|
|
21
14
|
ASYNC_EXPIRATION_LENGTH = 600 # 10 minutes
|
|
22
15
|
|
|
23
16
|
CLIENT_EXCLUDE_OPTIONS = Set.new([:before_refresh]).freeze
|
|
24
17
|
|
|
18
|
+
# @param [Hash] options
|
|
19
|
+
# @option options [Proc] :before_refresh A Proc called before credentials are refreshed.
|
|
20
|
+
# It accepts `self` as the only argument.
|
|
25
21
|
def initialize(options = {})
|
|
26
22
|
@mutex = Mutex.new
|
|
27
|
-
@before_refresh = options.delete(:before_refresh) if Hash
|
|
23
|
+
@before_refresh = options.delete(:before_refresh) if options.is_a?(Hash)
|
|
28
24
|
|
|
29
25
|
@before_refresh.call(self) if @before_refresh
|
|
30
26
|
refresh
|
|
@@ -48,26 +44,34 @@ module Aws
|
|
|
48
44
|
|
|
49
45
|
private
|
|
50
46
|
|
|
47
|
+
def sync_expiration_length
|
|
48
|
+
self.class::SYNC_EXPIRATION_LENGTH
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def async_expiration_length
|
|
52
|
+
self.class::ASYNC_EXPIRATION_LENGTH
|
|
53
|
+
end
|
|
54
|
+
|
|
51
55
|
# Refreshes credentials asynchronously and synchronously.
|
|
52
56
|
# If we are near to expiration, block while getting new credentials.
|
|
53
57
|
# Otherwise, if we're approaching expiration, use the existing credentials
|
|
54
58
|
# but attempt a refresh in the background.
|
|
55
59
|
def refresh_if_near_expiration!
|
|
56
|
-
#
|
|
60
|
+
# NOTE: This check is an optimization. Rather than acquire the mutex on every #refresh_if_near_expiration
|
|
57
61
|
# call, we check before doing so, and then we check within the mutex to avoid a race condition.
|
|
58
62
|
# See issue: https://github.com/aws/aws-sdk-ruby/issues/2641 for more info.
|
|
59
|
-
if near_expiration?(
|
|
63
|
+
if near_expiration?(sync_expiration_length)
|
|
60
64
|
@mutex.synchronize do
|
|
61
|
-
if near_expiration?(
|
|
65
|
+
if near_expiration?(sync_expiration_length)
|
|
62
66
|
@before_refresh.call(self) if @before_refresh
|
|
63
67
|
refresh
|
|
64
68
|
end
|
|
65
69
|
end
|
|
66
|
-
elsif @async_refresh && near_expiration?(
|
|
70
|
+
elsif @async_refresh && near_expiration?(async_expiration_length)
|
|
67
71
|
unless @mutex.locked?
|
|
68
72
|
Thread.new do
|
|
69
73
|
@mutex.synchronize do
|
|
70
|
-
if near_expiration?(
|
|
74
|
+
if near_expiration?(async_expiration_length)
|
|
71
75
|
@before_refresh.call(self) if @before_refresh
|
|
72
76
|
refresh
|
|
73
77
|
end
|
|
@@ -85,6 +89,5 @@ module Aws
|
|
|
85
89
|
true
|
|
86
90
|
end
|
|
87
91
|
end
|
|
88
|
-
|
|
89
92
|
end
|
|
90
93
|
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Aws
|
|
4
|
+
module Rest
|
|
5
|
+
# NOTE: headers could be already populated if specified on input shape
|
|
6
|
+
class ContentTypeHandler < Seahorse::Client::Handler
|
|
7
|
+
def call(context)
|
|
8
|
+
if eventstream?(context)
|
|
9
|
+
context.http_request.headers['Content-Type'] ||=
|
|
10
|
+
'application/vnd.amazon.eventstream'
|
|
11
|
+
elsif (payload = context.operation.input[:payload_member])
|
|
12
|
+
case payload.shape
|
|
13
|
+
when Seahorse::Model::Shapes::BlobShape
|
|
14
|
+
context.http_request.headers['Content-Type'] ||=
|
|
15
|
+
'application/octet-stream'
|
|
16
|
+
when Seahorse::Model::Shapes::StringShape
|
|
17
|
+
context.http_request.headers['Content-Type'] ||=
|
|
18
|
+
'text/plain'
|
|
19
|
+
else
|
|
20
|
+
apply_default_content_type(context)
|
|
21
|
+
end
|
|
22
|
+
elsif (body = context.http_request.body) &&
|
|
23
|
+
(!body.respond_to?(:size) || non_empty_body?(body))
|
|
24
|
+
apply_default_content_type(context)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
@handler.call(context)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
def non_empty_body?(body)
|
|
33
|
+
body.respond_to?(:size) && body.size.positive?
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def eventstream?(context)
|
|
37
|
+
context.operation.input.shape.members.each do |_, ref|
|
|
38
|
+
return true if ref.eventstream
|
|
39
|
+
end
|
|
40
|
+
false
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# content-type defaults as noted here:
|
|
44
|
+
# rest-json: https://smithy.io/2.0/aws/protocols/aws-restxml-protocol.html#content-type
|
|
45
|
+
# rest-xml: https://smithy.io/2.0/aws/protocols/aws-restxml-protocol.html#content-type
|
|
46
|
+
def apply_default_content_type(context)
|
|
47
|
+
protocol = context.config.api.metadata['protocol']
|
|
48
|
+
case protocol
|
|
49
|
+
when 'rest-json'
|
|
50
|
+
context.http_request.headers['Content-Type'] ||=
|
|
51
|
+
'application/json'
|
|
52
|
+
when 'rest-xml'
|
|
53
|
+
context.http_request.headers['Content-Type'] ||=
|
|
54
|
+
'application/xml'
|
|
55
|
+
else raise "Unsupported protocol #{protocol}"
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -7,10 +7,9 @@ module Aws
|
|
|
7
7
|
|
|
8
8
|
def call(context)
|
|
9
9
|
Rest::Request::Builder.new.apply(context)
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
resp
|
|
10
|
+
response = @handler.call(context)
|
|
11
|
+
response.on(200..299) { |resp| Response::Parser.new.apply(resp) }
|
|
12
|
+
response.on(200..599) { |_resp| apply_request_id(context) }
|
|
14
13
|
end
|
|
15
14
|
|
|
16
15
|
private
|