wt_s3_signer 1.0.1 → 1.0.2
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 +3 -0
- data/lib/wt_s3_signer.rb +14 -7
- data/lib/wt_s3_signer/version.rb +1 -1
- data/spec/url_signing_spec.rb +46 -0
- data/wt_s3_signer.gemspec +1 -0
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 799746837d300b12e2747c459c5d703d136f96f0dd9fb05dbd5319cac210c5f6
|
4
|
+
data.tar.gz: 45945fffb362ba6a0b8784b44374543c6355236a86ad88a639b9d85340ef791b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8715283bb04556b1b9e73be4e4f465c257806a8ac9779785442e6f974f025e6124c12177fb297e3f6987161c7005dac466bb6d9f573c2058588939192e12fd01
|
7
|
+
data.tar.gz: 6d3ac4005a46e40802ac438574c0c4a746a09796fcc21dcfc05d870cb3d33e5850b20adaa04473611bf65cf44020be67ddcf63305612d04b3299dfb864ab0611
|
data/CHANGELOG.md
CHANGED
data/lib/wt_s3_signer.rb
CHANGED
@@ -56,6 +56,14 @@ module WT
|
|
56
56
|
kwargs[:session_token] = credentials.session_token
|
57
57
|
|
58
58
|
new(**kwargs, **extra_attributes)
|
59
|
+
rescue Aws::S3::Errors::AccessDenied, Aws::Errors::MissingCredentialsError
|
60
|
+
# We noticed cases where errors related to AWS credentials started to happen suddenly.
|
61
|
+
# We don't know the root cause yet, but what we can do is release the
|
62
|
+
# @client instance because it contains a cache of credentials that in most cases
|
63
|
+
# is no longer valid.
|
64
|
+
@client = nil
|
65
|
+
|
66
|
+
raise
|
59
67
|
end
|
60
68
|
|
61
69
|
# Creates a new instance of WT::S3Signer
|
@@ -164,12 +172,6 @@ module WT
|
|
164
172
|
@bucket_endpoint + canonical_uri + "?" + qs_with_signature
|
165
173
|
end
|
166
174
|
|
167
|
-
private
|
168
|
-
|
169
|
-
def create_bucket(bucket_name)
|
170
|
-
Aws::S3::Bucket.new(bucket_name)
|
171
|
-
end
|
172
|
-
|
173
175
|
# AWS gems have a mechanism to cache credentials internally. So take
|
174
176
|
# advantage of this, it's necessary to use the same client instance.
|
175
177
|
def self.client
|
@@ -179,7 +181,12 @@ module WT
|
|
179
181
|
instance_profile_credentials_retries: 5,
|
180
182
|
)
|
181
183
|
end
|
182
|
-
|
184
|
+
|
185
|
+
def self.client=(client)
|
186
|
+
@client = client
|
187
|
+
end
|
188
|
+
|
189
|
+
private
|
183
190
|
|
184
191
|
def derive_signing_key(key, datestamp, region, service)
|
185
192
|
prefixed_key = "AWS4" + key
|
data/lib/wt_s3_signer/version.rb
CHANGED
data/spec/url_signing_spec.rb
CHANGED
@@ -62,5 +62,51 @@ describe WT::S3Signer do
|
|
62
62
|
expect(presigned_url1).to include("X-Amz-Expires=174")
|
63
63
|
expect(presigned_url2).to include("X-Amz-Expires=175")
|
64
64
|
end
|
65
|
+
|
66
|
+
it 'releases the singleton client when AWS raises an access denied error' do
|
67
|
+
s3_client = Aws::S3::Client.new(stub_responses: true)
|
68
|
+
described_class.client = s3_client
|
69
|
+
|
70
|
+
s3_client.stub_responses(:get_object, body: 'is here')
|
71
|
+
|
72
|
+
# just to set @client internally
|
73
|
+
described_class.for_s3_bucket(bucket, expires_in: 174)
|
74
|
+
|
75
|
+
# now, let's simulate an error on AWS
|
76
|
+
s3_client.stub_responses(
|
77
|
+
:get_bucket_location,
|
78
|
+
Aws::S3::Errors::AccessDenied.new(_context = nil, _message = nil)
|
79
|
+
)
|
80
|
+
|
81
|
+
# exercise again
|
82
|
+
expect do
|
83
|
+
described_class.for_s3_bucket(bucket, expires_in: 174)
|
84
|
+
end.to raise_error(Aws::S3::Errors::AccessDenied)
|
85
|
+
|
86
|
+
expect(described_class.client).not_to be(s3_client)
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'releases the singleton client when AWS raises a missing credentials error' do
|
90
|
+
s3_client = Aws::S3::Client.new(stub_responses: true)
|
91
|
+
described_class.client = s3_client
|
92
|
+
|
93
|
+
s3_client.stub_responses(:get_object, body: 'is here')
|
94
|
+
|
95
|
+
# just to set @client internally
|
96
|
+
described_class.for_s3_bucket(bucket, expires_in: 174)
|
97
|
+
|
98
|
+
# now, let's simulate an error on AWS
|
99
|
+
s3_client.stub_responses(
|
100
|
+
:get_bucket_location,
|
101
|
+
Aws::Errors::MissingCredentialsError.new(_context = nil, _message = nil)
|
102
|
+
)
|
103
|
+
|
104
|
+
# exercise again
|
105
|
+
expect do
|
106
|
+
described_class.for_s3_bucket(bucket, expires_in: 174)
|
107
|
+
end.to raise_error(Aws::Errors::MissingCredentialsError)
|
108
|
+
|
109
|
+
expect(described_class.client).not_to be(s3_client)
|
110
|
+
end
|
65
111
|
end
|
66
112
|
end
|
data/wt_s3_signer.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wt_s3_signer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luca Suriano
|
@@ -95,6 +95,20 @@ dependencies:
|
|
95
95
|
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: pry-byebug
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
98
112
|
description: A Ruby Gem that optimize the signing of S3 keys. The gem is especially
|
99
113
|
useful when dealing with a large amount of S3 object keys
|
100
114
|
email:
|