aws-sdk-core 3.197.0 → 3.220.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 +297 -0
- data/VERSION +1 -1
- data/lib/aws-defaults/default_configuration.rb +1 -2
- 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 +12 -5
- data/lib/aws-sdk-core/assume_role_web_identity_credentials.rb +13 -7
- data/lib/aws-sdk-core/binary/decode_handler.rb +3 -4
- data/lib/aws-sdk-core/binary/encode_handler.rb +1 -1
- 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 +8 -7
- data/lib/aws-sdk-core/credential_provider_chain.rb +13 -6
- data/lib/aws-sdk-core/credentials.rb +13 -6
- data/lib/aws-sdk-core/endpoints/endpoint.rb +3 -1
- data/lib/aws-sdk-core/endpoints/matchers.rb +6 -9
- data/lib/aws-sdk-core/endpoints.rb +74 -18
- data/lib/aws-sdk-core/error_handler.rb +41 -0
- data/lib/aws-sdk-core/errors.rb +9 -0
- data/lib/aws-sdk-core/json/error_handler.rb +8 -9
- data/lib/aws-sdk-core/json/handler.rb +6 -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 +2 -0
- 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/param_validator.rb +1 -1
- data/lib/aws-sdk-core/plugins/bearer_authorization.rb +2 -0
- data/lib/aws-sdk-core/plugins/checksum_algorithm.rb +332 -169
- data/lib/aws-sdk-core/plugins/credentials_configuration.rb +7 -3
- data/lib/aws-sdk-core/plugins/global_configuration.rb +8 -9
- data/lib/aws-sdk-core/plugins/http_checksum.rb +2 -8
- 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 +4 -3
- data/lib/aws-sdk-core/plugins/protocols/rest_xml.rb +5 -1
- 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/retry_errors.rb +0 -1
- data/lib/aws-sdk-core/plugins/sign.rb +13 -11
- 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 +29 -2
- 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 +26 -8
- data/lib/aws-sdk-core/plugins.rb +39 -0
- data/lib/aws-sdk-core/process_credentials.rb +47 -28
- data/lib/aws-sdk-core/query/ec2_handler.rb +27 -0
- data/lib/aws-sdk-core/query/handler.rb +4 -4
- data/lib/aws-sdk-core/query.rb +2 -1
- data/lib/aws-sdk-core/resources.rb +8 -0
- data/lib/aws-sdk-core/rest/{request/content_type.rb → content_type_handler.rb} +1 -1
- data/lib/aws-sdk-core/rest/handler.rb +3 -4
- data/lib/aws-sdk-core/rest/request/endpoint.rb +3 -1
- data/lib/aws-sdk-core/rest/request/headers.rb +2 -2
- data/lib/aws-sdk-core/rest.rb +1 -1
- 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 +85 -0
- data/lib/aws-sdk-core/rpc_v2/handler.rb +79 -0
- data/lib/aws-sdk-core/rpc_v2/parser.rb +90 -0
- data/lib/aws-sdk-core/rpc_v2.rb +69 -0
- data/lib/aws-sdk-core/shared_config.rb +7 -2
- data/lib/aws-sdk-core/shared_credentials.rb +0 -7
- data/lib/aws-sdk-core/sso_credentials.rb +2 -1
- 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/waiters/poller.rb +9 -4
- data/lib/aws-sdk-core/xml/error_handler.rb +11 -37
- data/lib/aws-sdk-core/xml/parser.rb +2 -6
- data/lib/aws-sdk-core.rb +82 -108
- data/lib/aws-sdk-sso/client.rb +99 -37
- data/lib/aws-sdk-sso/client_api.rb +7 -0
- data/lib/aws-sdk-sso/endpoint_parameters.rb +9 -6
- data/lib/aws-sdk-sso/endpoint_provider.rb +14 -18
- data/lib/aws-sdk-sso/endpoints.rb +2 -54
- data/lib/aws-sdk-sso/plugins/endpoints.rb +19 -20
- data/lib/aws-sdk-sso/types.rb +1 -0
- data/lib/aws-sdk-sso.rb +15 -11
- data/lib/aws-sdk-ssooidc/client.rb +123 -55
- data/lib/aws-sdk-ssooidc/client_api.rb +5 -0
- data/lib/aws-sdk-ssooidc/endpoint_parameters.rb +9 -6
- data/lib/aws-sdk-ssooidc/endpoint_provider.rb +14 -18
- data/lib/aws-sdk-ssooidc/endpoints.rb +2 -54
- data/lib/aws-sdk-ssooidc/plugins/endpoints.rb +19 -20
- data/lib/aws-sdk-ssooidc/types.rb +21 -15
- data/lib/aws-sdk-ssooidc.rb +15 -11
- data/lib/aws-sdk-sts/client.rb +307 -89
- data/lib/aws-sdk-sts/client_api.rb +28 -2
- data/lib/aws-sdk-sts/customizations.rb +5 -1
- data/lib/aws-sdk-sts/endpoint_parameters.rb +10 -9
- data/lib/aws-sdk-sts/endpoint_provider.rb +33 -38
- data/lib/aws-sdk-sts/endpoints.rb +2 -118
- data/lib/aws-sdk-sts/errors.rb +16 -0
- data/lib/aws-sdk-sts/plugins/endpoints.rb +19 -28
- data/lib/aws-sdk-sts/types.rb +171 -28
- data/lib/aws-sdk-sts.rb +15 -11
- data/lib/seahorse/client/base.rb +17 -7
- data/lib/seahorse/client/h2/handler.rb +13 -3
- data/lib/seahorse/client/handler.rb +1 -1
- data/lib/seahorse/client/net_http/connection_pool.rb +10 -2
- data/lib/seahorse/client/net_http/handler.rb +21 -9
- data/lib/seahorse/client/plugins/endpoint.rb +0 -1
- data/lib/seahorse/client/plugins/net_http.rb +9 -0
- data/lib/seahorse/client/request_context.rb +8 -1
- data/lib/seahorse/client/response.rb +2 -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
- metadata +62 -18
- /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
@@ -0,0 +1,308 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Aws
|
4
|
+
module Cbor
|
5
|
+
# Pure Ruby implementation of CBOR Decoder
|
6
|
+
class Decoder
|
7
|
+
def initialize(bytes)
|
8
|
+
@buffer = bytes
|
9
|
+
@pos = 0
|
10
|
+
end
|
11
|
+
|
12
|
+
def decode
|
13
|
+
return nil if @buffer.nil? || @buffer.empty?
|
14
|
+
|
15
|
+
val = decode_item
|
16
|
+
return val unless @pos != @buffer.size
|
17
|
+
|
18
|
+
raise ExtraBytesError.new(@pos, @buffer.size)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
FIVE_BIT_MASK = 0x1F
|
24
|
+
TAG_TYPE_EPOCH = 1
|
25
|
+
TAG_TYPE_BIGNUM = 2
|
26
|
+
TAG_TYPE_NEG_BIGNUM = 3
|
27
|
+
TAG_TYPE_BIGDEC = 4
|
28
|
+
|
29
|
+
# high level, generic decode. Based on the next type. Consumes and returns
|
30
|
+
# the next item as a ruby object.
|
31
|
+
def decode_item
|
32
|
+
case (next_type = peek_type)
|
33
|
+
when :array
|
34
|
+
read_array.times.map { decode_item }
|
35
|
+
when :map
|
36
|
+
read_map.times.map { [read_string, decode_item] }.to_h
|
37
|
+
when :indefinite_array
|
38
|
+
read_start_indefinite_array
|
39
|
+
value = []
|
40
|
+
value << decode_item until peek_type == :break_stop_code
|
41
|
+
read_end_indefinite_collection
|
42
|
+
value
|
43
|
+
when :indefinite_map
|
44
|
+
read_start_indefinite_map
|
45
|
+
value = {}
|
46
|
+
value[read_string] = decode_item until peek_type == :break_stop_code
|
47
|
+
read_end_indefinite_collection
|
48
|
+
value
|
49
|
+
when :indefinite_binary_string
|
50
|
+
read_info
|
51
|
+
value = String.new
|
52
|
+
value << read_binary_string until peek_type == :break_stop_code
|
53
|
+
read_end_indefinite_collection
|
54
|
+
value
|
55
|
+
when :indefinite_string
|
56
|
+
read_info
|
57
|
+
value = String.new
|
58
|
+
value << read_string until peek_type == :break_stop_code
|
59
|
+
read_end_indefinite_collection
|
60
|
+
value.force_encoding(Encoding::UTF_8)
|
61
|
+
when :tag
|
62
|
+
case (tag = read_tag)
|
63
|
+
when TAG_TYPE_EPOCH
|
64
|
+
item = decode_item
|
65
|
+
Time.at(item)
|
66
|
+
when TAG_TYPE_BIGNUM, TAG_TYPE_NEG_BIGNUM
|
67
|
+
read_bignum(tag)
|
68
|
+
when TAG_TYPE_BIGDEC
|
69
|
+
read_big_decimal
|
70
|
+
else
|
71
|
+
Tagged.new(tag, decode_item)
|
72
|
+
end
|
73
|
+
when :break_stop_code
|
74
|
+
raise UnexpectedBreakCodeError
|
75
|
+
else
|
76
|
+
send("read_#{next_type}")
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# low level streaming interface
|
81
|
+
def peek_type
|
82
|
+
ib = peek(1).ord
|
83
|
+
add_info = ib & FIVE_BIT_MASK
|
84
|
+
major_type = ib >> 5
|
85
|
+
case major_type
|
86
|
+
when 0, 1 then :integer
|
87
|
+
when 2
|
88
|
+
add_info == 31 ? :indefinite_binary_string : :binary_string
|
89
|
+
when 3
|
90
|
+
add_info == 31 ? :indefinite_string : :string
|
91
|
+
when 4
|
92
|
+
add_info == 31 ? :indefinite_array : :array
|
93
|
+
when 5
|
94
|
+
add_info == 31 ? :indefinite_map : :map
|
95
|
+
when 6 then :tag
|
96
|
+
when 7 # simple or float
|
97
|
+
case add_info
|
98
|
+
when 20, 21 then :boolean
|
99
|
+
when 22 then :nil
|
100
|
+
when 23 then :undefined # for smithy, this should be parsed as nil
|
101
|
+
when 25 then :half
|
102
|
+
when 26 then :float
|
103
|
+
when 27 then :double
|
104
|
+
when 31 then :break_stop_code
|
105
|
+
else
|
106
|
+
:reserved_undefined
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def read_break_stop_code
|
112
|
+
read_info
|
113
|
+
:break_stop_code
|
114
|
+
end
|
115
|
+
|
116
|
+
def read_integer
|
117
|
+
major_type, add_info = read_info
|
118
|
+
|
119
|
+
val = read_count(add_info)
|
120
|
+
case major_type
|
121
|
+
when 0 then val
|
122
|
+
when 1 then -1 - val
|
123
|
+
else
|
124
|
+
raise Error,
|
125
|
+
"Expected Integer (0,1) got major type: #{major_type}"
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def read_binary_string
|
130
|
+
_major_type, add_info = read_info
|
131
|
+
take(read_count(add_info)).force_encoding(Encoding::BINARY)
|
132
|
+
end
|
133
|
+
|
134
|
+
def read_string
|
135
|
+
_major_type, add_info = read_info
|
136
|
+
take(read_count(add_info)).force_encoding(Encoding::UTF_8)
|
137
|
+
end
|
138
|
+
|
139
|
+
# returns only the length of the array, caller must read the correct number of values after this
|
140
|
+
def read_array
|
141
|
+
_major_type, add_info = read_info
|
142
|
+
read_count(add_info)
|
143
|
+
end
|
144
|
+
|
145
|
+
# returns nothing but consumes and checks the type/info.
|
146
|
+
# Caller must keep reading until encountering the stop sequence
|
147
|
+
def read_start_indefinite_array
|
148
|
+
read_info
|
149
|
+
end
|
150
|
+
|
151
|
+
# returns nothing but consumes and checks the type/info.
|
152
|
+
# Caller must keep reading until encountering the stop sequence
|
153
|
+
def read_start_indefinite_map
|
154
|
+
read_info
|
155
|
+
end
|
156
|
+
|
157
|
+
# returns nothing but consumes and checks the type/info.
|
158
|
+
def read_end_indefinite_collection
|
159
|
+
read_info
|
160
|
+
end
|
161
|
+
|
162
|
+
# returns only the length of the array, caller must read the correct number of key value pairs after this
|
163
|
+
def read_map
|
164
|
+
_major_type, add_info = read_info
|
165
|
+
read_count(add_info)
|
166
|
+
end
|
167
|
+
|
168
|
+
# returns only the tag, caller must interpret the tag and read another value as appropriate
|
169
|
+
def read_tag
|
170
|
+
_major_type, add_info = read_info
|
171
|
+
read_count(add_info)
|
172
|
+
end
|
173
|
+
|
174
|
+
def read_reserved_undefined
|
175
|
+
_major_type, add_info = read_info
|
176
|
+
raise Error,
|
177
|
+
"Undefined reserved additional information: #{add_info}"
|
178
|
+
end
|
179
|
+
|
180
|
+
def read_boolean
|
181
|
+
_major_type, add_info = read_info
|
182
|
+
case add_info
|
183
|
+
when 20 then false
|
184
|
+
when 21 then true
|
185
|
+
else
|
186
|
+
raise Error,
|
187
|
+
'Invalid Boolean simple type, expected add_info of 20 or 21, ' \
|
188
|
+
"got: #{add_info}"
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
def read_nil
|
193
|
+
read_info
|
194
|
+
nil
|
195
|
+
end
|
196
|
+
|
197
|
+
def read_undefined
|
198
|
+
read_info
|
199
|
+
:undefined
|
200
|
+
end
|
201
|
+
|
202
|
+
# 16 bit IEEE 754 half-precision floats
|
203
|
+
# Support decoding only
|
204
|
+
# format:
|
205
|
+
# sign - 1 bit
|
206
|
+
# exponent - 5 bits
|
207
|
+
# precision - 10 bits
|
208
|
+
def read_half
|
209
|
+
read_info
|
210
|
+
b16 = take(2).unpack1('n')
|
211
|
+
exp = (b16 >> 10) & 0x1f
|
212
|
+
mant = b16 & 0x3ff
|
213
|
+
val =
|
214
|
+
case exp
|
215
|
+
when 0
|
216
|
+
Math.ldexp(mant, -24)
|
217
|
+
when 31
|
218
|
+
mant.zero? ? Float::INFINITY : Float::NAN
|
219
|
+
else
|
220
|
+
# exp bias is 15, but to use ldexp we divide by 1024 (2^10) to get
|
221
|
+
# exp-15-10
|
222
|
+
Math.ldexp(1024 + mant, exp - 25)
|
223
|
+
end
|
224
|
+
if (b16[15]).zero?
|
225
|
+
val
|
226
|
+
else
|
227
|
+
-val
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
def read_float
|
232
|
+
read_info
|
233
|
+
take(4).unpack1('g')
|
234
|
+
end
|
235
|
+
|
236
|
+
def read_double
|
237
|
+
read_info
|
238
|
+
take(8).unpack1('G')
|
239
|
+
end
|
240
|
+
|
241
|
+
# tag type 2 or 3
|
242
|
+
def read_bignum(tag_value)
|
243
|
+
_major_type, add_info = read_info
|
244
|
+
bstr = take(read_count(add_info))
|
245
|
+
v = bstr.bytes.inject(0) do |sum, b|
|
246
|
+
sum <<= 8
|
247
|
+
sum + b
|
248
|
+
end
|
249
|
+
case tag_value
|
250
|
+
when 2 then v
|
251
|
+
when 3 then -1 - v
|
252
|
+
else
|
253
|
+
raise Error,
|
254
|
+
'Invalid Tag value for BigNum, ' \
|
255
|
+
"expected 2 or 3, got: #{tag_value}"
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
# A decimal fraction or a bigfloat is represented as a tagged array
|
260
|
+
# that contains exactly two integer numbers:
|
261
|
+
# an exponent e and a mantissa m
|
262
|
+
# See: https://www.rfc-editor.org/rfc/rfc8949.html#name-decimal-fractions-and-bigfl
|
263
|
+
def read_big_decimal
|
264
|
+
unless (s = read_array) == 2
|
265
|
+
raise Error, "Expected array of length 2 but length is: #{s}"
|
266
|
+
end
|
267
|
+
|
268
|
+
e = read_integer
|
269
|
+
m = read_integer
|
270
|
+
BigDecimal(m) * (BigDecimal(10)**BigDecimal(e))
|
271
|
+
end
|
272
|
+
|
273
|
+
# return a tuple of major_type, add_info
|
274
|
+
def read_info
|
275
|
+
ib = take(1).ord
|
276
|
+
[ib >> 5, ib & FIVE_BIT_MASK]
|
277
|
+
end
|
278
|
+
|
279
|
+
def read_count(add_info)
|
280
|
+
case add_info
|
281
|
+
when 0..23 then add_info
|
282
|
+
when 24 then take(1).ord
|
283
|
+
when 25 then take(2).unpack1('n')
|
284
|
+
when 26 then take(4).unpack1('N')
|
285
|
+
when 27 then take(8).unpack1('Q>')
|
286
|
+
when 28 then take(16).unpack1('Q>')
|
287
|
+
when 29 then take(32).unpack1('Q>')
|
288
|
+
else raise UnexpectedAdditionalInformationError, add_info
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
292
|
+
def take(n_bytes)
|
293
|
+
opos = @pos
|
294
|
+
@pos += n_bytes
|
295
|
+
|
296
|
+
return @buffer[opos, n_bytes] if @pos <= @buffer.bytesize
|
297
|
+
|
298
|
+
raise OutOfBytesError.new(n_bytes, @buffer.bytesize - @pos)
|
299
|
+
end
|
300
|
+
|
301
|
+
def peek(n_bytes)
|
302
|
+
return @buffer[@pos, n_bytes] if (@pos + n_bytes) <= @buffer.bytesize
|
303
|
+
|
304
|
+
raise OutOfBytesError.new(n_bytes, @buffer.bytesize - @pos)
|
305
|
+
end
|
306
|
+
end
|
307
|
+
end
|
308
|
+
end
|
@@ -0,0 +1,243 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bigdecimal'
|
4
|
+
|
5
|
+
module Aws
|
6
|
+
module Cbor
|
7
|
+
# Pure ruby implementation of CBOR encoder.
|
8
|
+
class Encoder
|
9
|
+
def initialize
|
10
|
+
@buffer = String.new
|
11
|
+
end
|
12
|
+
|
13
|
+
# @return the encoded bytes in CBOR format for all added data
|
14
|
+
def bytes
|
15
|
+
@buffer
|
16
|
+
end
|
17
|
+
|
18
|
+
# generic method for adding generic Ruby data based on its type
|
19
|
+
def add(value)
|
20
|
+
case value
|
21
|
+
when BigDecimal then add_big_decimal(value)
|
22
|
+
when Integer then add_auto_integer(value)
|
23
|
+
when Numeric then add_auto_float(value)
|
24
|
+
when Symbol then add_string(value.to_s)
|
25
|
+
when true, false then add_boolean(value)
|
26
|
+
when nil then add_nil
|
27
|
+
when Tagged
|
28
|
+
add_tag(value.tag)
|
29
|
+
add(value.value)
|
30
|
+
when String
|
31
|
+
if value.encoding == Encoding::BINARY
|
32
|
+
add_byte_string(value)
|
33
|
+
else
|
34
|
+
add_string(value)
|
35
|
+
end
|
36
|
+
when Array
|
37
|
+
start_array(value.size)
|
38
|
+
value.each { |di| add(di) }
|
39
|
+
when Hash
|
40
|
+
start_map(value.size)
|
41
|
+
value.each do |k, v|
|
42
|
+
add(k)
|
43
|
+
add(v)
|
44
|
+
end
|
45
|
+
when Time
|
46
|
+
add_time(value)
|
47
|
+
else
|
48
|
+
raise UnknownTypeError, value
|
49
|
+
end
|
50
|
+
self
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
MAJOR_TYPE_UNSIGNED_INT = 0x00 # 000_00000 - Major Type 0 - unsigned int
|
56
|
+
MAJOR_TYPE_NEGATIVE_INT = 0x20 # 001_00000 - Major Type 1 - negative int
|
57
|
+
MAJOR_TYPE_BYTE_STR = 0x40 # 010_00000 - Major Type 2 (Byte String)
|
58
|
+
MAJOR_TYPE_STR = 0x60 # 011_00000 - Major Type 3 (Text String)
|
59
|
+
MAJOR_TYPE_ARRAY = 0x80 # 100_00000 - Major Type 4 (Array)
|
60
|
+
MAJOR_TYPE_MAP = 0xa0 # 101_00000 - Major Type 5 (Map)
|
61
|
+
MAJOR_TYPE_TAG = 0xc0 # 110_00000 - Major type 6 (Tag)
|
62
|
+
MAJOR_TYPE_SIMPLE = 0xe0 # 111_00000 - Major type 7 (111) + 5 bit 0
|
63
|
+
|
64
|
+
FLOAT_BYTES = 0xfa # 111_11010 - Major type 7 (Float) + value: 26
|
65
|
+
DOUBLE_BYTES = 0xfb # 111_ 11011 - Major type 7 (Float) + value: 26
|
66
|
+
|
67
|
+
# https://www.rfc-editor.org/rfc/rfc8949.html#tags
|
68
|
+
TAG_TYPE_EPOCH = 1
|
69
|
+
TAG_BIGNUM_BASE = 2
|
70
|
+
TAG_TYPE_BIGDEC = 4
|
71
|
+
|
72
|
+
MAX_INTEGER = 18_446_744_073_709_551_616 # 2^64
|
73
|
+
|
74
|
+
def head(major_type, value)
|
75
|
+
@buffer <<
|
76
|
+
case value
|
77
|
+
when 0...24
|
78
|
+
[major_type + value].pack('C') # 8-bit unsigned
|
79
|
+
when 0...256
|
80
|
+
[major_type + 24, value].pack('CC')
|
81
|
+
when 0...65_536
|
82
|
+
[major_type + 25, value].pack('Cn')
|
83
|
+
when 0...4_294_967_296
|
84
|
+
[major_type + 26, value].pack('CN')
|
85
|
+
when 0...MAX_INTEGER
|
86
|
+
[major_type + 27, value].pack('CQ>')
|
87
|
+
else
|
88
|
+
raise Error, "Value is too large to encode: #{value}"
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# streaming style, lower level interface
|
93
|
+
def add_integer(value)
|
94
|
+
major_type =
|
95
|
+
if value.negative?
|
96
|
+
value = -1 - value
|
97
|
+
MAJOR_TYPE_NEGATIVE_INT
|
98
|
+
else
|
99
|
+
MAJOR_TYPE_UNSIGNED_INT
|
100
|
+
end
|
101
|
+
head(major_type, value)
|
102
|
+
end
|
103
|
+
|
104
|
+
def add_bignum(value)
|
105
|
+
major_type =
|
106
|
+
if value.negative?
|
107
|
+
value = -1 - value
|
108
|
+
MAJOR_TYPE_NEGATIVE_INT
|
109
|
+
else
|
110
|
+
MAJOR_TYPE_UNSIGNED_INT
|
111
|
+
end
|
112
|
+
s = bignum_to_bytes(value)
|
113
|
+
head(MAJOR_TYPE_TAG, TAG_BIGNUM_BASE + (major_type >> 5))
|
114
|
+
head(MAJOR_TYPE_BYTE_STR, s.bytesize)
|
115
|
+
@buffer << s
|
116
|
+
end
|
117
|
+
|
118
|
+
# A decimal fraction or a bigfloat is represented as a tagged array
|
119
|
+
# that contains exactly two integer numbers:
|
120
|
+
# an exponent e and a mantissa m
|
121
|
+
# decimal fractions are always represented with a base of 10
|
122
|
+
# See: https://www.rfc-editor.org/rfc/rfc8949.html#name-decimal-fractions-and-bigfl
|
123
|
+
def add_big_decimal(value)
|
124
|
+
if value.infinite? == 1
|
125
|
+
return add_float(value.infinite? * Float::INFINITY)
|
126
|
+
elsif value.nan?
|
127
|
+
return add_float(Float::NAN)
|
128
|
+
end
|
129
|
+
|
130
|
+
head(MAJOR_TYPE_TAG, TAG_TYPE_BIGDEC)
|
131
|
+
sign, digits, base, exp = value.split
|
132
|
+
# Ruby BigDecimal digits of XXX are used as 0.XXX, convert
|
133
|
+
exp = exp - digits.size
|
134
|
+
digits = sign * digits.to_i
|
135
|
+
start_array(2)
|
136
|
+
add_auto_integer(exp)
|
137
|
+
add_auto_integer(digits)
|
138
|
+
end
|
139
|
+
|
140
|
+
def add_auto_integer(value)
|
141
|
+
major_type =
|
142
|
+
if value.negative?
|
143
|
+
value = -1 - value
|
144
|
+
MAJOR_TYPE_NEGATIVE_INT
|
145
|
+
else
|
146
|
+
MAJOR_TYPE_UNSIGNED_INT
|
147
|
+
end
|
148
|
+
|
149
|
+
if value >= MAX_INTEGER
|
150
|
+
s = bignum_to_bytes(value)
|
151
|
+
head(MAJOR_TYPE_TAG, TAG_BIGNUM_BASE + (major_type >> 5))
|
152
|
+
head(MAJOR_TYPE_BYTE_STR, s.bytesize)
|
153
|
+
@buffer << s
|
154
|
+
else
|
155
|
+
head(major_type, value)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
def add_float(value)
|
160
|
+
@buffer << [FLOAT_BYTES, value].pack('Cg') # single-precision
|
161
|
+
end
|
162
|
+
|
163
|
+
def add_double(value)
|
164
|
+
@buffer << [DOUBLE_BYTES, value].pack('CG') # double-precision
|
165
|
+
end
|
166
|
+
|
167
|
+
def add_auto_float(value)
|
168
|
+
if value.nan?
|
169
|
+
@buffer << FLOAT_BYTES << [value].pack('g')
|
170
|
+
else
|
171
|
+
ss = [value].pack('g') # single-precision
|
172
|
+
if ss.unpack1('g') == value
|
173
|
+
@buffer << FLOAT_BYTES << ss
|
174
|
+
else
|
175
|
+
@buffer << [DOUBLE_BYTES, value].pack('CG') # double-precision
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
def add_nil
|
181
|
+
head(MAJOR_TYPE_SIMPLE, 22)
|
182
|
+
end
|
183
|
+
|
184
|
+
def add_boolean(value)
|
185
|
+
value ? head(MAJOR_TYPE_SIMPLE, 21) : head(MAJOR_TYPE_SIMPLE, 20)
|
186
|
+
end
|
187
|
+
|
188
|
+
# Encoding MUST already be Encoding::BINARY
|
189
|
+
def add_byte_string(value)
|
190
|
+
head(MAJOR_TYPE_BYTE_STR, value.bytesize)
|
191
|
+
@buffer << value
|
192
|
+
end
|
193
|
+
|
194
|
+
def add_string(value)
|
195
|
+
value = value.encode(Encoding::UTF_8).force_encoding(Encoding::BINARY)
|
196
|
+
head(MAJOR_TYPE_STR, value.bytesize)
|
197
|
+
@buffer << value
|
198
|
+
end
|
199
|
+
|
200
|
+
# caller is responsible for adding length values
|
201
|
+
def start_array(length)
|
202
|
+
head(MAJOR_TYPE_ARRAY, length)
|
203
|
+
end
|
204
|
+
|
205
|
+
def start_indefinite_array
|
206
|
+
head(MAJOR_TYPE_ARRAY + 31, 0)
|
207
|
+
end
|
208
|
+
|
209
|
+
# caller is responsible for adding length key/value pairs
|
210
|
+
def start_map(length)
|
211
|
+
head(MAJOR_TYPE_MAP, length)
|
212
|
+
end
|
213
|
+
|
214
|
+
def start_indefinite_map
|
215
|
+
head(MAJOR_TYPE_MAP + 31, 0)
|
216
|
+
end
|
217
|
+
|
218
|
+
def end_indefinite_collection
|
219
|
+
# write the stop sequence
|
220
|
+
head(MAJOR_TYPE_SIMPLE + 31, 0)
|
221
|
+
end
|
222
|
+
|
223
|
+
def add_tag(tag)
|
224
|
+
head(MAJOR_TYPE_TAG, tag)
|
225
|
+
end
|
226
|
+
|
227
|
+
def add_time(value)
|
228
|
+
head(MAJOR_TYPE_TAG, TAG_TYPE_EPOCH)
|
229
|
+
epoch = value.to_f
|
230
|
+
add_double(epoch)
|
231
|
+
end
|
232
|
+
|
233
|
+
def bignum_to_bytes(value)
|
234
|
+
s = String.new
|
235
|
+
while value != 0
|
236
|
+
s << (value & 0xFF)
|
237
|
+
value >>= 8
|
238
|
+
end
|
239
|
+
s.reverse!
|
240
|
+
end
|
241
|
+
end
|
242
|
+
end
|
243
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'cbor/encoder'
|
4
|
+
require_relative 'cbor/decoder'
|
5
|
+
|
6
|
+
module Aws
|
7
|
+
# @api private
|
8
|
+
module Cbor
|
9
|
+
|
10
|
+
# CBOR Tagged data (Major type 6).
|
11
|
+
# A Tag consists of a tag number and a value.
|
12
|
+
# In the extended generic data model, a tag number's definition
|
13
|
+
# describes the additional semantics conveyed with the tag number.
|
14
|
+
# # @!method initialize(*args)
|
15
|
+
# @option args [Integer] :tag The tag number.
|
16
|
+
# @option args [Object] :value The tag's content.
|
17
|
+
# @!attribute tag
|
18
|
+
# The tag number.
|
19
|
+
# @return [Integer]
|
20
|
+
# @!attribute value
|
21
|
+
# The tag's content.
|
22
|
+
# @return [Object]
|
23
|
+
Tagged = Struct.new(:tag, :value)
|
24
|
+
|
25
|
+
class Error < StandardError; end
|
26
|
+
|
27
|
+
class OutOfBytesError < Error
|
28
|
+
def initialize(n, left)
|
29
|
+
super("Out of bytes. Trying to read #{n} bytes but buffer contains only #{left}")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class UnknownTypeError < Error
|
34
|
+
def initialize(type)
|
35
|
+
super("Unable to encode #{type}")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class ExtraBytesError < Error
|
40
|
+
def initialize(pos, size)
|
41
|
+
super("Extra bytes follow after decoding item. Read #{pos} / #{size} bytes")
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class UnexpectedBreakCodeError < Error; end
|
46
|
+
|
47
|
+
class UnexpectedAdditionalInformationError < Error
|
48
|
+
def initialize(add_info)
|
49
|
+
super("Unexpected additional information: #{add_info}")
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Aws
|
4
|
+
# setup autoloading for ClientSideMonitoring module
|
5
|
+
module ClientSideMonitoring
|
6
|
+
autoload :RequestMetrics, 'aws-sdk-core/client_side_monitoring/request_metrics'
|
7
|
+
autoload :Publisher, 'aws-sdk-core/client_side_monitoring/publisher'
|
8
|
+
end
|
9
|
+
end
|
@@ -307,13 +307,14 @@ module Aws
|
|
307
307
|
|
308
308
|
def protocol_helper
|
309
309
|
case config.api.metadata['protocol']
|
310
|
-
when 'json'
|
311
|
-
when '
|
312
|
-
when '
|
313
|
-
when '
|
314
|
-
when '
|
315
|
-
when '
|
316
|
-
|
310
|
+
when 'json' then Stubbing::Protocols::Json
|
311
|
+
when 'rest-json' then Stubbing::Protocols::RestJson
|
312
|
+
when 'rest-xml' then Stubbing::Protocols::RestXml
|
313
|
+
when 'query' then Stubbing::Protocols::Query
|
314
|
+
when 'ec2' then Stubbing::Protocols::EC2
|
315
|
+
when 'smithy-rpc-v2-cbor' then Stubbing::Protocols::RpcV2
|
316
|
+
when 'api-gateway' then Stubbing::Protocols::ApiGateway
|
317
|
+
else raise 'unsupported protocol'
|
317
318
|
end.new
|
318
319
|
end
|
319
320
|
end
|
@@ -45,7 +45,8 @@ module Aws
|
|
45
45
|
Credentials.new(
|
46
46
|
options[:config].access_key_id,
|
47
47
|
options[:config].secret_access_key,
|
48
|
-
options[:config].session_token
|
48
|
+
options[:config].session_token,
|
49
|
+
account_id: options[:config].account_id
|
49
50
|
)
|
50
51
|
end
|
51
52
|
end
|
@@ -84,7 +85,7 @@ module Aws
|
|
84
85
|
def static_profile_process_credentials(options)
|
85
86
|
if Aws.shared_config.config_enabled? && options[:config] && options[:config].profile
|
86
87
|
process_provider = Aws.shared_config.credential_process(profile: options[:config].profile)
|
87
|
-
ProcessCredentials.new(process_provider) if process_provider
|
88
|
+
ProcessCredentials.new([process_provider]) if process_provider
|
88
89
|
end
|
89
90
|
rescue Errors::NoSuchProfileError
|
90
91
|
nil
|
@@ -94,7 +95,13 @@ module Aws
|
|
94
95
|
key = %w[AWS_ACCESS_KEY_ID AMAZON_ACCESS_KEY_ID AWS_ACCESS_KEY]
|
95
96
|
secret = %w[AWS_SECRET_ACCESS_KEY AMAZON_SECRET_ACCESS_KEY AWS_SECRET_KEY]
|
96
97
|
token = %w[AWS_SESSION_TOKEN AMAZON_SESSION_TOKEN]
|
97
|
-
|
98
|
+
account_id = %w[AWS_ACCOUNT_ID]
|
99
|
+
Credentials.new(
|
100
|
+
envar(key),
|
101
|
+
envar(secret),
|
102
|
+
envar(token),
|
103
|
+
account_id: envar(account_id)
|
104
|
+
)
|
98
105
|
end
|
99
106
|
|
100
107
|
def envar(keys)
|
@@ -117,9 +124,9 @@ module Aws
|
|
117
124
|
|
118
125
|
def process_credentials(options)
|
119
126
|
profile_name = determine_profile_name(options)
|
120
|
-
if Aws.shared_config.config_enabled?
|
121
|
-
|
122
|
-
ProcessCredentials.new(process_provider)
|
127
|
+
if Aws.shared_config.config_enabled?
|
128
|
+
process_provider = Aws.shared_config.credential_process(profile: profile_name)
|
129
|
+
ProcessCredentials.new([process_provider]) if process_provider
|
123
130
|
end
|
124
131
|
rescue Errors::NoSuchProfileError
|
125
132
|
nil
|