googleauth 0.6.7 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 05003f9b094636f9937a9f94fd9abcc6eddb55610218b3e96a81d8cf0e2063e1
4
- data.tar.gz: 852e87ca3688a90a6e623fd896b340a7c2540d237d8884056b98a1000f4c3d44
3
+ metadata.gz: 105a3281fcd2fa4a6a90f122c62e3f852f9c116172edd83c9ac759a93ff8ba78
4
+ data.tar.gz: 40078f9fc7910a259496f600d84a50d97722e62cf5c125a9c74f1994a2620553
5
5
  SHA512:
6
- metadata.gz: fbcc424cf05e996efcd94a3f8012c61cacd37228da6723860fd6d6110e93316c246c534fc3be3af5f511afc6944ef52ced8e4c40f0b8299de75de38772257b5b
7
- data.tar.gz: 86356649a35b0f3e3ac1137f4af792a0c6e37fd4a9f3a5cfbed3030eea67dcbca8132b07565c493b23f4872fddf8426c2f704c84fd679242db92ef6d47b17b0b
6
+ metadata.gz: 8693833fa1fe3ae6a95e24e35131167ff0a8ecca9704038c93939d181360f9b75bb8d0987914daaf2cd804d7ae82b49e78df3a2d8084fc4dc8d0a620e2b7d21b
7
+ data.tar.gz: 8d1658ef226f85c084b317454bd24dda581eb439d89946fcbc1b3fa2f9393a086bb5b668cd2ba18d8eb8feb3323682101907651ce51aae3273de14c350d5f8f1
@@ -1,3 +1,11 @@
1
+ ## 0.7.1 (2018/10/25)
2
+
3
+ * Make load_gcloud_project_id module function.
4
+
5
+ ## 0.7.0 (2018/10/24)
6
+
7
+ * Add project_id instance variable to UserRefreshCredentials, ServiceAccountCredentials, and Credentials.
8
+
1
9
  ## 0.6.7 (2018/10/16)
2
10
 
3
11
  * Update memoist dependency to ~> 0.16.
@@ -27,6 +27,8 @@
27
27
  # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
28
  # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
29
 
30
+ # rubocop:disable Metrics/AbcSize, Metrics/PerceivedComplexity, MethodLength
31
+
30
32
  require 'forwardable'
31
33
  require 'json'
32
34
  require 'signet/oauth_2/client'
@@ -46,6 +48,7 @@ module Google
46
48
  DEFAULT_PATHS = [].freeze
47
49
 
48
50
  attr_accessor :client
51
+ attr_reader :project_id
49
52
 
50
53
  # Delegate client methods to the client object.
51
54
  extend Forwardable
@@ -56,19 +59,24 @@ module Google
56
59
  def initialize(keyfile, options = {})
57
60
  scope = options[:scope]
58
61
  verify_keyfile_provided! keyfile
62
+ @project_id = options['project_id'] || options['project']
59
63
  if keyfile.is_a? Signet::OAuth2::Client
60
64
  @client = keyfile
65
+ @project_id ||= keyfile.project_id if keyfile.respond_to? :project_id
61
66
  elsif keyfile.is_a? Hash
62
67
  hash = stringify_hash_keys keyfile
63
68
  hash['scope'] ||= scope
64
69
  @client = init_client hash
70
+ @project_id ||= (hash['project_id'] || hash['project'])
65
71
  else
66
72
  verify_keyfile_exists! keyfile
67
73
  json = JSON.parse ::File.read(keyfile)
68
74
  json['scope'] ||= scope
75
+ @project_id ||= (json['project_id'] || json['project'])
69
76
  @client = init_client json
70
77
  end
71
78
  CredentialsLoader.warn_if_cloud_sdk_credentials @client.client_id
79
+ @project_id ||= CredentialsLoader.load_gcloud_project_id
72
80
  @client.fetch_access_token!
73
81
  end
74
82
 
@@ -39,14 +39,17 @@ module Google
39
39
  # credentials files on the file system.
40
40
  module CredentialsLoader
41
41
  extend Memoist
