diff options
| author | pjsk <pjsk@stripe.com> | 2025-05-27 17:42:03 -0700 |
|---|---|---|
| committer | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2025-08-06 10:46:46 +0900 |
| commit | 720ae3285e26ba09b173b9f9fe0fab47fd508ff5 (patch) | |
| tree | 8665d7f980065f3024e45962679ea200612fab0e | |
| parent | 8691a4ada14de39a607f96ea128184da40168b90 (diff) | |
[rubygems/rubygems] make things a bit more testable
https://github.com/rubygems/rubygems/commit/29c085f5f5
| -rw-r--r-- | lib/rubygems/s3_uri_signer.rb | 19 |
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 |
