aws-sdk-s3 1.114.0 → 1.136.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.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +163 -0
  3. data/VERSION +1 -1
  4. data/lib/aws-sdk-s3/bucket.rb +123 -61
  5. data/lib/aws-sdk-s3/bucket_acl.rb +9 -3
  6. data/lib/aws-sdk-s3/bucket_cors.rb +12 -4
  7. data/lib/aws-sdk-s3/bucket_lifecycle.rb +12 -4
  8. data/lib/aws-sdk-s3/bucket_lifecycle_configuration.rb +12 -4
  9. data/lib/aws-sdk-s3/bucket_logging.rb +9 -3
  10. data/lib/aws-sdk-s3/bucket_notification.rb +9 -3
  11. data/lib/aws-sdk-s3/bucket_policy.rb +12 -4
  12. data/lib/aws-sdk-s3/bucket_request_payment.rb +9 -3
  13. data/lib/aws-sdk-s3/bucket_tagging.rb +12 -4
  14. data/lib/aws-sdk-s3/bucket_versioning.rb +15 -5
  15. data/lib/aws-sdk-s3/bucket_website.rb +12 -4
  16. data/lib/aws-sdk-s3/client.rb +2084 -1724
  17. data/lib/aws-sdk-s3/client_api.rb +213 -189
  18. data/lib/aws-sdk-s3/customizations/bucket.rb +23 -47
  19. data/lib/aws-sdk-s3/customizations/errors.rb +27 -0
  20. data/lib/aws-sdk-s3/customizations/object.rb +95 -19
  21. data/lib/aws-sdk-s3/customizations/types/permanent_redirect.rb +26 -0
  22. data/lib/aws-sdk-s3/customizations.rb +2 -0
  23. data/lib/aws-sdk-s3/encryption/client.rb +6 -2
  24. data/lib/aws-sdk-s3/encryption/kms_cipher_provider.rb +13 -9
  25. data/lib/aws-sdk-s3/encryptionV2/client.rb +6 -2
  26. data/lib/aws-sdk-s3/encryptionV2/decrypt_handler.rb +1 -0
  27. data/lib/aws-sdk-s3/encryptionV2/kms_cipher_provider.rb +10 -6
  28. data/lib/aws-sdk-s3/endpoint_parameters.rb +146 -0
  29. data/lib/aws-sdk-s3/endpoint_provider.rb +509 -0
  30. data/lib/aws-sdk-s3/endpoints.rb +2150 -0
  31. data/lib/aws-sdk-s3/file_downloader.rb +170 -44
  32. data/lib/aws-sdk-s3/file_uploader.rb +8 -6
  33. data/lib/aws-sdk-s3/multipart_stream_uploader.rb +41 -13
  34. data/lib/aws-sdk-s3/multipart_upload.rb +27 -13
  35. data/lib/aws-sdk-s3/multipart_upload_part.rb +20 -10
  36. data/lib/aws-sdk-s3/object.rb +156 -110
  37. data/lib/aws-sdk-s3/object_acl.rb +14 -6
  38. data/lib/aws-sdk-s3/object_copier.rb +7 -5
  39. data/lib/aws-sdk-s3/object_multipart_copier.rb +41 -19
  40. data/lib/aws-sdk-s3/object_summary.rb +149 -94
  41. data/lib/aws-sdk-s3/object_version.rb +55 -21
  42. data/lib/aws-sdk-s3/plugins/accelerate.rb +3 -50
  43. data/lib/aws-sdk-s3/plugins/arn.rb +0 -184
  44. data/lib/aws-sdk-s3/plugins/bucket_dns.rb +3 -39
  45. data/lib/aws-sdk-s3/plugins/bucket_name_restrictions.rb +1 -6
  46. data/lib/aws-sdk-s3/plugins/dualstack.rb +1 -49
  47. data/lib/aws-sdk-s3/plugins/endpoints.rb +262 -0
  48. data/lib/aws-sdk-s3/plugins/expect_100_continue.rb +2 -1
  49. data/lib/aws-sdk-s3/plugins/iad_regional_endpoint.rb +0 -29
  50. data/lib/aws-sdk-s3/plugins/s3_signer.rb +32 -126
  51. data/lib/aws-sdk-s3/presigned_post.rb +61 -59
  52. data/lib/aws-sdk-s3/presigner.rb +24 -35
  53. data/lib/aws-sdk-s3/resource.rb +7 -3
  54. data/lib/aws-sdk-s3/types.rb +858 -4125
  55. data/lib/aws-sdk-s3.rb +5 -1
  56. metadata +12 -11
  57. data/lib/aws-sdk-s3/arn/access_point_arn.rb +0 -69
  58. data/lib/aws-sdk-s3/arn/multi_region_access_point_arn.rb +0 -68
  59. data/lib/aws-sdk-s3/arn/object_lambda_arn.rb +0 -69
  60. data/lib/aws-sdk-s3/arn/outpost_access_point_arn.rb +0 -74
  61. data/lib/aws-sdk-s3/plugins/object_lambda_endpoint.rb +0 -25