42
- ENV_VAR = 'GOOGLE_APPLICATION_CREDENTIALS'.freeze
43
-
44
- PRIVATE_KEY_VAR = 'GOOGLE_PRIVATE_KEY'.freeze
45
- CLIENT_EMAIL_VAR = 'GOOGLE_CLIENT_EMAIL'.freeze
46
- CLIENT_ID_VAR = 'GOOGLE_CLIENT_ID'.freeze
47
- CLIENT_SECRET_VAR = 'GOOGLE_CLIENT_SECRET'.freeze
48
- REFRESH_TOKEN_VAR = 'GOOGLE_REFRESH_TOKEN'.freeze
49
- ACCOUNT_TYPE_VAR = 'GOOGLE_ACCOUNT_TYPE'.freeze
42
+ ENV_VAR = 'GOOGLE_APPLICATION_CREDENTIALS'.freeze
43
+ PRIVATE_KEY_VAR = 'GOOGLE_PRIVATE_KEY'.freeze
44
+ CLIENT_EMAIL_VAR = 'GOOGLE_CLIENT_EMAIL'.freeze
45
+ CLIENT_ID_VAR = 'GOOGLE_CLIENT_ID'.freeze
46
+ CLIENT_SECRET_VAR = 'GOOGLE_CLIENT_SECRET'.freeze
47
+ REFRESH_TOKEN_VAR = 'GOOGLE_REFRESH_TOKEN'.freeze
48
+ ACCOUNT_TYPE_VAR = 'GOOGLE_ACCOUNT_TYPE'.freeze
49
+ PROJECT_ID_VAR = 'GOOGLE_PROJECT_ID'.freeze
50
+ GCLOUD_POSIX_COMMAND = 'gcloud'.freeze
51
+ GCLOUD_WINDOWS_COMMAND = 'gcloud.cmd'.freeze
52
+ GCLOUD_CONFIG_COMMAND = 'config config-helper --format json'.freeze
50
53
 
51
54
  CREDENTIALS_FILE_NAME = 'application_default_credentials.json'.freeze
52
55
  NOT_FOUND_ERROR =
@@ -136,6 +139,16 @@ module Google
136
139
  end
137
140
  module_function :warn_if_cloud_sdk_credentials
138
141
 
142
+ def load_gcloud_project_id
143
+ gcloud = GCLOUD_WINDOWS_COMMAND if OS.windows?
144
+ gcloud = GCLOUD_POSIX_COMMAND unless OS.windows?
145
+ config = MultiJson.load(`#{gcloud} #{GCLOUD_CONFIG_COMMAND}`)
146
+ config['configuration']['properties']['core']['project']
147
+ rescue
148
+ warn 'Unable to determine project id.'
149
+ end
150
+ module_function :load_gcloud_project_id
151
+
139
152
  private
140
153
 
141
154
  def service_account_env_vars?
@@ -38,7 +38,8 @@ module Google
38
38
  json_key = MultiJson.load(json_key_io.read)
39
39
  raise 'missing client_email' unless json_key.key?('client_email')
40
40
  raise 'missing private_key' unless json_key.key?('private_key')
41
- [json_key['private_key'], json_key['client_email']]
41
+ project_id = json_key['project_id']
42
+ [json_key['private_key'], json_key['client_email'], project_id]
42
43
  end
43
44
  end
44
45
  end
@@ -50,6 +50,7 @@ module Google
50
50
  TOKEN_CRED_URI = 'https://www.googleapis.com/oauth2/v4/token'.freeze
51
51
  extend CredentialsLoader
52
52
  extend JsonKeyReader
53
+ attr_reader :project_id
53
54
 
54
55
  # Creates a ServiceAccountCredentials.
55
56
  #
@@ -58,17 +59,20 @@ module Google
58
59
  def self.make_creds(options = {})
59
60
  json_key_io, scope = options.values_at(:json_key_io, :scope)
60
61
  if json_key_io
61
- private_key, client_email = read_json_key(json_key_io)
62
+ private_key, client_email, project_id = read_json_key(json_key_io)
62
63
  else
63
64
  private_key = unescape ENV[CredentialsLoader::PRIVATE_KEY_VAR]
64
65
  client_email = ENV[CredentialsLoader::CLIENT_EMAIL_VAR]
66
+ project_id = ENV[CredentialsLoader::PROJECT_ID_VAR]
65
67
  end
68
+ project_id ||= CredentialsLoader.load_gcloud_project_id
66
69
 
67
70
  new(token_credential_uri: TOKEN_CRED_URI,
68
71
  audience: TOKEN_CRED_URI,
69
72
  scope: scope,
70
73
  issuer: client_email,
71
- signing_key: OpenSSL::PKey::RSA.new(private_key))
74
+ signing_key: OpenSSL::PKey::RSA.new(private_key),
75
+ project_id: project_id)
72
76
  end
