aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorAlexander Pakulov <apakulov@stripe.com>2019-08-14 12:00:27 -0700
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2019-08-17 07:35:48 +0900
commit25a327d41bcb881f27acfcc58f262986a8f4e5b4 (patch)
treeb3adfbc57fbf9c2e4789c2076ec8a97373027f3f /lib
parentc4f7c260f995778a40c6fc15107090fdb51d49a8 (diff)
downloadruby-25a327d41bcb881f27acfcc58f262986a8f4e5b4.tar.gz
[rubygems/rubygems] Do not mutate uri.query during s3 signature creation
https://github.com/rubygems/rubygems/commit/c0275ee537
Diffstat (limited to 'lib')
-rw-r--r--lib/rubygems/s3_uri_signer.rb14
1 files changed, 7 insertions, 7 deletions
diff --git a/lib/rubygems/s3_uri_signer.rb b/lib/rubygems/s3_uri_signer.rb
index 437fdbf3dc..4caf07131f 100644
--- a/lib/rubygems/s3_uri_signer.rb
+++ b/lib/rubygems/s3_uri_signer.rb
@@ -49,12 +49,12 @@ class Gem::S3URISigner
credential_info = "#{date}/#{s3_config.region}/s3/aws4_request"
canonical_host = "#{uri.host}.s3.#{s3_config.region}.amazonaws.com"
- uri.query = generate_canonical_query_params(s3_config, date_time, credential_info, expiration)
- canonical_request = generate_canonical_request(canonical_host)
+ query_params = generate_canonical_query_params(s3_config, date_time, credential_info, expiration)
+ canonical_request = generate_canonical_request(canonical_host, query_params)
string_to_sign = generate_string_to_sign(date_time, credential_info, canonical_request)
signature = generate_signature(s3_config, date, string_to_sign)
- URI.parse("https://#{canonical_host}#{uri.path}?#{uri.query}&X-Amz-Signature=#{signature}")
+ URI.parse("https://#{canonical_host}#{uri.path}?#{query_params}&X-Amz-Signature=#{signature}")
end
private
@@ -76,11 +76,11 @@ class Gem::S3URISigner
end.join("&")
end
- def generate_canonical_request(canonical_host)
+ def generate_canonical_request(canonical_host, query_params)
[
"GET",
uri.path,
- uri.query,
+ query_params,
"host:#{canonical_host}",
"", # empty params
"host",
@@ -131,11 +131,11 @@ class Gem::S3URISigner
else
id = auth[:id] || auth["id"]
secret = auth[:secret] || auth["secret"]
- raise ConfigurationError.new("s3_source for #{host} missing id or secret") unless id && secret
-
security_token = auth[:security_token] || auth["security_token"]
end
+ raise ConfigurationError.new("s3_source for #{host} missing id or secret") unless id && secret
+
region = auth[:region] || auth["region"] || "us-east-1"
S3Config.new(id, secret, security_token, region)
end