From 720ae3285e26ba09b173b9f9fe0fab47fd508ff5 Mon Sep 17 00:00:00 2001 From: pjsk Date: Tue, 27 May 2025 17:42:03 -0700 Subject: [PATCH] [rubygems/rubygems] make things a bit more testable https://github.com/rubygems/rubygems/commit/29c085f5f5 --- lib/rubygems/s3_uri_signer.rb | 19 +++++++++++++------ 1 file 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:::instance-profile/ 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