73
77
 
74
78
  # Handles certain escape sequences that sometimes appear in input.
@@ -81,6 +85,7 @@ module Google
81
85
  end
82
86
 
83
87
  def initialize(options = {})
88
+ @project_id = options[:project_id]
84
89
  super(options)
85
90
  end
86
91
 
@@ -126,6 +131,7 @@ module Google
126
131
  EXPIRY = 60
127
132
  extend CredentialsLoader
128
133
  extend JsonKeyReader
134
+ attr_reader :project_id
129
135
 
130
136
  # make_creds proxies the construction of a credentials instance
131
137
  #
@@ -144,14 +150,15 @@ module Google
144
150
  def initialize(options = {})
145
151
  json_key_io = options[:json_key_io]
146
152
  if json_key_io
147
- private_key, client_email = self.class.read_json_key(json_key_io)
153
+ @private_key, @issuer, @project_id =
154
+ self.class.read_json_key(json_key_io)
148
155
  else
149
- private_key = ENV[CredentialsLoader::PRIVATE_KEY_VAR]
150
- client_email = ENV[CredentialsLoader::CLIENT_EMAIL_VAR]
156
+ @private_key = ENV[CredentialsLoader::PRIVATE_KEY_VAR]
157
+ @issuer = ENV[CredentialsLoader::CLIENT_EMAIL_VAR]
158
+ @project_id = ENV[CredentialsLoader::PROJECT_ID_VAR]
151
159
  end
152
- @private_key = private_key
153
- @issuer = client_email
154
- @signing_key = OpenSSL::PKey::RSA.new(private_key)
160
+ @project_id ||= CredentialsLoader.load_gcloud_project_id
161
+ @signing_key = OpenSSL::PKey::RSA.new(@private_key)
155
162
  end
156
163
 
157
164
  # Construct a jwt token if the JWT_AUD_URI key is present in the input
@@ -50,6 +50,7 @@ module Google
50
50
  AUTHORIZATION_URI = 'https://accounts.google.com/o/oauth2/auth'.freeze
51
51
  REVOKE_TOKEN_URI = 'https://oauth2.googleapis.com/revoke'.freeze
52
52
  extend CredentialsLoader
53
+ attr_reader :project_id
53
54
 
54
55
  # Create a UserRefreshCredentials.
55
56
  #
@@ -61,13 +62,15 @@ module Google
61
62
  user_creds ||= {
62
63
  'client_id' => ENV[CredentialsLoader::CLIENT_ID_VAR],
63
64
  'client_secret' => ENV[CredentialsLoader::CLIENT_SECRET_VAR],
64
- 'refresh_token' => ENV[CredentialsLoader::REFRESH_TOKEN_VAR]
65
+ 'refresh_token' => ENV[CredentialsLoader::REFRESH_TOKEN_VAR],
66
+ 'project_id' => ENV[CredentialsLoader::PROJECT_ID_VAR]
65
67
  }
66
68
 
67
69
  new(token_credential_uri: TOKEN_CRED_URI,
68
70
  client_id: user_creds['client_id'],
69
71
  client_secret: user_creds['client_secret'],
70
72
  refresh_token: user_creds['refresh_token'],
73
+ project_id: user_creds['project_id'],
71
74
  scope: scope)
72
75
  end
73
76
 
@@ -86,6 +89,8 @@ module Google
86
89
  options ||= {}
87
90
  options[:token_credential_uri] ||= TOKEN_CRED_URI
88
91
  options[:authorization_uri] ||= AUTHORIZATION_URI
92
+ @project_id = options[:project_id]
93
+ @project_id ||= CredentialsLoader.load_gcloud_project_id
89
94
  super(options)
90
95
  end
91
96
 
@@ -31,6 +31,6 @@ module Google
31
31
  # Module Auth provides classes that provide Google-specific authorization
32
32
  # used to access Google APIs.
33
33
  module Auth
34
- VERSION = '0.6.7'.freeze
34
+ VERSION = '0.7.1'.freeze
35
35
  end
36
36
  end
