aws-sigv4 1.1.1 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 14842135b7b85dbb735af02ed0abf4f7b2210637
4
- data.tar.gz: ead9c20e040190ce9eedef01ab271ee168a6f91a
2
+ SHA256:
3
+ metadata.gz: 522eb318a39edd34b0c8cf779ed6cd8c9205f029a839542e6cb7cbc17d8ad05a
4
+ data.tar.gz: 1795295c553af7c4d328f4d1ef0975dbe96b88d51c7ee3965c8570474a1b3a7d
5
5
  SHA512:
6
- metadata.gz: 67efebc735d8688893603ac6c4a7167f4a4e4d667570a62546838da4d3cc07e80ea3f549b49289df298ca981b1ed4007dc7fb08d5c67a585368c8439c957413c
7
- data.tar.gz: de205f21528e37090f87164acaaf7cd8d6abdb5172a0e5c7baa9a1b422eb6af3a5bdda0ba39cb35d88b186c9cbd3e8fe41080c6173fbe85f28769ab95ae95f6f
6
+ metadata.gz: ce6b0e0987b50035d9837e4ad779f576a9ffec669c37fb09e128863630e8ecc5d86639ce350bd72a03803593fc21cdce1bc5c2e74fc29bd749e1c25f949dd052
7
+ data.tar.gz: 9bc973d9b286e07773523071b1be61f02797637efb93ab2d5e330abd66f45b4102479adfd979d7f665d7719eacd065c7bf1624ff773f4140bbe1e7cca2caf903
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'aws-sigv4/credentials'
2
4
  require_relative 'aws-sigv4/errors'
3
5
  require_relative 'aws-sigv4/signature'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Aws
2
4
  module Sigv4
3
5
  # Users that wish to configure static credentials can use the
@@ -28,11 +30,14 @@ module Aws
28
30
  # @return [String, nil]
29
31
  attr_reader :session_token
30
32
 
31
- # @return [Boolean]
33
+ # @return [Boolean] Returns `true` if the access key id and secret
34
+ # access key are both set.
32
35
  def set?
33
- !!(access_key_id && secret_access_key)
36
+ !access_key_id.nil? &&
37
+ !access_key_id.empty? &&
38
+ !secret_access_key.nil? &&
39
+ !secret_access_key.empty?
34
40
  end
35
-
36
41
  end
37
42
 
38
43
  # Users that wish to configure static credentials can use the
@@ -53,6 +58,10 @@ module Aws
53
58
  # @return [Credentials]
54
59
  attr_reader :credentials
55
60
 
61
+ # @return [Boolean]
62
+ def set?
63
+ !!credentials && credentials.set?
64
+ end
56
65
  end
57
66
 
58
67
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Aws
2
4
  module Sigv4
3
5
  module Errors
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'uri'
2
4
 
3
5
  module Aws
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Aws
2
4
  module Sigv4
3
5
  class Signature
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'openssl'
2
4
  require 'tempfile'
3
5
  require 'time'
@@ -123,6 +125,7 @@ module Aws
123
125
  @unsigned_headers = Set.new((options.fetch(:unsigned_headers, [])).map(&:downcase))
124
126
  @unsigned_headers << 'authorization'
125
127
  @unsigned_headers << 'x-amzn-trace-id'
128
+ @unsigned_headers << 'expect'
126
129
  [:uri_escape_path, :apply_checksum_header].each do |opt|
127
130
  instance_variable_set("@#{opt}", options.key?(opt) ? !!options[:opt] : true)
128
131
  end
@@ -216,7 +219,7 @@ module Aws
216
219
  content_sha256 ||= sha256_hexdigest(request[:body] || '')
217
220
 
218
221
  sigv4_headers = {}
219
- sigv4_headers['host'] = host(url)
222
+ sigv4_headers['host'] = headers['host'] || host(url)
220
223
  sigv4_headers['x-amz-date'] = datetime
