Skip to content

Commit 3678316

Browse files
authored
fix: GCECredentials lazily fetches from the metadata server to ensure a universe domain is known (#509)
1 parent 60ec865 commit 3678316

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

lib/googleauth/compute_engine.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,19 @@ def initialize options = {}
9393
super options
9494
end
9595

96+
# @private
97+
# Overrides universe_domain getter to fetch lazily if it hasn't been
98+
# fetched yet. This is necessary specifically for Compute Engine because
99+
# the universe comes from the metadata service, and isn't known
100+
# immediately on credential construction. All other credential types read
101+
# the universe from their json key or other immediate input.
102+
def universe_domain
103+
value = super
104+
return value unless value.nil?
105+
fetch_access_token!
106+
super
107+
end
108+
96109
# Overrides the super class method to change how access tokens are
97110
# fetched.
98111
def fetch_access_token _options = {}

spec/googleauth/compute_engine_spec.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ def make_auth_stubs opts
9797
expect(@client.universe_domain).to eq("googleapis.com")
9898
end
9999

100+
it "sets the universe without explicit fetch_access_token" do
101+
make_auth_stubs access_token: "1/abcde"
102+
expect(@client.universe_domain).to eq("googleapis.com")
103+
end
104+
100105
it "returns a consistent expiry using cached data" do
101106
make_auth_stubs access_token: "1/abcde"
102107
@client.fetch_access_token!
@@ -121,6 +126,11 @@ def make_auth_stubs opts
121126
expect(@client.universe_domain).to eq("googleapis.com")
122127
end
123128

129+
it "sets the universe without explicit fetch_access_token" do
130+
make_auth_stubs access_token: "1/abcde"
131+
expect(@client.universe_domain).to eq("googleapis.com")
132+
end
133+
124134
it "returns a consistent expiry using cached data" do
125135
make_auth_stubs access_token: "1/abcde"
126136
@client.fetch_access_token!
@@ -144,6 +154,11 @@ def make_auth_stubs opts
144154
expect(@client.universe_domain).to eq("myuniverse.com")
145155
end
146156

157+
it "sets the universe without explicit fetch_access_token" do
158+
make_auth_stubs access_token: "1/abcde"
159+
expect(@client.universe_domain).to eq("myuniverse.com")
160+
end
161+
147162
it "supports updating the universe_domain" do
148163
make_auth_stubs access_token: "1/abcde"
149164
@client.fetch_access_token!

0 commit comments

Comments
 (0)