Skip to content

Commit 3feba18

Browse files
rye-stripehsbt
authored andcommitted
[rubygems/rubygems] Let s3_uri_signer accept the HTTP method
ruby/rubygems@35fc7f9547
1 parent 5d880b7 commit 3feba18

3 files changed

Lines changed: 16 additions & 16 deletions

File tree

lib/rubygems/remote_fetcher.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -267,16 +267,16 @@ def fetch_path(uri, mtime = nil, head = false)
267267

268268
def fetch_s3(uri, mtime = nil, head = false)
269269
begin
270-
public_uri = s3_uri_signer(uri, head).sign
270+
public_uri = s3_uri_signer(uri, head ? "HEAD" : "GET").sign
271271
rescue Gem::S3URISigner::ConfigurationError, Gem::S3URISigner::InstanceProfileError => e
272272
raise FetchError.new(e.message, "s3://#{uri.host}")
273273
end
274274
fetch_https public_uri, mtime, head
275275
end
276276

277277
# we have our own signing code here to avoid a dependency on the aws-sdk gem
278-
def s3_uri_signer(uri, head)
279-
Gem::S3URISigner.new(uri, head)
278+
def s3_uri_signer(uri, method)
279+
Gem::S3URISigner.new(uri, method)
280280
end
281281

282282
##

lib/rubygems/s3_uri_signer.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ def to_s # :nodoc:
2727
end
2828

2929
attr_accessor :uri
30-
attr_accessor :head
30+
attr_accessor :method
3131

32-
def initialize(uri, head)
32+
def initialize(uri, method)
3333
@uri = uri
34-
@head = head
34+
@method = method
3535
end
3636

3737
##
@@ -75,7 +75,7 @@ def generate_canonical_query_params(s3_config, date_time, credential_info, expir
7575

7676
def generate_canonical_request(canonical_host, query_params)
7777
[
78-
head ? "HEAD" : "GET",
78+
method.upcase,
7979
uri.path,
8080
query_params,
8181
"host:#{canonical_host}",

test/rubygems/test_gem_remote_fetcher_s3.rb

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def setup
1818
@a1.loaded_from = File.join(@gemhome, "specifications", @a1.full_name)
1919
end
2020

21-
def assert_fetch_s3(url, signature, token=nil, region="us-east-1", instance_profile_json=nil, head=false)
21+
def assert_fetch_s3(url, signature, token=nil, region="us-east-1", instance_profile_json=nil, method="GET")
2222
fetcher = Gem::RemoteFetcher.new nil
2323
@fetcher = fetcher
2424
$fetched_uri = nil
@@ -33,9 +33,9 @@ def res.body
3333
res
3434
end
3535

36-
def fetcher.s3_uri_signer(uri, head)
36+
def fetcher.s3_uri_signer(uri, method)
3737
require "json"
38-
s3_uri_signer = Gem::S3URISigner.new(uri, head)
38+
s3_uri_signer = Gem::S3URISigner.new(uri, method)
3939
def s3_uri_signer.ec2_metadata_credentials_json
4040
JSON.parse($instance_profile)
4141
end
@@ -45,13 +45,13 @@ def s3_uri_signer.ec2_metadata_credentials_json
4545
s3_uri_signer
4646
end
4747

48-
res = fetcher.fetch_s3 Gem::URI.parse(url), nil, head
48+
res = fetcher.fetch_s3 Gem::URI.parse(url), nil, (method == "HEAD")
4949

5050
assert_equal "https://my-bucket.s3.#{region}.amazonaws.com/gems/specs.4.8.gz?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=testuser%2F20190624%2F#{region}%2Fs3%2Faws4_request&X-Amz-Date=20190624T051941Z&X-Amz-Expires=86400#{token ? "&X-Amz-Security-Token=" + token : ""}&X-Amz-SignedHeaders=host&X-Amz-Signature=#{signature}", $fetched_uri.to_s
51-
if !head
52-
assert_equal "success", res
53-
else
51+
if method == "HEAD"
5452
assert_equal 200, res.code
53+
else
54+
assert_equal "success", res
5555
end
5656
ensure
5757
$fetched_uri = nil
@@ -78,8 +78,8 @@ def test_fetch_s3_head_request
7878
token = nil
7979
region = "us-east-1"
8080
instance_profile_json = nil
81-
head = true
82-
assert_fetch_s3 url, "a3c6cf9a2db62e85f4e57f8fc8ac8b5ff5c1fdd4aeef55935d05e05174d9c885", token, region, instance_profile_json, head
81+
method = "HEAD"
82+
assert_fetch_s3 url, "a3c6cf9a2db62e85f4e57f8fc8ac8b5ff5c1fdd4aeef55935d05e05174d9c885", token, region, instance_profile_json, method
8383
end
8484
ensure
8585
Gem.configuration[:s3_source] = nil

0 commit comments

Comments
 (0)