221
224
  sigv4_headers['x-amz-security-token'] = creds.session_token if creds.session_token
222
225
  sigv4_headers['x-amz-content-sha256'] ||= content_sha256 if @apply_checksum_header
@@ -286,7 +289,7 @@ module Aws
286
289
 
287
290
  datetime = time.utc.strftime("%Y%m%dT%H%M%SZ")
288
291
  date = datetime[0,8]
289
- headers[':date'] = Aws::EventStream::HeaderValue.new(value: time.to_i*1000, type: 'timestamp')
292
+ headers[':date'] = Aws::EventStream::HeaderValue.new(value: time.to_i * 1000, type: 'timestamp')
290
293
 
291
294
  sts = event_string_to_sign(datetime, headers, payload, prior_signature, encoder)
292
295
  sig = event_signature(creds.secret_access_key, date, sts)
@@ -373,7 +376,7 @@ module Aws
373
376
  url = extract_url(options)
374
377
 
375
378
  headers = downcase_headers(options[:headers])
376
- headers['host'] = host(url)
379
+ headers['host'] ||= host(url)
377
380
 
378
381
  datetime = headers['x-amz-date']
379
382
  datetime ||= (options[:time] || Time.now).utc.strftime("%Y%m%dT%H%M%SZ")
@@ -441,7 +444,7 @@ module Aws
441
444
  def event_string_to_sign(datetime, headers, payload, prior_signature, encoder)
442
445
  encoded_headers = encoder.encode_headers(
443
446
  Aws::EventStream::Message.new(headers: headers, payload: payload)
444
- ).read
447
+ )
445
448
  [
446
449
  "AWS4-HMAC-SHA256-PAYLOAD",
447
450
  datetime,
@@ -564,7 +567,9 @@ module Aws
564
567
  OpenSSL::Digest::SHA256.file(value).hexdigest
565
568
  elsif value.respond_to?(:read)
566
569
  sha256 = OpenSSL::Digest::SHA256.new
567
- while chunk = value.read(1024 * 1024, buffer ||= "") # 1MB
570
+ loop do
571
+ chunk = value.read(1024 * 1024) # 1MB
572
+ break unless chunk
568
573
  sha256.update(chunk)
569
574
  end
570
575
  value.rewind
@@ -652,16 +657,28 @@ module Aws
652
657
  self.class.uri_escape_path(string)
653
658
  end
654
659
 
660
+
655
661
  def fetch_credentials
656
662
  credentials = @credentials_provider.credentials
657
- if credentials.access_key_id && credentials.secret_access_key
663
+ if credentials_set?(credentials)
658
664
  credentials
659
665
  else
660
666
  raise Errors::MissingCredentialsError,
661
- 'unable to sign request without credentials set'
667
+ 'unable to sign request without credentials set'
662
668
  end
663
669
  end
664
670
 
671
+ # Returns true if credentials are set (not nil or empty)
672
+ # Credentials may not implement the Credentials interface
673
+ # and may just be credential like Client response objects
674
+ # (eg those returned by sts#assume_role)
675
+ def credentials_set?(credentials)
676
+ !credentials.access_key_id.nil? &&
677
+ !credentials.access_key_id.empty? &&
678
+ !credentials.secret_access_key.nil? &&
679
+ !credentials.secret_access_key.empty?
680
+ end
681
+
665
682
  class << self
666
683
 
667
684
  # @api private
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.1.1
4
+ version: 1.2.1
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: 2020-02-26 00:00:00.000000000 Z
11
+ date: 2020-06-24 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.0'
19
+ version: '1'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
22
  version: 1.0.2
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '1.0'
29
+ version: '1'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 1.0.2
@@ -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.5.2.3
68
+ rubygems_version: 2.7.6.2
69
69
  signing_key:
70
70
  specification_version: 4
71
71
  summary: AWS Signature Version 4 library.