@@ -40,7 +40,8 @@ describe Google::Auth::Credentials, :private do
40
40
  'private_key' => "-----BEGIN RSA PRIVATE KEY-----\nMIIBOwIBAAJBAOyi0Hy1l4Ym2m2o71Q0TF4O9E81isZEsX0bb+Bqz1SXEaSxLiXM\nUZE8wu0eEXivXuZg6QVCW/5l+f2+9UPrdNUCAwEAAQJAJkqubA/Chj3RSL92guy3\nktzeodarLyw8gF8pOmpuRGSiEo/OLTeRUMKKD1/kX4f9sxf3qDhB4e7dulXR1co/\nIQIhAPx8kMW4XTTL6lJYd2K5GrH8uBMp8qL5ya3/XHrBgw3dAiEA7+3Iw3ULTn2I\n1J34WlJ2D5fbzMzB4FAHUNEV7Ys3f1kCIQDtUahCMChrl7+H5t9QS+xrn77lRGhs\nB50pjvy95WXpgQIhAI2joW6JzTfz8fAapb+kiJ/h9Vcs1ZN3iyoRlNFb61JZAiA8\nNy5NyNrMVwtB/lfJf1dAK/p/Bwd8LZLtgM6PapRfgw==\n-----END RSA PRIVATE KEY-----\n",
41
41
  'client_email' => 'credz-testabc1234567890xyz@developer.gserviceaccount.com',
42
42
  'client_id' => 'credz-testabc1234567890xyz.apps.googleusercontent.com',
43
- 'type' => 'service_account'
43
+ 'type' => 'service_account',
44
+ 'project_id' => 'a_project_id'
44
45
  }
45
46
  end
46
47
 
@@ -110,6 +111,7 @@ describe Google::Auth::Credentials, :private do
110
111
  creds = TestCredentials.default
111
112
  expect(creds).to be_a_kind_of(TestCredentials)
112
113
  expect(creds.client).to eq(mocked_signet)
114
+ expect(creds.project_id).to eq(default_keyfile_hash['project_id'])
113
115
  end
114
116
 
115
117
  it 'subclasses can use PATH_ENV_VARS to get keyfile path' do
@@ -142,6 +144,7 @@ describe Google::Auth::Credentials, :private do
142
144
  creds = TestCredentials.default
143
145
  expect(creds).to be_a_kind_of(TestCredentials)
144
146
  expect(creds.client).to eq(mocked_signet)
147
+ expect(creds.project_id).to eq(default_keyfile_hash['project_id'])
145
148
  end
146
149
 
147
150
  it 'subclasses can use JSON_ENV_VARS to get keyfile contents' do
@@ -173,6 +176,7 @@ describe Google::Auth::Credentials, :private do
173
176
  creds = TestCredentials.default
174
177
  expect(creds).to be_a_kind_of(TestCredentials)
175
178
  expect(creds.client).to eq(mocked_signet)
179
+ expect(creds.project_id).to eq(default_keyfile_hash['project_id'])
176
180
  end
177
181
 
178
182
  it 'subclasses can use DEFAULT_PATHS to get keyfile path' do
@@ -205,6 +209,7 @@ describe Google::Auth::Credentials, :private do
205
209
  creds = TestCredentials.default
206
210
  expect(creds).to be_a_kind_of(TestCredentials)
207
211
  expect(creds.client).to eq(mocked_signet)
212
+ expect(creds.project_id).to eq(default_keyfile_hash['project_id'])
208
213
  end
209
214
 
210
215
  it 'subclasses that find no matches default to Google::Auth.get_application_default' do
@@ -243,6 +248,7 @@ describe Google::Auth::Credentials, :private do
243
248
  creds = TestCredentials.default
244
249
  expect(creds).to be_a_kind_of(TestCredentials)
245
250
  expect(creds.client).to eq(mocked_signet)
251
+ expect(creds.project_id).to eq(default_keyfile_hash['project_id'])
246
252
  end
247
253
 
248
254
  it 'warns when cloud sdk credentials are used' do
@@ -35,6 +35,7 @@ require 'faraday'
35
35
  require 'fakefs/safe'
36
36
  require 'googleauth'
37
37
  require 'spec_helper'
38
+ require 'os'
38
39
 
39
40
  describe '#get_application_default' do
40
41
  # Pass unique options each time to bypass memoization
@@ -173,6 +174,7 @@ describe '#get_application_default' do
173
174
  ENV[CLIENT_SECRET_VAR] = cred_json[:client_secret]
