summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpjsk <pjsk@stripe.com>2025-05-27 17:42:03 -0700
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2025-08-06 10:46:46 +0900
commit720ae3285e26ba09b173b9f9fe0fab47fd508ff5 (patch)
tree8665d7f980065f3024e45962679ea200612fab0e
parent8691a4ada14de39a607f96ea128184da40168b90 (diff)
[rubygems/rubygems] make things a bit more testable
https://github.com/rubygems/rubygems/commit/29c085f5f5
-rw-r--r--lib/rubygems/s3_uri_signer.rb19
1 files changed, 13 insertions, 6 deletions
diff --git a/lib/rubygems/s3_uri_signer.rb b/lib/rubygems/s3_uri_signer.rb
index bdd272a77a..41c25bc77e 100644
--- a/lib/rubygems/s3_uri_signer.rb
+++ b/lib/rubygems/s3_uri_signer.rb
@@ -147,6 +147,7 @@ class Gem::S3URISigner
require_relative "request/connection_pools"
require "json"
token = ec2_metadata_token
+
iam_info = ec2_metadata_request(EC2_IAM_INFO, token)
# Expected format: arn:aws:iam::<id>:instance-profile/<role_name>
role_name = iam_info["InstanceProfileArn"].split("/").last
@@ -154,9 +155,8 @@ class Gem::S3URISigner
end
def ec2_metadata_request(url, token)
- uri = Gem::URI(url)
- @request_pool ||= create_request_pool(uri)
- request = Gem::Request.new(uri, Gem::Net::HTTP::Get, nil, @request_pool)
+ request = ec2_iam_request(Gem::URI(url), Gem::Net::HTTP::Get)
+
response = request.fetch do |req|
req.add_field "X-aws-ec2-metadata-token", token
end
@@ -170,9 +170,8 @@ class Gem::S3URISigner
end
def ec2_metadata_token
- uri = Gem::URI(EC2_IAM_TOKEN)
- @request_pool ||= create_request_pool(uri)
- request = Gem::Request.new(uri, Gem::Net::HTTP::Put, nil, @request_pool)
+ request = ec2_iam_request(Gem::URI(EC2_IAM_TOKEN), Gem::Net::HTTP::Put)
+
response = request.fetch do |req|
req.add_field "X-aws-ec2-metadata-token-ttl-seconds", 60
end
@@ -185,6 +184,14 @@ class Gem::S3URISigner
end
end
+ def ec2_iam_request(uri, verb)
+ @request_pool ||= {}
+ @request_pool[uri] ||= create_request_pool(uri)
+ pool = @request_pool[uri]
+
+ Gem::Request.new(uri, verb, nil, pool)
+ end
+
def create_request_pool(uri)
proxy_uri = Gem::Request.proxy_uri(Gem::Request.get_proxy_from_env(uri.scheme))
certs = Gem::Request.get_cert_files