@@ -105,6 +105,20 @@ module Aws::S3
105
105
  data[:owner]
106
106
  end
107
107
 
108
+ # Specifies the restoration status of an object. Objects in certain
109
+ # storage classes must be restored before they can be retrieved. For
110
+ # more information about these storage classes and how to work with
111
+ # archived objects, see [ Working with archived objects][1] in the
112
+ # *Amazon S3 User Guide*.
113
+ #
114
+ #
115
+ #
116
+ # [1]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/archived-objects.html
117
+ # @return [Types::RestoreStatus]
118
+ def restore_status
119
+ data[:restore_status]
120
+ end
121
+
108
122
  # @!endgroup
109
123
 
110
124
  # @return [Client]
@@ -229,7 +243,9 @@ module Aws::S3
229
243
  :retry
230
244
  end
231
245
  end
232
- Aws::Waiters::Waiter.new(options).wait({})
246
+ Aws::Plugins::UserAgent.feature('resource') do
247
+ Aws::Waiters::Waiter.new(options).wait({})
248
+ end
233
249
  end
234
250
 
235
251
  # @!group Actions
@@ -251,9 +267,11 @@ module Aws::S3
251
267
  # @option options [String] :request_payer
252
268
  # Confirms that the requester knows that they will be charged for the
253
269
  # request. Bucket owners need not specify this parameter in their
254
- # requests. For information about downloading objects from Requester
255
- # Pays buckets, see [Downloading Objects in Requester Pays Buckets][1]
256
- # in the *Amazon S3 User Guide*.
270
+ # requests. If either the source or destination Amazon S3 bucket has
271
+ # Requester Pays enabled, the requester will pay for corresponding
272
+ # charges to copy the object. For information about downloading objects
273
+ # from Requester Pays buckets, see [Downloading Objects in Requester
274
+ # Pays Buckets][1] in the *Amazon S3 User Guide*.
257
275
  #
258
276
  #
259
277
  #
@@ -273,7 +291,9 @@ module Aws::S3
273
291
  key: @object_key,
274
292
  version_id: @id
275
293
  )
276
- resp = @client.delete_object(options)
294
+ resp = Aws::Plugins::UserAgent.feature('resource') do
295
+ @client.delete_object(options)
296
+ end
277
297
  resp.data
278
298
  end
279
299
 
@@ -315,7 +335,7 @@ module Aws::S3
315
335
  # @option options [String] :range
316
336
  # Downloads the specified range bytes of an object. For more information
317
337
  # about the HTTP Range header, see
318
- # [https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35][1].
338
+ # [https://www.rfc-editor.org/rfc/rfc9110.html#name-range][1].
319
339
  #
320
340
  # <note markdown="1"> Amazon S3 doesn't support retrieving multiple ranges of data per
321
341
  # `GET` request.
@@ -324,7 +344,7 @@ module Aws::S3
324
344
  #
325
345
  #
326
346
  #
327
- # [1]: https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35
347
+ # [1]: https://www.rfc-editor.org/rfc/rfc9110.html#name-range
328
348
  # @option options [String] :response_cache_control
329
349
  # Sets the `Cache-Control` header of the response.
330
350
  # @option options [String] :response_content_disposition