174
175
  ENV[REFRESH_TOKEN_VAR] = cred_json[:refresh_token]
175
176
  ENV[ACCOUNT_TYPE_VAR] = cred_json[:type]
177
+ ENV[PROJECT_ID_VAR] = 'a_project_id'
176
178
  expect { Google::Auth.get_application_default @scope, options }.to output(
177
179
  Google::Auth::CredentialsLoader::CLOUD_SDK_CREDENTIALS_WARNING + "\n"
178
180
  ).to_stderr
@@ -260,6 +262,7 @@ describe '#get_application_default' do
260
262
  end
261
263
 
262
264
  it 'fails if env vars are set' do
265
+ ENV[ENV_VAR] = nil
263
266
  ENV[PRIVATE_KEY_VAR] = cred_json[:private_key]
264
267
  ENV[CLIENT_EMAIL_VAR] = cred_json[:client_email]
265
268
  expect do
@@ -116,7 +116,8 @@ describe Google::Auth::ServiceAccountCredentials do
116
116
  private_key: @key.to_pem,
117
117
  client_email: client_email,
118
118
  client_id: 'app.apps.googleusercontent.com',
119
- type: 'service_account'
119
+ type: 'service_account',
120
+ project_id: 'a_project_id'
120
121
  }
121
122
  end
122
123
 
@@ -213,6 +214,15 @@ describe Google::Auth::ServiceAccountCredentials do
213
214
  expect(@clz.from_env(@scope)).to_not be_nil
214
215
  end
215
216
 
217
+ it 'sets project_id when the PROJECT_ID_VAR env var is set' do
218
+ ENV[PRIVATE_KEY_VAR] = cred_json[:private_key]
219
+ ENV[CLIENT_EMAIL_VAR] = cred_json[:client_email]
220
+ ENV[PROJECT_ID_VAR] = cred_json[:project_id]
221
+ ENV[ENV_VAR] = nil
222
+ credentials = @clz.from_env(@scope)
223
+ expect(credentials.project_id).to eq(cred_json[:project_id])
224
+ end
225
+
216
226
  it 'succeeds when GOOGLE_PRIVATE_KEY is escaped' do
217
227
  escaped_key = cred_json[:private_key].gsub "\n", '\n'
218
228
  ENV[PRIVATE_KEY_VAR] = "\"#{escaped_key}\""
@@ -251,6 +261,19 @@ describe Google::Auth::ServiceAccountCredentials do
251
261
  expect(@clz.from_well_known_path(@scope)).to_not be_nil
252
262
  end
253
263
  end
264
+
265
+ it 'successfully sets project_id when file is present' do
266
+ Dir.mktmpdir do |dir|
267
+ key_path = File.join(dir, '.config', @known_path)
268
+ key_path = File.join(dir, WELL_KNOWN_PATH) if OS.windows?
269
+ FileUtils.mkdir_p(File.dirname(key_path))
270
+ File.write(key_path, cred_json_text)
271
+ ENV['HOME'] = dir
272
+ ENV['APPDATA'] = dir
273
+ credentials = @clz.from_well_known_path(@scope)
274
+ expect(credentials.project_id).to eq(cred_json[:project_id])
275
+ end
276
+ end
254
277
  end
255
278
 
256
279
  describe '#from_system_default_path' do
@@ -297,7 +320,8 @@ describe Google::Auth::ServiceAccountJwtHeaderCredentials do
297
320
  private_key: @key.to_pem,
298
321
  client_email: client_email,
299
322
  client_id: 'app.apps.googleusercontent.com',
300
- type: 'service_account'
323
+ type: 'service_account',
324
+ project_id: 'a_project_id'
301
325
  }
302
326
  end
303
327
 
@@ -358,6 +382,16 @@ describe Google::Auth::ServiceAccountJwtHeaderCredentials do
358
382
  ENV[CLIENT_EMAIL_VAR] = cred_json[:client_email]
359
383
  expect(clz.from_env(@scope)).to_not be_nil
360
384
  end
385
+
386
+ it 'sets project_id when the PROJECT_ID_VAR env var is set' do
387
+ ENV[PRIVATE_KEY_VAR] = cred_json[:private_key]
388
+ ENV[CLIENT_EMAIL_VAR] = cred_json[:client_email]
389
+ ENV[PROJECT_ID_VAR] = cred_json[:project_id]
390
+ ENV[ENV_VAR] = nil
391
+ credentials = clz.from_env(@scope)
392
+ expect(credentials).to_not be_nil
393
+ expect(credentials.project_id).to eq(cred_json[:project_id])
394
+ end
361
395
  end
