aws-sigv4 1.1.0 → 1.2.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/lib/aws-sigv4/credentials.rb +10 -3
- data/lib/aws-sigv4/signer.rb +23 -16
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: bb5dcbbff098d3a214203f2ae9e9232a45a21b172975e54d53760458a3bae292
|
4
|
+
data.tar.gz: '021178fadb12d304636d9f62f437c1d4771ec73dbd331e035f0d44150cc09bf1'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: db494770a0cf87af1eabd7ff006b6f0ffa7fda832c9fb584fe5937fda36c7764ad78bd07e3837b5e2b7e32dcb7733278189b0ceb4112d4081f7f9c3df510485f
|
7
|
+
data.tar.gz: 7e8bccac2be5edba105722f8d2e2fa61c4d8167289e768b28162cb7b66dc5a9a22e3e850fdf5b65af69dc20604bc2a2433732bb4429ffffa2fb0df7271ec3e73
|
@@ -28,11 +28,14 @@ module Aws
|
|
28
28
|
# @return [String, nil]
|
29
29
|
attr_reader :session_token
|
30
30
|
|
31
|
-
# @return [Boolean]
|
31
|
+
# @return [Boolean] Returns `true` if the access key id and secret
|
32
|
+
# access key are both set.
|
32
33
|
def set?
|
33
|
-
|
34
|
+
!access_key_id.nil? &&
|
35
|
+
!access_key_id.empty? &&
|
36
|
+
!secret_access_key.nil? &&
|
37
|
+
!secret_access_key.empty?
|
34
38
|
end
|
35
|
-
|
36
39
|
end
|
37
40
|
|
38
41
|
# Users that wish to configure static credentials can use the
|
@@ -53,6 +56,10 @@ module Aws
|
|
53
56
|
# @return [Credentials]
|
54
57
|
attr_reader :credentials
|
55
58
|
|
59
|
+
# @return [Boolean]
|
60
|
+
def set?
|
61
|
+
!!credentials && credentials.set?
|
62
|
+
end
|
56
63
|
end
|
57
64
|
|
58
65
|
end
|
data/lib/aws-sigv4/signer.rb
CHANGED
@@ -123,6 +123,7 @@ module Aws
|
|
123
123
|
@unsigned_headers = Set.new((options.fetch(:unsigned_headers, [])).map(&:downcase))
|
124
124
|
@unsigned_headers << 'authorization'
|
125
125
|
@unsigned_headers << 'x-amzn-trace-id'
|
126
|
+
@unsigned_headers << 'expect'
|
126
127
|
[:uri_escape_path, :apply_checksum_header].each do |opt|
|
127
128
|
instance_variable_set("@#{opt}", options.key?(opt) ? !!options[:opt] : true)
|
128
129
|
end
|
@@ -202,7 +203,7 @@ module Aws
|
|
202
203
|
#
|
203
204
|
def sign_request(request)
|
204
205
|
|
205
|
-
creds =
|
206
|
+
creds = fetch_credentials
|
206
207
|
|
207
208
|
http_method = extract_http_method(request)
|
208
209
|
url = extract_url(request)
|
@@ -280,13 +281,13 @@ module Aws
|
|
280
281
|
# signature value (a binary string) used at ':chunk-signature' needs to converted to
|
281
282
|
# hex-encoded string using #unpack
|
282
283
|
def sign_event(prior_signature, payload, encoder)
|
283
|
-
creds =
|
284
|
+
creds = fetch_credentials
|
284
285
|
time = Time.now
|
285
286
|
headers = {}
|
286
287
|
|
287
288
|
datetime = time.utc.strftime("%Y%m%dT%H%M%SZ")
|
288
289
|
date = datetime[0,8]
|
289
|
-
headers[':date'] = Aws::EventStream::HeaderValue.new(value: time.to_i*1000, type: 'timestamp')
|
290
|
+
headers[':date'] = Aws::EventStream::HeaderValue.new(value: time.to_i * 1000, type: 'timestamp')
|
290
291
|
|
291
292
|
sts = event_string_to_sign(datetime, headers, payload, prior_signature, encoder)
|
292
293
|
sig = event_signature(creds.secret_access_key, date, sts)
|
@@ -367,7 +368,7 @@ module Aws
|
|
367
368
|
#
|
368
369
|
def presign_url(options)
|
369
370
|
|
370
|
-
creds =
|
371
|
+
creds = fetch_credentials
|
371
372
|
|
372
373
|
http_method = extract_http_method(options)
|
373
374
|
url = extract_url(options)
|
@@ -441,7 +442,7 @@ module Aws
|
|
441
442
|
def event_string_to_sign(datetime, headers, payload, prior_signature, encoder)
|
442
443
|
encoded_headers = encoder.encode_headers(
|
443
444
|
Aws::EventStream::Message.new(headers: headers, payload: payload)
|
444
|
-
)
|
445
|
+
)
|
445
446
|
[
|
446
447
|
"AWS4-HMAC-SHA256-PAYLOAD",
|
447
448
|
datetime,
|
@@ -549,18 +550,14 @@ module Aws
|
|
549
550
|
end
|
550
551
|
|
551
552
|
def host(uri)
|
552
|
-
|
553
|
+
# Handles known and unknown URI schemes; default_port nil when unknown.
|
554
|
+
if uri.default_port == uri.port
|
553
555
|
uri.host
|
554
556
|
else
|
555
557
|
"#{uri.host}:#{uri.port}"
|
556
558
|
end
|
557
559
|
end
|
558
560
|
|
559
|
-
def standard_port?(uri)
|
560
|
-
(uri.scheme == 'http' && uri.port == 80) ||
|
561
|
-
(uri.scheme == 'https' && uri.port == 443)
|
562
|
-
end
|
563
|
-
|
564
561
|
# @param [File, Tempfile, IO#read, String] value
|
565
562
|
# @return [String<SHA256 Hexdigest>]
|
566
563
|
def sha256_hexdigest(value)
|
@@ -568,7 +565,9 @@ module Aws
|
|
568
565
|
OpenSSL::Digest::SHA256.file(value).hexdigest
|
569
566
|
elsif value.respond_to?(:read)
|
570
567
|
sha256 = OpenSSL::Digest::SHA256.new
|
571
|
-
|
568
|
+
loop do
|
569
|
+
chunk = value.read(1024 * 1024) # 1MB
|
570
|
+
break unless chunk
|
572
571
|
sha256.update(chunk)
|
573
572
|
end
|
574
573
|
value.rewind
|
@@ -656,18 +655,26 @@ module Aws
|
|
656
655
|
self.class.uri_escape_path(string)
|
657
656
|
end
|
658
657
|
|
659
|
-
|
658
|
+
|
659
|
+
def fetch_credentials
|
660
660
|
credentials = @credentials_provider.credentials
|
661
661
|
if credentials_set?(credentials)
|
662
662
|
credentials
|
663
663
|
else
|
664
|
-
|
665
|
-
|
664
|
+
raise Errors::MissingCredentialsError,
|
665
|
+
'unable to sign request without credentials set'
|
666
666
|
end
|
667
667
|
end
|
668
668
|
|
669
|
+
# Returns true if credentials are set (not nil or empty)
|
670
|
+
# Credentials may not implement the Credentials interface
|
671
|
+
# and may just be credential like Client response objects
|
672
|
+
# (eg those returned by sts#assume_role)
|
669
673
|
def credentials_set?(credentials)
|
670
|
-
credentials.access_key_id &&
|
674
|
+
!credentials.access_key_id.nil? &&
|
675
|
+
!credentials.access_key_id.empty? &&
|
676
|
+
!credentials.secret_access_key.nil? &&
|
677
|
+
!credentials.secret_access_key.empty?
|
671
678
|
end
|
672
679
|
|
673
680
|
class << self
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aws-sigv4
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Amazon Web Services
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-06-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-eventstream
|
@@ -16,7 +16,7 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1
|
19
|
+
version: '1'
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: 1.0.2
|
@@ -26,11 +26,11 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '1
|
29
|
+
version: '1'
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 1.0.2
|
33
|
-
description: Amazon Web Services Signature Version 4 signing
|
33
|
+
description: Amazon Web Services Signature Version 4 signing library. Generates sigv4
|
34
34
|
signature for HTTP requests.
|
35
35
|
email:
|
36
36
|
executables: []
|
@@ -43,7 +43,7 @@ files:
|
|
43
43
|
- lib/aws-sigv4/request.rb
|
44
44
|
- lib/aws-sigv4/signature.rb
|
45
45
|
- lib/aws-sigv4/signer.rb
|
46
|
-
homepage:
|
46
|
+
homepage: https://github.com/aws/aws-sdk-ruby
|
47
47
|
licenses:
|
48
48
|
- Apache-2.0
|
49
49
|
metadata:
|
@@ -65,7 +65,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
65
65
|
version: '0'
|
66
66
|
requirements: []
|
67
67
|
rubyforge_project:
|
68
|
-
rubygems_version: 2.
|
68
|
+
rubygems_version: 2.7.6.2
|
69
69
|
signing_key:
|
70
70
|
specification_version: 4
|
71
71
|
summary: AWS Signature Version 4 library.
|