aws-sdk-s3 1.10.0 → 1.208.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 +5 -5
- data/CHANGELOG.md +1517 -0
- data/LICENSE.txt +202 -0
- data/VERSION +1 -0
- data/lib/aws-sdk-s3/access_grants_credentials.rb +57 -0
- data/lib/aws-sdk-s3/access_grants_credentials_provider.rb +250 -0
- data/lib/aws-sdk-s3/bucket.rb +1062 -99
- data/lib/aws-sdk-s3/bucket_acl.rb +67 -17
- data/lib/aws-sdk-s3/bucket_cors.rb +80 -17
- data/lib/aws-sdk-s3/bucket_lifecycle.rb +71 -19
- data/lib/aws-sdk-s3/bucket_lifecycle_configuration.rb +126 -20
- data/lib/aws-sdk-s3/bucket_logging.rb +68 -18
- data/lib/aws-sdk-s3/bucket_notification.rb +56 -20
- data/lib/aws-sdk-s3/bucket_policy.rb +108 -17
- data/lib/aws-sdk-s3/bucket_region_cache.rb +11 -5
- data/lib/aws-sdk-s3/bucket_request_payment.rb +60 -15
- data/lib/aws-sdk-s3/bucket_tagging.rb +71 -17
- data/lib/aws-sdk-s3/bucket_versioning.rb +166 -17
- data/lib/aws-sdk-s3/bucket_website.rb +78 -17
- data/lib/aws-sdk-s3/client.rb +20068 -3879
- data/lib/aws-sdk-s3/client_api.rb +1957 -209
- data/lib/aws-sdk-s3/customizations/bucket.rb +57 -38
- data/lib/aws-sdk-s3/customizations/errors.rb +40 -0
- data/lib/aws-sdk-s3/customizations/multipart_upload.rb +2 -0
- data/lib/aws-sdk-s3/customizations/object.rb +338 -68
- data/lib/aws-sdk-s3/customizations/object_summary.rb +17 -0
- data/lib/aws-sdk-s3/customizations/object_version.rb +13 -0
- data/lib/aws-sdk-s3/customizations/types/list_object_versions_output.rb +2 -0
- data/lib/aws-sdk-s3/customizations/types/permanent_redirect.rb +26 -0
- data/lib/aws-sdk-s3/customizations.rb +30 -27
- data/lib/aws-sdk-s3/default_executor.rb +103 -0
- data/lib/aws-sdk-s3/encryption/client.rb +29 -8
- data/lib/aws-sdk-s3/encryption/decrypt_handler.rb +71 -29
- data/lib/aws-sdk-s3/encryption/default_cipher_provider.rb +45 -5
- data/lib/aws-sdk-s3/encryption/default_key_provider.rb +2 -0
- data/lib/aws-sdk-s3/encryption/encrypt_handler.rb +15 -2
- data/lib/aws-sdk-s3/encryption/errors.rb +2 -0
- data/lib/aws-sdk-s3/encryption/io_auth_decrypter.rb +11 -3
- data/lib/aws-sdk-s3/encryption/io_decrypter.rb +11 -3
- data/lib/aws-sdk-s3/encryption/io_encrypter.rb +2 -0
- data/lib/aws-sdk-s3/encryption/key_provider.rb +2 -0
- data/lib/aws-sdk-s3/encryption/kms_cipher_provider.rb +48 -11
- data/lib/aws-sdk-s3/encryption/materials.rb +8 -6
- data/lib/aws-sdk-s3/encryption/utils.rb +25 -0
- data/lib/aws-sdk-s3/encryption.rb +4 -0
- data/lib/aws-sdk-s3/encryptionV2/client.rb +645 -0
- data/lib/aws-sdk-s3/encryptionV2/decrypt_handler.rb +68 -0
- data/lib/aws-sdk-s3/encryptionV2/decryption.rb +205 -0
- data/lib/aws-sdk-s3/encryptionV2/default_cipher_provider.rb +187 -0
- data/lib/aws-sdk-s3/encryptionV2/default_key_provider.rb +40 -0
- data/lib/aws-sdk-s3/encryptionV2/encrypt_handler.rb +67 -0
- data/lib/aws-sdk-s3/encryptionV2/errors.rb +37 -0
- data/lib/aws-sdk-s3/encryptionV2/io_auth_decrypter.rb +58 -0
- data/lib/aws-sdk-s3/encryptionV2/io_decrypter.rb +37 -0
- data/lib/aws-sdk-s3/encryptionV2/io_encrypter.rb +75 -0
- data/lib/aws-sdk-s3/encryptionV2/key_provider.rb +31 -0
- data/lib/aws-sdk-s3/encryptionV2/kms_cipher_provider.rb +181 -0
- data/lib/aws-sdk-s3/encryptionV2/materials.rb +60 -0
- data/lib/aws-sdk-s3/encryptionV2/utils.rb +108 -0
- data/lib/aws-sdk-s3/encryptionV3/client.rb +885 -0
- data/lib/aws-sdk-s3/encryptionV3/decrypt_handler.rb +98 -0
- data/lib/aws-sdk-s3/encryptionV3/decryption.rb +244 -0
- data/lib/aws-sdk-s3/encryptionV3/default_cipher_provider.rb +159 -0
- data/lib/aws-sdk-s3/encryptionV3/default_key_provider.rb +35 -0
- data/lib/aws-sdk-s3/encryptionV3/encrypt_handler.rb +98 -0
- data/lib/aws-sdk-s3/encryptionV3/errors.rb +47 -0
- data/lib/aws-sdk-s3/encryptionV3/io_auth_decrypter.rb +60 -0
- data/lib/aws-sdk-s3/encryptionV3/io_decrypter.rb +35 -0
- data/lib/aws-sdk-s3/encryptionV3/io_encrypter.rb +84 -0
- data/lib/aws-sdk-s3/encryptionV3/key_provider.rb +28 -0
- data/lib/aws-sdk-s3/encryptionV3/kms_cipher_provider.rb +159 -0
- data/lib/aws-sdk-s3/encryptionV3/materials.rb +58 -0
- data/lib/aws-sdk-s3/encryptionV3/utils.rb +321 -0
- data/lib/aws-sdk-s3/encryption_v2.rb +24 -0
- data/lib/aws-sdk-s3/encryption_v3.rb +24 -0
- data/lib/aws-sdk-s3/endpoint_parameters.rb +181 -0
- data/lib/aws-sdk-s3/endpoint_provider.rb +886 -0
- data/lib/aws-sdk-s3/endpoints.rb +1544 -0
- data/lib/aws-sdk-s3/errors.rb +181 -1
- data/lib/aws-sdk-s3/event_streams.rb +69 -0
- data/lib/aws-sdk-s3/express_credentials.rb +55 -0
- data/lib/aws-sdk-s3/express_credentials_provider.rb +59 -0
- data/lib/aws-sdk-s3/file_downloader.rb +261 -82
- data/lib/aws-sdk-s3/file_part.rb +16 -13
- data/lib/aws-sdk-s3/file_uploader.rb +37 -22
- data/lib/aws-sdk-s3/legacy_signer.rb +19 -26
- data/lib/aws-sdk-s3/multipart_download_error.rb +8 -0
- data/lib/aws-sdk-s3/multipart_file_uploader.rb +142 -80
- data/lib/aws-sdk-s3/multipart_stream_uploader.rb +191 -0
- data/lib/aws-sdk-s3/multipart_upload.rb +342 -31
- data/lib/aws-sdk-s3/multipart_upload_error.rb +5 -4
- data/lib/aws-sdk-s3/multipart_upload_part.rb +387 -47
- data/lib/aws-sdk-s3/object.rb +2733 -204
- data/lib/aws-sdk-s3/object_acl.rb +112 -25
- data/lib/aws-sdk-s3/object_copier.rb +9 -5
- data/lib/aws-sdk-s3/object_multipart_copier.rb +50 -23
- data/lib/aws-sdk-s3/object_summary.rb +2265 -181
- data/lib/aws-sdk-s3/object_version.rb +542 -74
- data/lib/aws-sdk-s3/plugins/accelerate.rb +17 -64
- data/lib/aws-sdk-s3/plugins/access_grants.rb +178 -0
- data/lib/aws-sdk-s3/plugins/arn.rb +70 -0
- data/lib/aws-sdk-s3/plugins/bucket_dns.rb +7 -43
- data/lib/aws-sdk-s3/plugins/bucket_name_restrictions.rb +20 -3
- data/lib/aws-sdk-s3/plugins/checksum_algorithm.rb +31 -0
- data/lib/aws-sdk-s3/plugins/dualstack.rb +7 -50
- data/lib/aws-sdk-s3/plugins/endpoints.rb +86 -0
- data/lib/aws-sdk-s3/plugins/expect_100_continue.rb +5 -4
- data/lib/aws-sdk-s3/plugins/express_session_auth.rb +88 -0
- data/lib/aws-sdk-s3/plugins/get_bucket_location_fix.rb +3 -1
- data/lib/aws-sdk-s3/plugins/http_200_errors.rb +62 -17
- data/lib/aws-sdk-s3/plugins/iad_regional_endpoint.rb +44 -0
- data/lib/aws-sdk-s3/plugins/location_constraint.rb +5 -1
- data/lib/aws-sdk-s3/plugins/md5s.rb +14 -67
- data/lib/aws-sdk-s3/plugins/redirects.rb +5 -1
- data/lib/aws-sdk-s3/plugins/s3_host_id.rb +2 -0
- data/lib/aws-sdk-s3/plugins/s3_signer.rb +67 -93
- data/lib/aws-sdk-s3/plugins/sse_cpk.rb +3 -1
- data/lib/aws-sdk-s3/plugins/streaming_retry.rb +137 -0
- data/lib/aws-sdk-s3/plugins/url_encoded_keys.rb +4 -1
- data/lib/aws-sdk-s3/presigned_post.rb +160 -99
- data/lib/aws-sdk-s3/presigner.rb +178 -81
- data/lib/aws-sdk-s3/resource.rb +164 -15
- data/lib/aws-sdk-s3/transfer_manager.rb +303 -0
- data/lib/aws-sdk-s3/types.rb +15981 -4168
- data/lib/aws-sdk-s3/waiters.rb +67 -1
- data/lib/aws-sdk-s3.rb +46 -31
- data/sig/bucket.rbs +231 -0
- data/sig/bucket_acl.rbs +78 -0
- data/sig/bucket_cors.rbs +69 -0
- data/sig/bucket_lifecycle.rbs +88 -0
- data/sig/bucket_lifecycle_configuration.rbs +115 -0
- data/sig/bucket_logging.rbs +76 -0
- data/sig/bucket_notification.rbs +114 -0
- data/sig/bucket_policy.rbs +59 -0
- data/sig/bucket_request_payment.rbs +54 -0
- data/sig/bucket_tagging.rbs +65 -0
- data/sig/bucket_versioning.rbs +77 -0
- data/sig/bucket_website.rbs +93 -0
- data/sig/client.rbs +2612 -0
- data/sig/customizations/bucket.rbs +19 -0
- data/sig/customizations/object.rbs +38 -0
- data/sig/customizations/object_summary.rbs +35 -0
- data/sig/errors.rbs +44 -0
- data/sig/multipart_upload.rbs +120 -0
- data/sig/multipart_upload_part.rbs +109 -0
- data/sig/object.rbs +464 -0
- data/sig/object_acl.rbs +86 -0
- data/sig/object_summary.rbs +347 -0
- data/sig/object_version.rbs +143 -0
- data/sig/resource.rbs +141 -0
- data/sig/types.rbs +2899 -0
- data/sig/waiters.rbs +95 -0
- metadata +97 -14
data/lib/aws-sdk-s3/errors.rb
CHANGED
|
@@ -1,14 +1,194 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# WARNING ABOUT GENERATED CODE
|
|
2
4
|
#
|
|
3
5
|
# This file is generated. See the contributing guide for more information:
|
|
4
|
-
# https://github.com/aws/aws-sdk-ruby/blob/
|
|
6
|
+
# https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
|
|
5
7
|
#
|
|
6
8
|
# WARNING ABOUT GENERATED CODE
|
|
7
9
|
|
|
8
10
|
module Aws::S3
|
|
11
|
+
|
|
12
|
+
# When S3 returns an error response, the Ruby SDK constructs and raises an error.
|
|
13
|
+
# These errors all extend Aws::S3::Errors::ServiceError < {Aws::Errors::ServiceError}
|
|
14
|
+
#
|
|
15
|
+
# You can rescue all S3 errors using ServiceError:
|
|
16
|
+
#
|
|
17
|
+
# begin
|
|
18
|
+
# # do stuff
|
|
19
|
+
# rescue Aws::S3::Errors::ServiceError
|
|
20
|
+
# # rescues all S3 API errors
|
|
21
|
+
# end
|
|
22
|
+
#
|
|
23
|
+
#
|
|
24
|
+
# ## Request Context
|
|
25
|
+
# ServiceError objects have a {Aws::Errors::ServiceError#context #context} method that returns
|
|
26
|
+
# information about the request that generated the error.
|
|
27
|
+
# See {Seahorse::Client::RequestContext} for more information.
|
|
28
|
+
#
|
|
29
|
+
# ## Error Classes
|
|
30
|
+
# * {BucketAlreadyExists}
|
|
31
|
+
# * {BucketAlreadyOwnedByYou}
|
|
32
|
+
# * {EncryptionTypeMismatch}
|
|
33
|
+
# * {IdempotencyParameterMismatch}
|
|
34
|
+
# * {InvalidObjectState}
|
|
35
|
+
# * {InvalidRequest}
|
|
36
|
+
# * {InvalidWriteOffset}
|
|
37
|
+
# * {NoSuchBucket}
|
|
38
|
+
# * {NoSuchKey}
|
|
39
|
+
# * {NoSuchUpload}
|
|
40
|
+
# * {ObjectAlreadyInActiveTierError}
|
|
41
|
+
# * {ObjectNotInActiveTierError}
|
|
42
|
+
# * {TooManyParts}
|
|
43
|
+
#
|
|
44
|
+
# Additionally, error classes are dynamically generated for service errors based on the error code
|
|
45
|
+
# if they are not defined above.
|
|
9
46
|
module Errors
|
|
10
47
|
|
|
11
48
|
extend Aws::Errors::DynamicErrors
|
|
12
49
|
|
|
50
|
+
class BucketAlreadyExists < ServiceError
|
|
51
|
+
|
|
52
|
+
# @param [Seahorse::Client::RequestContext] context
|
|
53
|
+
# @param [String] message
|
|
54
|
+
# @param [Aws::S3::Types::BucketAlreadyExists] data
|
|
55
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
|
56
|
+
super(context, message, data)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
class BucketAlreadyOwnedByYou < ServiceError
|
|
61
|
+
|
|
62
|
+
# @param [Seahorse::Client::RequestContext] context
|
|
63
|
+
# @param [String] message
|
|
64
|
+
# @param [Aws::S3::Types::BucketAlreadyOwnedByYou] data
|
|
65
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
|
66
|
+
super(context, message, data)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
class EncryptionTypeMismatch < ServiceError
|
|
71
|
+
|
|
72
|
+
# @param [Seahorse::Client::RequestContext] context
|
|
73
|
+
# @param [String] message
|
|
74
|
+
# @param [Aws::S3::Types::EncryptionTypeMismatch] data
|
|
75
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
|
76
|
+
super(context, message, data)
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
class IdempotencyParameterMismatch < ServiceError
|
|
81
|
+
|
|
82
|
+
# @param [Seahorse::Client::RequestContext] context
|
|
83
|
+
# @param [String] message
|
|
84
|
+
# @param [Aws::S3::Types::IdempotencyParameterMismatch] data
|
|
85
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
|
86
|
+
super(context, message, data)
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
class InvalidObjectState < ServiceError
|
|
91
|
+
|
|
92
|
+
# @param [Seahorse::Client::RequestContext] context
|
|
93
|
+
# @param [String] message
|
|
94
|
+
# @param [Aws::S3::Types::InvalidObjectState] data
|
|
95
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
|
96
|
+
super(context, message, data)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# @return [String]
|
|
100
|
+
def storage_class
|
|
101
|
+
@data[:storage_class]
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# @return [String]
|
|
105
|
+
def access_tier
|
|
106
|
+
@data[:access_tier]
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
class InvalidRequest < ServiceError
|
|
111
|
+
|
|
112
|
+
# @param [Seahorse::Client::RequestContext] context
|
|
113
|
+
# @param [String] message
|
|
114
|
+
# @param [Aws::S3::Types::InvalidRequest] data
|
|
115
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
|
116
|
+
super(context, message, data)
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
class InvalidWriteOffset < ServiceError
|
|
121
|
+
|
|
122
|
+
# @param [Seahorse::Client::RequestContext] context
|
|
123
|
+
# @param [String] message
|
|
124
|
+
# @param [Aws::S3::Types::InvalidWriteOffset] data
|
|
125
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
|
126
|
+
super(context, message, data)
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
class NoSuchBucket < ServiceError
|
|
131
|
+
|
|
132
|
+
# @param [Seahorse::Client::RequestContext] context
|
|
133
|
+
# @param [String] message
|
|
134
|
+
# @param [Aws::S3::Types::NoSuchBucket] data
|
|
135
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
|
136
|
+
super(context, message, data)
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
class NoSuchKey < ServiceError
|
|
141
|
+
|
|
142
|
+
# @param [Seahorse::Client::RequestContext] context
|
|
143
|
+
# @param [String] message
|
|
144
|
+
# @param [Aws::S3::Types::NoSuchKey] data
|
|
145
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
|
146
|
+
super(context, message, data)
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
class NoSuchUpload < ServiceError
|
|
151
|
+
|
|
152
|
+
# @param [Seahorse::Client::RequestContext] context
|
|
153
|
+
# @param [String] message
|
|
154
|
+
# @param [Aws::S3::Types::NoSuchUpload] data
|
|
155
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
|
156
|
+
super(context, message, data)
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
class ObjectAlreadyInActiveTierError < ServiceError
|
|
161
|
+
|
|
162
|
+
# @param [Seahorse::Client::RequestContext] context
|
|
163
|
+
# @param [String] message
|
|
164
|
+
# @param [Aws::S3::Types::ObjectAlreadyInActiveTierError] data
|
|
165
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
|
166
|
+
super(context, message, data)
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
class ObjectNotInActiveTierError < ServiceError
|
|
171
|
+
|
|
172
|
+
# @param [Seahorse::Client::RequestContext] context
|
|
173
|
+
# @param [String] message
|
|
174
|
+
# @param [Aws::S3::Types::ObjectNotInActiveTierError] data
|
|
175
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
|
176
|
+
super(context, message, data)
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
class TooManyParts < ServiceError
|
|
181
|
+
|
|
182
|
+
# @param [Seahorse::Client::RequestContext] context
|
|
183
|
+
# @param [String] message
|
|
184
|
+
# @param [Aws::S3::Types::TooManyParts] data
|
|
185
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
|
186
|
+
super(context, message, data)
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
|
|
13
190
|
end
|
|
14
191
|
end
|
|
192
|
+
|
|
193
|
+
# Load customizations if they exist
|
|
194
|
+
require 'aws-sdk-s3/customizations/errors'
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# WARNING ABOUT GENERATED CODE
|
|
4
|
+
#
|
|
5
|
+
# This file is generated. See the contributing guide for more information:
|
|
6
|
+
# https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
|
|
7
|
+
#
|
|
8
|
+
# WARNING ABOUT GENERATED CODE
|
|
9
|
+
|
|
10
|
+
module Aws::S3
|
|
11
|
+
module EventStreams
|
|
12
|
+
class SelectObjectContentEventStream
|
|
13
|
+
|
|
14
|
+
def initialize
|
|
15
|
+
@event_emitter = Aws::EventEmitter.new
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def on_records_event(&block)
|
|
19
|
+
@event_emitter.on(:records, block) if block_given?
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def on_stats_event(&block)
|
|
23
|
+
@event_emitter.on(:stats, block) if block_given?
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def on_progress_event(&block)
|
|
27
|
+
@event_emitter.on(:progress, block) if block_given?
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def on_cont_event(&block)
|
|
31
|
+
@event_emitter.on(:cont, block) if block_given?
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def on_end_event(&block)
|
|
35
|
+
@event_emitter.on(:end, block) if block_given?
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def on_error_event(&block)
|
|
39
|
+
@event_emitter.on(:error, block) if block_given?
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def on_initial_response_event(&block)
|
|
43
|
+
@event_emitter.on(:initial_response, block) if block_given?
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def on_unknown_event(&block)
|
|
47
|
+
@event_emitter.on(:unknown_event, block) if block_given?
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def on_event(&block)
|
|
51
|
+
on_records_event(&block)
|
|
52
|
+
on_stats_event(&block)
|
|
53
|
+
on_progress_event(&block)
|
|
54
|
+
on_cont_event(&block)
|
|
55
|
+
on_end_event(&block)
|
|
56
|
+
on_error_event(&block)
|
|
57
|
+
on_initial_response_event(&block)
|
|
58
|
+
on_unknown_event(&block)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# @api private
|
|
62
|
+
# @return Aws::EventEmitter
|
|
63
|
+
attr_reader :event_emitter
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'set'
|
|
4
|
+
|
|
5
|
+
module Aws
|
|
6
|
+
module S3
|
|
7
|
+
# @api private
|
|
8
|
+
class ExpressCredentials
|
|
9
|
+
include CredentialProvider
|
|
10
|
+
include RefreshingCredentials
|
|
11
|
+
|
|
12
|
+
SYNC_EXPIRATION_LENGTH = 60 # 1 minute
|
|
13
|
+
ASYNC_EXPIRATION_LENGTH = 120 # 2 minutes
|
|
14
|
+
|
|
15
|
+
def initialize(options = {})
|
|
16
|
+
@client = options[:client]
|
|
17
|
+
@create_session_params = {}
|
|
18
|
+
options.each_pair do |key, value|
|
|
19
|
+
if self.class.create_session_options.include?(key)
|
|
20
|
+
@create_session_params[key] = value
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
@async_refresh = true
|
|
24
|
+
super
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# @return [S3::Client]
|
|
28
|
+
attr_reader :client
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
def refresh
|
|
33
|
+
c = @client.create_session(@create_session_params).credentials
|
|
34
|
+
@credentials = Credentials.new(
|
|
35
|
+
c.access_key_id,
|
|
36
|
+
c.secret_access_key,
|
|
37
|
+
c.session_token
|
|
38
|
+
)
|
|
39
|
+
@expiration = c.expiration
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
class << self
|
|
43
|
+
|
|
44
|
+
# @api private
|
|
45
|
+
def create_session_options
|
|
46
|
+
@cso ||= begin
|
|
47
|
+
input = S3::Client.api.operation(:create_session).input
|
|
48
|
+
Set.new(input.shape.member_names)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Aws
|
|
4
|
+
module S3
|
|
5
|
+
# @api private
|
|
6
|
+
def self.express_credentials_cache
|
|
7
|
+
@express_credentials_cache ||= LRUCache.new(max_entries: 100)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Returns Credentials class for S3 Express. Accepts CreateSession
|
|
11
|
+
# params as options. See {Client#create_session} for details.
|
|
12
|
+
class ExpressCredentialsProvider
|
|
13
|
+
# @param [Hash] options
|
|
14
|
+
# @option options [Client] :client The S3 client used to create the
|
|
15
|
+
# session.
|
|
16
|
+
# @option options [String] :session_mode (see: {Client#create_session})
|
|
17
|
+
# @option options [Boolean] :caching (true) When true, credentials will
|
|
18
|
+
# be cached.
|
|
19
|
+
# @option options [Callable] :before_refresh Proc called before
|
|
20
|
+
# credentials are refreshed.
|
|
21
|
+
def initialize(options = {})
|
|
22
|
+
@client = options.delete(:client)
|
|
23
|
+
@caching = options.delete(:caching) != false
|
|
24
|
+
@options = options
|
|
25
|
+
return unless @caching
|
|
26
|
+
|
|
27
|
+
@cache = Aws::S3.express_credentials_cache
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def express_credentials_for(bucket)
|
|
31
|
+
if @caching
|
|
32
|
+
cached_credentials_for(bucket)
|
|
33
|
+
else
|
|
34
|
+
new_credentials_for(bucket)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
attr_accessor :client
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
|
|
42
|
+
def cached_credentials_for(bucket)
|
|
43
|
+
if @cache.key?(bucket)
|
|
44
|
+
@cache[bucket]
|
|
45
|
+
else
|
|
46
|
+
@cache[bucket] = new_credentials_for(bucket)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def new_credentials_for(bucket)
|
|
51
|
+
ExpressCredentials.new(
|
|
52
|
+
bucket: bucket,
|
|
53
|
+
client: @client,
|
|
54
|
+
**@options
|
|
55
|
+
)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|