@@ -353,9 +373,11 @@ module Aws::S3
353
373
  # @option options [String] :request_payer
354
374
  # Confirms that the requester knows that they will be charged for the
355
375
  # request. Bucket owners need not specify this parameter in their
356
- # requests. For information about downloading objects from Requester
357
- # Pays buckets, see [Downloading Objects in Requester Pays Buckets][1]
358
- # in the *Amazon S3 User Guide*.
376
+ # requests. If either the source or destination Amazon S3 bucket has
377
+ # Requester Pays enabled, the requester will pay for corresponding
378
+ # charges to copy the object. For information about downloading objects
379
+ # from Requester Pays buckets, see [Downloading Objects in Requester
380
+ # Pays Buckets][1] in the *Amazon S3 User Guide*.
359
381
  #
360
382
  #
361
383
  #
@@ -378,7 +400,9 @@ module Aws::S3
378
400
  key: @object_key,
379
401
  version_id: @id
380
402
  )
381
- resp = @client.get_object(options, &block)
403
+ resp = Aws::Plugins::UserAgent.feature('resource') do
404
+ @client.get_object(options, &block)
405
+ end
382
406
  resp.data
383
407
  end
384
408
 
@@ -412,8 +436,10 @@ module Aws::S3
412
436
  # Return the object only if it has not been modified since the specified
413
437
  # time; otherwise, return a 412 (precondition failed) error.
414
438
  # @option options [String] :range
415
- # Because `HeadObject` returns only the metadata for an object, this
416
- # parameter has no effect.
439
+ # HeadObject returns only the metadata for an object. If the Range is
440
+ # satisfiable, only the `ContentLength` is affected in the response. If
441
+ # the Range is not satisfiable, S3 returns a `416 - Requested Range Not
442
+ # Satisfiable` error.
417
443
  # @option options [String] :sse_customer_algorithm
418
444
  # Specifies the algorithm to use to when encrypting the object (for
419
445
  # example, AES256).
@@ -430,9 +456,11 @@ module Aws::S3
430
456
  # @option options [String] :request_payer
431
457
  # Confirms that the requester knows that they will be charged for the
432
458
  # request. Bucket owners need not specify this parameter in their
433
- # requests. For information about downloading objects from Requester
434
- # Pays buckets, see [Downloading Objects in Requester Pays Buckets][1]
435
- # in the *Amazon S3 User Guide*.
459
+ # requests. If either the source or destination Amazon S3 bucket has
460
+ # Requester Pays enabled, the requester will pay for corresponding
461
+ # charges to copy the object. For information about downloading objects
462
+ # from Requester Pays buckets, see [Downloading Objects in Requester
463
+ # Pays Buckets][1] in the *Amazon S3 User Guide*.
436
464
  #
437
465
  #
438
466
  #
@@ -460,7 +488,9 @@ module Aws::S3
460
488
  key: @object_key,
461
489
  version_id: @id
462
490
  )
463
- resp = @client.head_object(options)
491
+ resp = Aws::Plugins::UserAgent.feature('resource') do
492
+ @client.head_object(options)
493
+ end
464
494
  resp.data
465
495
  end
466
496
 
@@ -543,9 +573,11 @@ module Aws::S3
543
573
  # @option options [String] :request_payer
544
574
  # Confirms that the requester knows that they will be charged for the
545
575
  # request. Bucket owners need not specify this parameter in their
546
- # requests. For information about downloading objects from Requester
547
- # Pays buckets, see [Downloading Objects in Requester Pays Buckets][1]
548
- # in the *Amazon S3 User Guide*.
576
+ # requests. If either the source or destination Amazon S3 bucket has
577
+ # Requester Pays enabled, the requester will pay for corresponding
578
+ # charges to copy the object. For information about downloading objects
579
+ # from Requester Pays buckets, see [Downloading Objects in Requester
580
+ # Pays Buckets][1] in the *Amazon S3 User Guide*.
549
581
  #
550
582
  #
551
583
  #
@@ -589,7 +621,9 @@ module Aws::S3
589
621
  version_id: item.id
590
622
  }
591
623
  end
592
- batch[0].client.delete_objects(params)
624
+ Aws::Plugins::UserAgent.feature('resource') do
625
+ batch[0].client.delete_objects(params)
626
+ end
593
627
  end
594
628
  nil
595
629
  end
@@ -23,73 +23,26 @@ each bucket. [Go here for more information](http://docs.aws.amazon.com/AmazonS3/
23
23
  operations = config.api.operation_names - [
24
24
  :create_bucket, :list_buckets, :delete_bucket
25
25
  ]
26
- # Need 2 handlers so that the context can be set for other plugins
27
- # and to remove :use_accelerate_endpoint from the params.
28
26
  handlers.add(
29
27
  OptionHandler, step: :initialize, operations: operations
30
28
  )
31
- handlers.add(
32
- AccelerateHandler, step: :build, priority: 11, operations: operations
33
- )
34
29
  end
35
30
 
36
31
  # @api private
37
32
  class OptionHandler < Seahorse::Client::Handler
38
33
  def call(context)
39
34
  # Support client configuration and per-operation configuration
35
+ # TODO: move this to an options hash and warn here.
40
36
  if context.params.is_a?(Hash)
41
37
  accelerate = context.params.delete(:use_accelerate_endpoint)
42
38
  end
43
- accelerate = context.config.use_accelerate_endpoint if accelerate.nil?
44
- # Raise if :endpoint and accelerate are both provided
45
- if accelerate && !context.config.regional_endpoint
46
- raise ArgumentError,
47
- 'Cannot use both :use_accelerate_endpoint and :endpoint'
48
- end
49
- # Raise if :use_fips_endpoint and accelerate are both provided
50
- if accelerate && context.config.use_fips_endpoint
51
- raise ArgumentError,
52
- 'Cannot use both :use_accelerate_endpoint and '\
53
- ':use_fips_endpoint'
39
+ if accelerate.nil?
40
+ accelerate = context.config.use_accelerate_endpoint
54
41
  end
55
42
  context[:use_accelerate_endpoint] = accelerate
56
43
  @handler.call(context)
57
44
  end
58
45
  end
59
-
60
- # @api private
61
- class AccelerateHandler < Seahorse::Client::Handler
62
- def call(context)
63
- if context.config.regional_endpoint && context[:use_accelerate_endpoint]
64
- dualstack = !!context[:use_dualstack_endpoint]
65
- use_accelerate_endpoint(context, dualstack)
66
- end
67
- @handler.call(context)
68
- end
69
-
70
- private
71
-
72
- def use_accelerate_endpoint(context, dualstack)
73
- bucket_name = context.params[:bucket]
74
- validate_bucket_name!(bucket_name)
75
- endpoint = URI.parse(context.http_request.endpoint.to_s)
76
- endpoint.scheme = 'https'
77
- endpoint.port = 443
78
- endpoint.host = "#{bucket_name}.s3-accelerate"\
79
- "#{'.dualstack' if dualstack}.amazonaws.com"
80
- context.http_request.endpoint = endpoint.to_s
81
- # s3 accelerate endpoint doesn't work with 'expect' header
82
- context.http_request.headers.delete('expect')
83
- end
84
-
85
- def validate_bucket_name!(bucket_name)
86
- unless BucketDns.dns_compatible?(bucket_name, _ssl = true)
87
- raise ArgumentError,
88
- 'Unable to use `use_accelerate_endpoint: true` on buckets '\
89
- 'with non-DNS compatible names.'
90
- end
91
- end
92
- end
93
46
  end
94
47
  end
95
48
  end
@@ -1,10 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../arn/access_point_arn'
4
- require_relative '../arn/object_lambda_arn'
5
- require_relative '../arn/outpost_access_point_arn'
6
- require_relative '../arn/multi_region_access_point_arn'
7
-
8
3
  module Aws
9
4
  module S3
10
5
  module Plugins
@@ -36,150 +31,9 @@ result in cross region requests.
36
31
  resolve_s3_disable_multiregion_access_points(cfg)
37
32
  end
38
33
 
39
- # param validator is validate:50
40
- # endpoint is build:90 (populates the URI for the first time)
41
- # endpoint pattern is build:10
42
- def add_handlers(handlers, _config)
43
- handlers.add(ARNHandler, step: :validate, priority: 75)
44
- handlers.add(UrlHandler)
45
- end
46
-
47
- # After extracting out any ARN input, resolve a new URL with it.
48
- class UrlHandler < Seahorse::Client::Handler
49
- def call(context)
50
- if context.metadata[:s3_arn]
51
- ARN.resolve_url!(
52
- context.http_request.endpoint,
53
- context.metadata[:s3_arn][:arn],
54
- context.metadata[:s3_arn][:resolved_region],
55
- context.metadata[:s3_arn][:fips],
56
- context.metadata[:s3_arn][:dualstack],
57
- # if regional_endpoint is false, a custom endpoint was provided
58
- # in this case, we want to prefix the endpoint using the ARN
59
- !context.config.regional_endpoint
60
- )
61
- end
62
- @handler.call(context)
63
- end
64
- end
65
-
66
- # This plugin will extract out any ARN input and set context for other
67
- # plugins to use without having to translate the ARN again.
68
- class ARNHandler < Seahorse::Client::Handler
69
- def call(context)
70
- bucket_member = _bucket_member(context.operation.input.shape)
71
- if bucket_member && (bucket = context.params[bucket_member])
72
- resolved_region, arn = ARN.resolve_arn!(
73
- bucket,
74
- context.config.region,
75
- context.config.s3_use_arn_region
76
- )
77
- if arn
78
- validate_config!(context, arn)
79
-
80
- context.metadata[:s3_arn] = {
81
- arn: arn,
82
- resolved_region: resolved_region,
83
- fips: context.config.use_fips_endpoint,
84
- dualstack: extract_dualstack_config!(context)
85
- }
86
- end
87
- end
88
- @handler.call(context)
89
- end
90
-
91
- private
92
-
93
- def _bucket_member(input)
94
- input.members.each do |member, ref|
95
- return member if ref.shape.name == 'BucketName'
96
- end
97
- nil
98
- end
99
-
100
- # other plugins use dualstack so disable it when we're done
101
- def extract_dualstack_config!(context)
102
- dualstack = context[:use_dualstack_endpoint]
103
- context[:use_dualstack_endpoint] = false if dualstack
104
- dualstack
105
- end
106
-
107
- def validate_config!(context, arn)
108
- if context.config.force_path_style
109
- raise ArgumentError,
110
- 'Cannot provide an Access Point ARN when '\
111
- '`:force_path_style` is set to true.'
112
- end
113
-
114
- if context.config.use_accelerate_endpoint
115
- raise ArgumentError,
116
- 'Cannot provide an Access Point ARN when '\
117
- '`:use_accelerate_endpoint` is set to true.'
118
- end
119
-
120
- if !arn.support_dualstack? && context[:use_dualstack_endpoint]
121
- raise ArgumentError,
122
- 'Cannot provide an Outpost Access Point, Object Lambda, '\
123
- 'or Multi-region Access Point ARN'\
124
- ' when `:use_dualstack_endpoint` is set to true.'
125
- end
126
-
127
- if arn.region.empty? && context.config.s3_disable_multiregion_access_points
128
- raise ArgumentError,
129
- 'Cannot provide a Multi-region Access Point ARN with '\
130
- '`:s3_disable_multiregion_access_points` set to true'
131
- end
132
-
133
- if context.config.use_fips_endpoint && !arn.support_fips?
134
- raise ArgumentError,
135
- 'FIPS client regions are not supported for this type '\
136
- 'of ARN.'
137
- end
138
- end
139
- end
140
-
141
34
  class << self
142
- # @api private
143
- def resolve_arn!(member_value, region, use_arn_region)
144
- if Aws::ARNParser.arn?(member_value)
145
- arn = Aws::ARNParser.parse(member_value)
146
- s3_arn = resolve_arn_type!(arn)
147
- s3_arn.validate_arn!
148
- validate_region_config!(s3_arn, region, use_arn_region)
149
- region = s3_arn.region if use_arn_region
150
- [region, s3_arn]
151
- else
152
- [region]
153
- end
154
- end
155
-
156
- # @api private
157
- def resolve_url!(url, arn, region, fips = false, dualstack = false, has_custom_endpoint = false)
158
- custom_endpoint = url.host if has_custom_endpoint
159
- url.host = arn.host_url(region, fips, dualstack, custom_endpoint)
160
- url.path = url_path(url.path, arn)
161
- url
162
- end
163
-
164
35
  private
165
36
 
166
- def resolve_arn_type!(arn)
167
- case arn.service
168
- when 's3'
169
- arn.region.empty? ?
170
- Aws::S3::MultiRegionAccessPointARN.new(arn.to_h) :
171
- Aws::S3::AccessPointARN.new(arn.to_h)
172
- when 's3-outposts'
173
- Aws::S3::OutpostAccessPointARN.new(arn.to_h)
174
- when 's3-object-lambda'
175
- Aws::S3::ObjectLambdaARN.new(arn.to_h)
176
- else
177
- raise ArgumentError,
178
- 'Only Access Point, Outposts, and Object Lambdas ARNs '\
179
- 'are currently supported.'
180
- end
181
- end
182
-
183
37
  def resolve_s3_use_arn_region(cfg)
184
38
  value = ENV['AWS_S3_USE_ARN_REGION'] ||
185
39
  Aws.shared_config.s3_use_arn_region(profile: cfg.profile) ||
@@ -209,44 +63,6 @@ result in cross region requests.
209
63
  end
210
64
  value
211
65
  end
212
-
213
- # Remove ARN from the path because we've already set the new host
214
- def url_path(path, arn)
215
- path = path.sub("/#{Seahorse::Util.uri_escape(arn.to_s)}", '')
216
- .sub("/#{arn}", '')
217
- "/#{path}" unless path =~ /^\//
218
- path
219
- end
220
-
221
- def validate_region_config!(arn, region, use_arn_region)
222
- if ['s3-external-1', 'aws-global'].include?(region)
223
- # These "regions" are not regional endpoints
224
- unless use_arn_region
225
- raise Aws::Errors::InvalidARNRegionError,
226
- 'Configured client region is not a regional endpoint.'
227
- end
228
- # These "regions" are in the AWS partition
229
- # Cannot use ARN region unless it's the same partition
230
- unless arn.partition == 'aws'
231
- raise Aws::Errors::InvalidARNPartitionError
232
- end
233
- else
234
- # use_arn_region does not apply to MRAP (global) arns
235
- unless arn.region.empty?
236
- # Raise if the ARN and client regions are in different partitions
237
- if use_arn_region &&
238
- !Aws::Partitions.partition(arn.partition).region?(region)
239
- raise Aws::Errors::InvalidARNPartitionError
240
- end
241
-
242
- # Raise if regions mismatch
243
- # Either when it's a fips client or not using the ARN region
244
- if !use_arn_region && region != arn.region
245
- raise Aws::Errors::InvalidARNRegionError
246
- end
247
- end
248
- end
249
- end
250
66
  end
251
67
  end
252
68
  end
@@ -23,45 +23,10 @@ When set to `true`, the bucket name is always left in the
23
23
  request URI and never moved to the host as a sub-domain.
24
24
  DOCS
25
25
 
26
- def add_handlers(handlers, config)
27
- handlers.add(Handler, priority: 48) unless config.force_path_style
28
- end
29
-
30
- # @api private
31
- class Handler < Seahorse::Client::Handler
32
-
33
- def call(context)
34
- move_dns_compat_bucket_to_subdomain(context)
35
- @handler.call(context)
36
- end
37
-
38
- private
39
-
40
- def move_dns_compat_bucket_to_subdomain(context)
41
- bucket_name = context.params[:bucket]
42
- endpoint = context.http_request.endpoint
43
- if bucket_name &&
44
- BucketDns.dns_compatible?(bucket_name, https?(endpoint)) &&
45
- context.operation_name.to_s != 'get_bucket_location'
46
- move_bucket_to_subdomain(bucket_name, endpoint)
47
- end
48
- end
49
-
50
- def move_bucket_to_subdomain(bucket_name, endpoint)
51
- endpoint.host = "#{bucket_name}.#{endpoint.host}"
52
- path = endpoint.path.sub("/#{bucket_name}", '')
53
- path = "/#{path}" unless path.match(/^\//)
54
- endpoint.path = path
55
- end
56
-
57
- def https?(uri)
58
- uri.scheme == 'https'
59
- end
60
-
61
- end
62
-
26
+ # These class methods were originally used in a handler in this plugin.
27
+ # SigV2 legacy signer needs this logic so we keep it here as utility.
28
+ # New endpoint resolution will check this as a matcher.
63
29
  class << self
64
-
65
30
  # @param [String] bucket_name
66
31
  # @param [Boolean] ssl
67
32
  # @return [Boolean]
@@ -81,7 +46,6 @@ request URI and never moved to the host as a sub-domain.
81
46
  bucket_name !~ /(\d+\.){3}\d+/ &&
82
47
  bucket_name !~ /[.-]{2}/
83
48
  end
84
-
85
49
  end
86
50
  end
87
51
  end
@@ -13,12 +13,7 @@ module Aws
13
13
  def call(context)
14
14
  bucket_member = _bucket_member(context.operation.input.shape)
15
15
  if bucket_member && (bucket = context.params[bucket_member])
16
- _resolved_region, arn = ARN.resolve_arn!(
17
- bucket,
18
- context.config.region,
19
- context.config.s3_use_arn_region
20
- )
21
- if !arn && bucket.include?('/')
16
+ if !Aws::ARNParser.arn?(bucket) && bucket.include?('/')
22
17
  raise ArgumentError,
23
18
  'bucket name must not contain a forward-slash (/)'
24
19
  end
@@ -5,9 +5,8 @@ module Aws
5
5
  module Plugins
6
6
  # @api private
7
7
  class Dualstack < Seahorse::Client::Plugin
8
- def add_handlers(handlers, config)
8
+ def add_handlers(handlers, _config)
9
9
  handlers.add(OptionHandler, step: :initialize)
10
- handlers.add(DualstackHandler, step: :build, priority: 49)
11
10
  end
12
11
 
13
12
  # @api private
@@ -18,57 +17,10 @@ module Aws
18
17
  dualstack = context.params.delete(:use_dualstack_endpoint)
19
18
  end
20
19
  dualstack = context.config.use_dualstack_endpoint if dualstack.nil?
21
- # Raise if :endpoint and dualstack are both provided
22
- if dualstack && !context.config.regional_endpoint
23
- raise ArgumentError,
24
- 'Cannot use both :use_dualstack_endpoint and :endpoint'
25
- end
26
20
  context[:use_dualstack_endpoint] = dualstack
27
21
  @handler.call(context)
28
22
  end
29
23
  end
30
-
31
- # @api private
32
- class DualstackHandler < Seahorse::Client::Handler
33
- def call(context)
34
- # only rewrite the endpoint if it's not a custom endpoint
35
- # accelerate/ARN already handle dualstack cases, so ignore these
36
- # check to see if dualstack is on but configured off via operation
37
- if context.config.regional_endpoint &&
38
- use_dualstack_endpoint?(context)
39
- apply_dualstack_endpoint(context)
40
- end
41
- @handler.call(context)
42
- end
43
-
44
- private
45
-
46
- def apply_dualstack_endpoint(context)
47
- new_endpoint = Aws::Partitions::EndpointProvider.resolve(
48
- context.config.region,
49
- 's3',
50
- 'regional',
51
- {
52
- dualstack: context[:use_dualstack_endpoint],
53
- fips: context.config.use_fips_endpoint
54
- }
55
- )
56
- endpoint = URI.parse(context.http_request.endpoint.to_s)
57
- endpoint.host = URI.parse(new_endpoint).host
58
- context.http_request.endpoint = endpoint
59
- end
60
-
61
- def use_dualstack_endpoint?(context)
62
- # case when dualstack is turned off via operation
63
- (context[:use_dualstack_endpoint] ||
64
- context.config.use_dualstack_endpoint) &&
65
- # accelerate plugin already applies dualstack
66
- !context[:use_accelerate_endpoint] &&
67
- # arns handle dualstack
68
- !context.metadata[:s3_arn]
69
- end
70
- end
71
-
72
24
  end
73
25
  end
74
26
  end