googleauth 0.8.1 → 0.9.0
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 +4 -4
- data/.kokoro/build.bat +9 -1
- data/.kokoro/continuous/windows.cfg +17 -1
- data/.kokoro/presubmit/windows.cfg +17 -1
- data/.kokoro/trampoline.bat +10 -0
- data/.rubocop.yml +37 -6
- data/CHANGELOG.md +9 -0
- data/Gemfile +1 -1
- data/README.md +1 -2
- data/googleauth.gemspec +1 -1
- data/lib/googleauth/application_default.rb +7 -7
- data/lib/googleauth/compute_engine.rb +10 -10
- data/lib/googleauth/credentials.rb +231 -46
- data/lib/googleauth/credentials_loader.rb +10 -7
- data/lib/googleauth/signet.rb +5 -4
- data/lib/googleauth/user_authorizer.rb +2 -2
- data/lib/googleauth/user_refresh.rb +1 -1
- data/lib/googleauth/version.rb +1 -1
- data/lib/googleauth/web_user_authorizer.rb +13 -8
- data/spec/googleauth/credentials_spec.rb +341 -155
- data/spec/googleauth/signet_spec.rb +31 -0
- data/spec/googleauth/web_user_authorizer_spec.rb +6 -0
- metadata +5 -4
- data/.kokoro/windows.sh +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e97bb2d3af353d706c6b608e1743fb3f571e62530201ffa3bebcae2c7e6460bb
|
4
|
+
data.tar.gz: 3c06cad2ea956d09a37783516292c61f754706366a2b8bf03ef7928769762070
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 68ad7978f7d5abcc14fbd4ca668ba24f69e4bef2c184427b1a70a8c57e2d742b636d5c0b8da10f4d62f8762adb0075d20c1eb75a76302f9f9b6e61cd1b989685
|
7
|
+
data.tar.gz: 25333a0a26181c8f8f0464642eccfe0340ed591a4c11f9fe3ed4b85179524c37100431f686a16a75f2985ade010e3b488aeb60a6c1a06e0109db46efa9e1d620
|
data/.kokoro/build.bat
CHANGED
@@ -5,4 +5,12 @@ REM * Merges run all non-acceptance tests for every library, and acceptance tes
|
|
5
5
|
REM * Nightlies run all acceptance tests for every library.
|
6
6
|
REM Currently only runs tests on 2.5.1
|
7
7
|
|
8
|
-
"
|
8
|
+
SET url="https://raw.githubusercontent.com/googleapis/google-cloud-ruby/master/.kokoro/build.bat"
|
9
|
+
|
10
|
+
SET "download=powershell -C Invoke-WebRequest -Uri %url% -OutFile master-build.bat"
|
11
|
+
|
12
|
+
SET EXIT_STATUS=1
|
13
|
+
|
14
|
+
%download% && master-build.bat && SET EXIT_STATUS=0
|
15
|
+
|
16
|
+
EXIT %EXIT_STATUS%
|
@@ -1,3 +1,19 @@
|
|
1
1
|
# Format: //devtools/kokoro/config/proto/build.proto
|
2
2
|
|
3
|
-
build_file: "google-auth-library-ruby/.kokoro/
|
3
|
+
build_file: "google-auth-library-ruby/.kokoro/trampoline.bat"
|
4
|
+
|
5
|
+
# Configure the docker image for kokoro-trampoline.
|
6
|
+
env_vars: {
|
7
|
+
key: "TRAMPOLINE_IMAGE"
|
8
|
+
value: "gcr.io/cloud-devrel-kokoro-resources/yoshi-ruby/windows"
|
9
|
+
}
|
10
|
+
|
11
|
+
env_vars: {
|
12
|
+
key: "TRAMPOLINE_BUILD_FILE"
|
13
|
+
value: "github/google-auth-library-ruby/.kokoro/build.bat"
|
14
|
+
}
|
15
|
+
|
16
|
+
env_vars: {
|
17
|
+
key: "REPO_DIR"
|
18
|
+
value: "google-auth-library-ruby"
|
19
|
+
}
|
@@ -1,3 +1,19 @@
|
|
1
1
|
# Format: //devtools/kokoro/config/proto/build.proto
|
2
2
|
|
3
|
-
build_file: "google-auth-library-ruby/.kokoro/
|
3
|
+
build_file: "google-auth-library-ruby/.kokoro/trampoline.bat"
|
4
|
+
|
5
|
+
# Configure the docker image for kokoro-trampoline.
|
6
|
+
env_vars: {
|
7
|
+
key: "TRAMPOLINE_IMAGE"
|
8
|
+
value: "gcr.io/cloud-devrel-kokoro-resources/yoshi-ruby/windows"
|
9
|
+
}
|
10
|
+
|
11
|
+
env_vars: {
|
12
|
+
key: "TRAMPOLINE_BUILD_FILE"
|
13
|
+
value: "github/google-auth-library-ruby/.kokoro/build.bat"
|
14
|
+
}
|
15
|
+
|
16
|
+
env_vars: {
|
17
|
+
key: "REPO_DIR"
|
18
|
+
value: "google-auth-library-ruby"
|
19
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
|
2
|
+
SET url="https://raw.githubusercontent.com/googleapis/google-cloud-ruby/master/.kokoro/trampoline.bat"
|
3
|
+
|
4
|
+
SET "download=powershell -C Invoke-WebRequest -Uri %url% -OutFile master-trampoline.bat"
|
5
|
+
|
6
|
+
SET EXIT_STATUS=1
|
7
|
+
|
8
|
+
%download% && master-trampoline.bat && SET EXIT_STATUS=0
|
9
|
+
|
10
|
+
EXIT %EXIT_STATUS%
|
data/.rubocop.yml
CHANGED
@@ -1,11 +1,42 @@
|
|
1
|
-
inherit_gem:
|
2
|
-
google-style: google-style.yml
|
3
|
-
|
4
1
|
AllCops:
|
5
2
|
Exclude:
|
6
3
|
- "spec/**/*"
|
7
4
|
- "Rakefile"
|
8
|
-
|
9
|
-
|
5
|
+
|
6
|
+
Metrics/AbcSize:
|
7
|
+
Max: 25
|
8
|
+
Metrics/BlockLength:
|
9
|
+
Exclude:
|
10
|
+
- "googleauth.gemspec"
|
11
|
+
Metrics/CyclomaticComplexity:
|
12
|
+
Max: 8
|
13
|
+
Metrics/PerceivedComplexity:
|
14
|
+
Max: 8
|
15
|
+
Metrics/LineLength:
|
16
|
+
Max: 120
|
17
|
+
Metrics/MethodLength:
|
18
|
+
Max: 21
|
10
19
|
Metrics/ModuleLength:
|
11
|
-
Max:
|
20
|
+
Max: 150
|
21
|
+
Metrics/ClassLength:
|
22
|
+
Enabled: false
|
23
|
+
Layout/IndentHeredoc:
|
24
|
+
Enabled: false
|
25
|
+
Style/FormatString:
|
26
|
+
Enabled: false
|
27
|
+
Style/GuardClause:
|
28
|
+
Enabled: false
|
29
|
+
Style/PercentLiteralDelimiters: # Contradicting rule
|
30
|
+
Enabled: false
|
31
|
+
Style/StringLiterals:
|
32
|
+
EnforcedStyle: double_quotes
|
33
|
+
Style/SymbolArray: # Undefined syntax in Ruby 1.9.3
|
34
|
+
Enabled: false
|
35
|
+
Style/MethodDefParentheses:
|
36
|
+
Enabled: false
|
37
|
+
Style/WordArray:
|
38
|
+
Enabled: false
|
39
|
+
Style/TrivialAccessors:
|
40
|
+
Enabled: false
|
41
|
+
Style/RescueModifier:
|
42
|
+
Enabled: false
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
### 0.9.0 / 2019-08-05
|
2
|
+
|
3
|
+
* Restore compatibility with Ruby 2.0. This is the last release that will work on end-of-lifed versions of Ruby. The 0.10 release will require Ruby 2.4 or later.
|
4
|
+
* Update Credentials to use methods for values that are intended to be changed by users, replacing constants.
|
5
|
+
* Add retry on error for fetch_access_token
|
6
|
+
* Allow specifying custom state key-values
|
7
|
+
* Add verbosity none to gcloud command
|
8
|
+
* Make arity of WebUserAuthorizer#get_credentials compatible with the base class
|
9
|
+
|
1
10
|
### 0.8.1 / 2019-03-27
|
2
11
|
|
3
12
|
* Silence unnecessary gcloud warning
|
data/Gemfile
CHANGED
@@ -8,12 +8,12 @@ group :development do
|
|
8
8
|
gem "coveralls", "~> 0.7"
|
9
9
|
gem "fakefs", "~> 0.6"
|
10
10
|
gem "fakeredis", "~> 0.5"
|
11
|
-
gem "google-style", "~> 0.2"
|
12
11
|
gem "logging", "~> 2.0"
|
13
12
|
gem "rack-test", "~> 0.6"
|
14
13
|
gem "rake", "~> 10.0"
|
15
14
|
gem "redis", "~> 3.2"
|
16
15
|
gem "rspec", "~> 3.0"
|
16
|
+
gem "rubocop", ">= 0.41", "< 0.50"
|
17
17
|
gem "simplecov", "~> 0.9"
|
18
18
|
gem "sinatra"
|
19
19
|
gem "webmock", "~> 1.21"
|
data/README.md
CHANGED
@@ -8,7 +8,6 @@
|
|
8
8
|
</dl>
|
9
9
|
|
10
10
|
[](http://badge.fury.io/rb/googleauth)
|
11
|
-
[](http://travis-ci.org/google/google-auth-library-ruby)
|
12
11
|
[](https://coveralls.io/r/google/google-auth-library-ruby)
|
13
12
|
|
14
13
|
## Description
|
@@ -184,7 +183,7 @@ Custom storage implementations can also be used. See
|
|
184
183
|
|
185
184
|
## Supported Ruby Versions
|
186
185
|
|
187
|
-
This library is currently supported on Ruby
|
186
|
+
This library is currently supported on Ruby 2.3+.
|
188
187
|
|
189
188
|
However, Ruby 2.4 or later is strongly recommended, as earlier releases have
|
190
189
|
reached or are nearing end-of-life. After March 31, 2019, Google will provide
|
data/googleauth.gemspec
CHANGED
@@ -34,13 +34,11 @@ module Google
|
|
34
34
|
# Module Auth provides classes that provide Google-specific authorization
|
35
35
|
# used to access Google APIs.
|
36
36
|
module Auth
|
37
|
-
NOT_FOUND_ERROR =
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
module_function
|
37
|
+
NOT_FOUND_ERROR = <<-ERROR_MESSAGE.freeze
|
38
|
+
Could not load the default credentials. Browse to
|
39
|
+
https://developers.google.com/accounts/docs/application-default-credentials
|
40
|
+
for more information
|
41
|
+
ERROR_MESSAGE
|
44
42
|
|
45
43
|
# Obtains the default credentials implementation to use in this
|
46
44
|
# environment.
|
@@ -77,5 +75,7 @@ module Google
|
|
77
75
|
end
|
78
76
|
GCECredentials.new
|
79
77
|
end
|
78
|
+
|
79
|
+
module_function :get_application_default
|
80
80
|
end
|
81
81
|
end
|
@@ -35,16 +35,16 @@ module Google
|
|
35
35
|
# Module Auth provides classes that provide Google-specific authorization
|
36
36
|
# used to access Google APIs.
|
37
37
|
module Auth
|
38
|
-
NO_METADATA_SERVER_ERROR =
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
UNEXPECTED_ERROR_SUFFIX =
|
45
|
-
|
46
|
-
|
47
|
-
|
38
|
+
NO_METADATA_SERVER_ERROR = <<-ERROR.freeze
|
39
|
+
Error code 404 trying to get security access token
|
40
|
+
from Compute Engine metadata for the default service account. This
|
41
|
+
may be because the virtual machine instance does not have permission
|
42
|
+
scopes specified.
|
43
|
+
ERROR
|
44
|
+
UNEXPECTED_ERROR_SUFFIX = <<-ERROR.freeze
|
45
|
+
trying to get security access token from Compute Engine metadata for
|
46
|
+
the default service account
|
47
|
+
ERROR
|
48
48
|
|
49
49
|
# Extends Signet::OAuth2::Client so that the auth token is obtained from
|
50
50
|
# the GCE metadata server.
|
@@ -35,26 +35,206 @@ require "googleauth/credentials_loader"
|
|
35
35
|
|
36
36
|
module Google
|
37
37
|
module Auth
|
38
|
-
|
39
|
-
#
|
38
|
+
##
|
39
|
+
# Credentials is responsible for representing the authentication when connecting to an API. This
|
40
|
+
# class is also intended to be inherited by API-specific classes.
|
40
41
|
class Credentials
|
42
|
+
##
|
43
|
+
# The default token credential URI to be used when none is provided during initialization.
|
41
44
|
TOKEN_CREDENTIAL_URI = "https://oauth2.googleapis.com/token".freeze
|
45
|
+
|
46
|
+
##
|
47
|
+
# The default target audience ID to be used when none is provided during initialization.
|
42
48
|
AUDIENCE = "https://oauth2.googleapis.com/token".freeze
|
43
|
-
SCOPE = [].freeze
|
44
|
-
PATH_ENV_VARS = [].freeze
|
45
|
-
JSON_ENV_VARS = [].freeze
|
46
|
-
DEFAULT_PATHS = [].freeze
|
47
49
|
|
50
|
+
##
|
51
|
+
# The default token credential URI to be used when none is provided during initialization.
|
52
|
+
# The URI is the authorization server's HTTP endpoint capable of issuing tokens and
|
53
|
+
# refreshing expired tokens.
|
54
|
+
#
|
55
|
+
# @return [String]
|
56
|
+
#
|
57
|
+
def self.token_credential_uri
|
58
|
+
return @token_credential_uri unless @token_credential_uri.nil?
|
59
|
+
|
60
|
+
const_get :TOKEN_CREDENTIAL_URI if const_defined? :TOKEN_CREDENTIAL_URI
|
61
|
+
end
|
62
|
+
|
63
|
+
##
|
64
|
+
# Set the default token credential URI to be used when none is provided during initialization.
|
65
|
+
#
|
66
|
+
# @param [String] new_token_credential_uri
|
67
|
+
# @return [String]
|
68
|
+
#
|
69
|
+
def self.token_credential_uri= new_token_credential_uri
|
70
|
+
@token_credential_uri = new_token_credential_uri
|
71
|
+
end
|
72
|
+
|
73
|
+
##
|
74
|
+
# The default target audience ID to be used when none is provided during initialization.
|
75
|
+
# Used only by the assertion grant type.
|
76
|
+
#
|
77
|
+
# @return [String]
|
78
|
+
#
|
79
|
+
def self.audience
|
80
|
+
return @audience unless @audience.nil?
|
81
|
+
|
82
|
+
const_get :AUDIENCE if const_defined? :AUDIENCE
|
83
|
+
end
|
84
|
+
|
85
|
+
##
|
86
|
+
# Sets the default target audience ID to be used when none is provided during initialization.
|
87
|
+
#
|
88
|
+
# @param [String] new_audience
|
89
|
+
# @return [String]
|
90
|
+
#
|
91
|
+
def self.audience= new_audience
|
92
|
+
@audience = new_audience
|
93
|
+
end
|
94
|
+
|
95
|
+
##
|
96
|
+
# The default scope to be used when none is provided during initialization.
|
97
|
+
# A scope is an access range defined by the authorization server.
|
98
|
+
# The scope can be a single value or a list of values.
|
99
|
+
#
|
100
|
+
# @return [String, Array<String>]
|
101
|
+
#
|
102
|
+
def self.scope
|
103
|
+
return @scope unless @scope.nil?
|
104
|
+
|
105
|
+
tmp_scope = []
|
106
|
+
# Pull in values is the SCOPE constant exists.
|
107
|
+
tmp_scope << const_get(:SCOPE) if const_defined? :SCOPE
|
108
|
+
tmp_scope.flatten.uniq
|
109
|
+
end
|
110
|
+
|
111
|
+
##
|
112
|
+
# Sets the default scope to be used when none is provided during initialization.
|
113
|
+
#
|
114
|
+
# @param [String, Array<String>] new_scope
|
115
|
+
# @return [String, Array<String>]
|
116
|
+
#
|
117
|
+
def self.scope= new_scope
|
118
|
+
new_scope = Array new_scope unless new_scope.nil?
|
119
|
+
@scope = new_scope
|
120
|
+
end
|
121
|
+
|
122
|
+
##
|
123
|
+
# The environment variables to search for credentials. Values can either be a file path to the
|
124
|
+
# credentials file, or the JSON contents of the credentials file.
|
125
|
+
#
|
126
|
+
# @return [Array<String>]
|
127
|
+
#
|
128
|
+
def self.env_vars
|
129
|
+
return @env_vars unless @env_vars.nil?
|
130
|
+
|
131
|
+
# Pull values when PATH_ENV_VARS or JSON_ENV_VARS constants exists.
|
132
|
+
tmp_env_vars = []
|
133
|
+
tmp_env_vars << const_get(:PATH_ENV_VARS) if const_defined? :PATH_ENV_VARS
|
134
|
+
tmp_env_vars << const_get(:JSON_ENV_VARS) if const_defined? :JSON_ENV_VARS
|
135
|
+
tmp_env_vars.flatten.uniq
|
136
|
+
end
|
137
|
+
|
138
|
+
##
|
139
|
+
# Sets the environment variables to search for credentials.
|
140
|
+
#
|
141
|
+
# @param [Array<String>] new_env_vars
|
142
|
+
# @return [Array<String>]
|
143
|
+
#
|
144
|
+
def self.env_vars= new_env_vars
|
145
|
+
new_env_vars = Array new_env_vars unless new_env_vars.nil?
|
146
|
+
@env_vars = new_env_vars
|
147
|
+
end
|
148
|
+
|
149
|
+
##
|
150
|
+
# The file paths to search for credentials files.
|
151
|
+
#
|
152
|
+
# @return [Array<String>]
|
153
|
+
#
|
154
|
+
def self.paths
|
155
|
+
return @paths unless @paths.nil?
|
156
|
+
|
157
|
+
tmp_paths = []
|
158
|
+
# Pull in values is the DEFAULT_PATHS constant exists.
|
159
|
+
tmp_paths << const_get(:DEFAULT_PATHS) if const_defined? :DEFAULT_PATHS
|
160
|
+
tmp_paths.flatten.uniq
|
161
|
+
end
|
162
|
+
|
163
|
+
##
|
164
|
+
# Set the file paths to search for credentials files.
|
165
|
+
#
|
166
|
+
# @param [Array<String>] new_paths
|
167
|
+
# @return [Array<String>]
|
168
|
+
#
|
169
|
+
def self.paths= new_paths
|
170
|
+
new_paths = Array new_paths unless new_paths.nil?
|
171
|
+
@paths = new_paths
|
172
|
+
end
|
173
|
+
|
174
|
+
##
|
175
|
+
# The Signet::OAuth2::Client object the Credentials instance is using.
|
176
|
+
#
|
177
|
+
# @return [Signet::OAuth2::Client]
|
178
|
+
#
|
48
179
|
attr_accessor :client
|
49
|
-
attr_reader :project_id
|
50
180
|
|
51
|
-
|
181
|
+
##
|
182
|
+
# Identifier for the project the client is authenticating with.
|
183
|
+
#
|
184
|
+
# @return [String]
|
185
|
+
#
|
186
|
+
attr_reader :project_id
|
187
|
+
|
188
|
+
# @private Delegate client methods to the client object.
|
52
189
|
extend Forwardable
|
190
|
+
|
191
|
+
##
|
192
|
+
# @!attribute [r] token_credential_uri
|
193
|
+
# @return [String] The token credential URI. The URI is the authorization server's HTTP
|
194
|
+
# endpoint capable of issuing tokens and refreshing expired tokens.
|
195
|
+
#
|
196
|
+
# @!attribute [r] audience
|
197
|
+
# @return [String] The target audience ID when issuing assertions. Used only by the
|
198
|
+
# assertion grant type.
|
199
|
+
#
|
200
|
+
# @!attribute [r] scope
|
201
|
+
# @return [String, Array<String>] The scope for this client. A scope is an access range
|
202
|
+
# defined by the authorization server. The scope can be a single value or a list of values.
|
203
|
+
#
|
204
|
+
# @!attribute [r] issuer
|
205
|
+
# @return [String] The issuer ID associated with this client.
|
206
|
+
#
|
207
|
+
# @!attribute [r] signing_key
|
208
|
+
# @return [String, OpenSSL::PKey] The signing key associated with this client.
|
209
|
+
#
|
210
|
+
# @!attribute [r] updater_proc
|
211
|
+
# @return [Proc] Returns a reference to the {Signet::OAuth2::Client#apply} method,
|
212
|
+
# suitable for passing as a closure.
|
213
|
+
#
|
53
214
|
def_delegators :@client,
|
54
215
|
:token_credential_uri, :audience,
|
55
216
|
:scope, :issuer, :signing_key, :updater_proc
|
56
217
|
|
57
218
|
# rubocop:disable Metrics/AbcSize
|
219
|
+
|
220
|
+
##
|
221
|
+
# Creates a new Credentials instance with the provided auth credentials, and with the default
|
222
|
+
# values configured on the class.
|
223
|
+
#
|
224
|
+
# @param [String, Hash, Signet::OAuth2::Client] keyfile
|
225
|
+
# The keyfile can be provided as one of the following:
|
226
|
+
#
|
227
|
+
# * The path to a JSON keyfile (as a +String+)
|
228
|
+
# * The contents of a JSON keyfile (as a +Hash+)
|
229
|
+
# * A +Signet::OAuth2::Client+ object
|
230
|
+
# @param [Hash] options
|
231
|
+
# The options for configuring the credentials instance. The following is supported:
|
232
|
+
#
|
233
|
+
# * +:scope+ - the scope for the client
|
234
|
+
# * +"project_id"+ (and optionally +"project"+) - the project identifier for the client
|
235
|
+
# * +:connection_builder+ - the connection builder to use for the client
|
236
|
+
# * +:default_connection+ - the default connection to use for the client
|
237
|
+
#
|
58
238
|
def initialize keyfile, options = {}
|
59
239
|
scope = options[:scope]
|
60
240
|
verify_keyfile_provided! keyfile
|
@@ -80,18 +260,32 @@ module Google
|
|
80
260
|
end
|
81
261
|
# rubocop:enable Metrics/AbcSize
|
82
262
|
|
83
|
-
|
84
|
-
#
|
85
|
-
#
|
86
|
-
#
|
263
|
+
##
|
264
|
+
# Creates a new Credentials instance with auth credentials acquired by searching the
|
265
|
+
# environment variables and paths configured on the class, and with the default values
|
266
|
+
# configured on the class.
|
267
|
+
#
|
268
|
+
# The auth credentials are searched for in the following order:
|
269
|
+
#
|
270
|
+
# 1. configured environment variables (see {Credentials.env_vars})
|
271
|
+
# 2. configured default file paths (see {Credentials.paths})
|
272
|
+
# 3. application default (see {Google::Auth.get_application_default})
|
273
|
+
#
|
274
|
+
# @param [Hash] options
|
275
|
+
# The options for configuring the credentials instance. The following is supported:
|
276
|
+
#
|
277
|
+
# * +:scope+ - the scope for the client
|
278
|
+
# * +"project_id"+ (and optionally +"project"+) - the project identifier for the client
|
279
|
+
# * +:connection_builder+ - the connection builder to use for the client
|
280
|
+
# * +:default_connection+ - the default connection to use for the client
|
281
|
+
#
|
282
|
+
# @return [Credentials]
|
283
|
+
#
|
87
284
|
def self.default options = {}
|
88
|
-
# First try to find keyfile file from environment variables.
|
89
|
-
client =
|
90
|
-
|
91
|
-
# Second try to find keyfile json from environment variables.
|
92
|
-
client ||= from_json_vars options
|
285
|
+
# First try to find keyfile file or json from environment variables.
|
286
|
+
client = from_env_vars options
|
93
287
|
|
94
|
-
#
|
288
|
+
# Second try to find keyfile file from known file paths.
|
95
289
|
client ||= from_default_paths options
|
96
290
|
|
97
291
|
# Finally get instantiated client from Google::Auth
|
@@ -99,33 +293,22 @@ module Google
|
|
99
293
|
client
|
100
294
|
end
|
101
295
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
nil
|
111
|
-
end
|
112
|
-
|
113
|
-
def self.from_json_vars options
|
114
|
-
json = lambda do |v|
|
115
|
-
unless ENV[v].nil?
|
116
|
-
begin
|
117
|
-
JSON.parse ENV[v]
|
118
|
-
rescue StandardError
|
119
|
-
nil
|
120
|
-
end
|
121
|
-
end
|
296
|
+
##
|
297
|
+
# @private Lookup Credentials from environment variables.
|
298
|
+
def self.from_env_vars options
|
299
|
+
env_vars.each do |env_var|
|
300
|
+
str = ENV[env_var]
|
301
|
+
next if str.nil?
|
302
|
+
return new str, options if ::File.file? str
|
303
|
+
return new ::JSON.parse(str), options rescue nil
|
122
304
|
end
|
123
|
-
self::JSON_ENV_VARS.map(&json).compact.each { |hash| return new hash, options }
|
124
305
|
nil
|
125
306
|
end
|
126
307
|
|
308
|
+
##
|
309
|
+
# @private Lookup Credentials from default file paths.
|
127
310
|
def self.from_default_paths options
|
128
|
-
|
311
|
+
paths
|
129
312
|
.select { |p| ::File.file? p }
|
130
313
|
.each do |file|
|
131
314
|
return new file, options
|
@@ -133,13 +316,15 @@ module Google
|
|
133
316
|
nil
|
134
317
|
end
|
135
318
|
|
319
|
+
##
|
320
|
+
# @private Lookup Credentials using Google::Auth.get_application_default.
|
136
321
|
def self.from_application_default options
|
137
|
-
scope = options[:scope] || self
|
322
|
+
scope = options[:scope] || self.scope
|
138
323
|
client = Google::Auth.get_application_default scope
|
139
324
|
new client, options
|
140
325
|
end
|
141
|
-
|
142
|
-
|
326
|
+
|
327
|
+
private_class_method :from_env_vars,
|
143
328
|
:from_default_paths,
|
144
329
|
:from_application_default
|
145
330
|
|
@@ -171,9 +356,9 @@ module Google
|
|
171
356
|
|
172
357
|
def client_options options
|
173
358
|
# Keyfile options have higher priority over constructor defaults
|
174
|
-
options["token_credential_uri"] ||= self.class
|
175
|
-
options["audience"] ||= self.class
|
176
|
-
options["scope"] ||= self.class
|
359
|
+
options["token_credential_uri"] ||= self.class.token_credential_uri
|
360
|
+
options["audience"] ||= self.class.audience
|
361
|
+
options["scope"] ||= self.class.scope
|
177
362
|
|
178
363
|
# client options for initializing signet client
|
179
364
|
{ token_credential_uri: options["token_credential_uri"],
|