362
396
 
363
397
  describe '#from_well_known_path' do
@@ -387,5 +421,18 @@ describe Google::Auth::ServiceAccountJwtHeaderCredentials do
387
421
  expect(clz.from_well_known_path).to_not be_nil
388
422
  end
389
423
  end
424
+
425
+ it 'successfully sets project_id when file is present' do
426
+ Dir.mktmpdir do |dir|
427
+ key_path = File.join(dir, '.config', WELL_KNOWN_PATH)
428
+ key_path = File.join(dir, WELL_KNOWN_PATH) if OS.windows?
429
+ FileUtils.mkdir_p(File.dirname(key_path))
430
+ File.write(key_path, cred_json_text)
431
+ ENV['HOME'] = dir
432
+ ENV['APPDATA'] = dir
433
+ credentials = clz.from_well_known_path(@scope)
434
+ expect(credentials.project_id).to eq(cred_json[:project_id])
435
+ end
436
+ end
390
437
  end
391
438
  end
@@ -94,6 +94,7 @@ describe Google::Auth::UserRefreshCredentials do
94
94
  @credential_vars.each { |var| @original_env_vals[var] = ENV[var] }
95
95
  @scope = 'https://www.googleapis.com/auth/userinfo.profile'
96
96
  @clz = UserRefreshCredentials
97
+ @project_id = 'a_project_id'
97
98
  end
98
99
 
99
100
  after(:example) do
@@ -140,6 +141,7 @@ describe Google::Auth::UserRefreshCredentials do
140
141
 
141
142
  it 'succeeds when GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, and '\
142
143
  'GOOGLE_REFRESH_TOKEN env vars are valid' do
144
+ ENV[ENV_VAR] = nil
143
145
  ENV[CLIENT_ID_VAR] = cred_json[:client_id]
144
146
  ENV[CLIENT_SECRET_VAR] = cred_json[:client_secret]
145
147
  ENV[REFRESH_TOKEN_VAR] = cred_json[:refresh_token]
@@ -150,6 +152,17 @@ describe Google::Auth::UserRefreshCredentials do
150
152
  expect(creds.client_secret).to eq(cred_json[:client_secret])
151
153
  expect(creds.refresh_token).to eq(cred_json[:refresh_token])
152
154
  end
155
+
156
+ it 'sets project_id when the PROJECT_ID_VAR env var is set' do
157
+ ENV[ENV_VAR] = nil
158
+ ENV[CLIENT_ID_VAR] = cred_json[:client_id]
159
+ ENV[CLIENT_SECRET_VAR] = cred_json[:client_secret]
160
+ ENV[REFRESH_TOKEN_VAR] = cred_json[:refresh_token]
161
+ ENV[ACCOUNT_TYPE_VAR] = cred_json[:type]
162
+ ENV[PROJECT_ID_VAR] = @project_id
163
+ creds = @clz.from_env(@scope)
164
+ expect(creds.project_id).to eq(@project_id)
165
+ end
153
166
  end
154
167
 
155
168
  describe '#from_well_known_path' do
@@ -198,6 +211,20 @@ describe Google::Auth::UserRefreshCredentials do
198
211
  expect(@clz.from_well_known_path(@scope)).to_not be_nil
199
212
  end
200
213
  end
214
+
215
+ it 'checks gcloud config for project_id if none was provided' do
216
+ Dir.mktmpdir do |dir|
217
+ key_path = File.join(dir, '.config', @known_path)
218
+ key_path = File.join(dir, @known_path) if OS.windows?
219
+ FileUtils.mkdir_p(File.dirname(key_path))
220
+ File.write(key_path, cred_json_text)
221
+ ENV['HOME'] = dir
222
+ ENV['APPDATA'] = dir
223
+ ENV[PROJECT_ID_VAR] = nil
224
+ expect(Google::Auth::CredentialsLoader).to receive(:load_gcloud_project_id).with(no_args)
225
+ @clz.from_well_known_path(@scope)
226
+ end
227
+ end
201
228
  end
202
229
 
203
230
  describe '#from_system_default_path' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: googleauth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.7
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Emiola
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-18 00:00:00.000000000 Z
11
+ date: 2018-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday