googleauth 0.15.1 → 0.17.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.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.github/renovate.json +6 -0
  3. data/.github/sync-repo-settings.yaml +18 -0
  4. data/.github/workflows/ci.yml +55 -0
  5. data/.github/workflows/{release.yml → release-please.yml} +3 -3
  6. data/.gitignore +3 -0
  7. data/.kokoro/populate-secrets.sh +76 -0
  8. data/.kokoro/release.cfg +7 -49
  9. data/.kokoro/release.sh +18 -0
  10. data/.kokoro/trampoline_v2.sh +489 -0
  11. data/.repo-metadata.json +3 -3
  12. data/.rubocop.yml +0 -2
  13. data/.toys/.toys.rb +45 -0
  14. data/.toys/ci.rb +43 -0
  15. data/.toys/kokoro/.toys.rb +66 -0
  16. data/.toys/kokoro/publish-docs.rb +67 -0
  17. data/.toys/kokoro/publish-gem.rb +53 -0
  18. data/.toys/linkinator.rb +43 -0
  19. data/.trampolinerc +48 -0
  20. data/CHANGELOG.md +28 -0
  21. data/Gemfile +2 -7
  22. data/README.md +9 -7
  23. data/SECURITY.md +7 -0
  24. data/googleauth.gemspec +2 -1
  25. data/lib/googleauth/compute_engine.rb +1 -1
  26. data/lib/googleauth/credentials.rb +8 -3
  27. data/lib/googleauth/credentials_loader.rb +1 -1
  28. data/lib/googleauth/iam.rb +1 -1
  29. data/lib/googleauth/id_tokens/key_sources.rb +7 -5
  30. data/lib/googleauth/id_tokens/verifier.rb +7 -9
  31. data/lib/googleauth/scope_util.rb +1 -1
  32. data/lib/googleauth/service_account.rb +21 -15
  33. data/lib/googleauth/signet.rb +1 -1
  34. data/lib/googleauth/stores/file_token_store.rb +1 -0
  35. data/lib/googleauth/stores/redis_token_store.rb +1 -0
  36. data/lib/googleauth/version.rb +1 -1
  37. data/lib/googleauth/web_user_authorizer.rb +1 -1
  38. data/spec/googleauth/service_account_spec.rb +24 -10
  39. metadata +19 -23
  40. data/.kokoro/build.bat +0 -16
  41. data/.kokoro/build.sh +0 -4
  42. data/.kokoro/continuous/common.cfg +0 -24
  43. data/.kokoro/continuous/linux.cfg +0 -25
  44. data/.kokoro/continuous/osx.cfg +0 -8
  45. data/.kokoro/continuous/post.cfg +0 -30
  46. data/.kokoro/continuous/windows.cfg +0 -29
  47. data/.kokoro/osx.sh +0 -4
  48. data/.kokoro/presubmit/common.cfg +0 -24
  49. data/.kokoro/presubmit/linux.cfg +0 -24
  50. data/.kokoro/presubmit/osx.cfg +0 -8
  51. data/.kokoro/presubmit/windows.cfg +0 -29
  52. data/.kokoro/trampoline.bat +0 -10
  53. data/.kokoro/trampoline.sh +0 -4
  54. data/Rakefile +0 -132
  55. data/rakelib/devsite_builder.rb +0 -45
  56. data/rakelib/link_checker.rb +0 -64
  57. data/rakelib/repo_metadata.rb +0 -59
data/README.md CHANGED
@@ -182,17 +182,19 @@ Custom storage implementations can also be used. See
182
182
 
183
183
  ## Supported Ruby Versions
184
184
 
185
- This library requires Ruby 2.4 or later.
185
+ This library is supported on Ruby 2.5+.
186
186
 
187
- In general, this library supports Ruby versions that are considered current and
188
- supported by Ruby Core (that is, Ruby versions that are either in normal
189
- maintenance or in security maintenance).
190
- See https://www.ruby-lang.org/en/downloads/branches/ for further details.
187
+ Google provides official support for Ruby versions that are actively supported
188
+ by Ruby Corethat is, Ruby versions that are either in normal maintenance or in
189
+ security maintenance, and not end of life. Currently, this means Ruby 2.5 and
190
+ later. Older versions of Ruby _may_ still work, but are unsupported and not
191
+ recommended. See https://www.ruby-lang.org/en/downloads/branches/ for details
192
+ about the Ruby support schedule.
191
193
 
192
194
  ## License
193
195
 
194
196
  This library is licensed under Apache 2.0. Full license text is
195
- available in [COPYING][copying].
197
+ available in [LICENSE][license].
196
198
 
197
199
  ## Contributing
198
200
 
@@ -208,4 +210,4 @@ about the client or APIs on [StackOverflow](http://stackoverflow.com).
208
210
 
209
211
  [application default credentials]: https://developers.google.com/accounts/docs/application-default-credentials
210
212
  [contributing]: https://github.com/googleapis/google-auth-library-ruby/tree/master/.github/CONTRIBUTING.md
211
- [copying]: https://github.com/googleapis/google-auth-library-ruby/tree/master/COPYING
213
+ [license]: https://github.com/googleapis/google-auth-library-ruby/tree/master/LICENSE
data/SECURITY.md ADDED
@@ -0,0 +1,7 @@
1
+ # Security Policy
2
+
3
+ To report a security issue, please use [g.co/vulnz](https://g.co/vulnz).
4
+
5
+ The Google Security Team will respond within 5 working days of your report on g.co/vulnz.
6
+
7
+ We use g.co/vulnz for our intake, and do coordination and disclosure here using GitHub Security Advisory to privately discuss and fix the issue.
data/googleauth.gemspec CHANGED
@@ -24,8 +24,9 @@ Gem::Specification.new do |gem|
24
24
  File.basename f
25
25
  end
26
26
  gem.require_paths = ["lib"]
27
+
27
28
  gem.platform = Gem::Platform::RUBY
28
- gem.required_ruby_version = ">= 2.4.0"
29
+ gem.required_ruby_version = ">= 2.5"
29
30
 
30
31
  gem.add_dependency "faraday", ">= 0.17.3", "< 2.0"
31
32
  gem.add_dependency "jwt", ">= 1.4", "< 3.0"
@@ -112,7 +112,7 @@ module Google
112
112
  case resp.status
113
113
  when 200
114
114
  content_type = resp.headers["content-type"]
115
- if content_type == "text/html"
115
+ if ["text/html", "application/text"].include? content_type
116
116
  { (target_audience ? "id_token" : "access_token") => resp.body }
117
117
  else
118
118
  Signet::OAuth2.parse_credentials resp.body, content_type
@@ -369,9 +369,10 @@ module Google
369
369
  verify_keyfile_provided! keyfile
370
370
  @project_id = options["project_id"] || options["project"]
371
371
  @quota_project_id = options["quota_project_id"]
372
- if keyfile.is_a? Signet::OAuth2::Client
372
+ case keyfile
373
+ when Signet::OAuth2::Client
373
374
  update_from_signet keyfile
374
- elsif keyfile.is_a? Hash
375
+ when Hash
375
376
  update_from_hash keyfile, options
376
377
  else
377
378
  update_from_filepath keyfile, options
@@ -503,9 +504,11 @@ module Google
503
504
 
504
505
  # returns a new Hash with string keys instead of symbol keys.
505
506
  def stringify_hash_keys hash
506
- Hash[hash.map { |k, v| [k.to_s, v] }]
507
+ hash.to_h.transform_keys(&:to_s)
507
508
  end
508
509
 
510
+ # rubocop:disable Metrics/AbcSize
511
+
509
512
  def client_options options
510
513
  # Keyfile options have higher priority over constructor defaults
511
514
  options["token_credential_uri"] ||= self.class.token_credential_uri
@@ -527,6 +530,8 @@ module Google
527
530
  signing_key: OpenSSL::PKey::RSA.new(options["private_key"]) }
528
531
  end
529
532
 
533
+ # rubocop:enable Metrics/AbcSize
534
+
530
535
  def update_from_signet client
531
536
  @project_id ||= client.project_id if client.respond_to? :project_id
532
537
  @quota_project_id ||= client.quota_project_id if client.respond_to? :quota_project_id
@@ -103,7 +103,7 @@ module Google
103
103
  return make_creds options.merge(json_key_io: f)
104
104
  end
105
105
  elsif service_account_env_vars? || authorized_user_env_vars?
106
- return make_creds options
106
+ make_creds options
107
107
  end
108
108
  rescue StandardError => e
109
109
  raise "#{NOT_FOUND_ERROR}: #{e}"
@@ -68,7 +68,7 @@ module Google
68
68
  # Returns a reference to the #apply method, suitable for passing as
69
69
  # a closure
70
70
  def updater_proc
71
- lambda(&method(:apply))
71
+ proc { |a_hash, _opts = {}| apply a_hash }
72
72
  end
73
73
  end
74
74
  end
@@ -171,7 +171,9 @@ module Google
171
171
  curve_name = CURVE_NAME_MAP[jwk[:crv]]
172
172
  raise KeySourceError, "Unsupported EC curve #{jwk[:crv]}" unless curve_name
173
173
  group = OpenSSL::PKey::EC::Group.new curve_name
174
- bn = OpenSSL::BN.new ["04" + x_data.unpack1("H*") + y_data.unpack1("H*")].pack("H*"), 2
174
+ x_hex = x_data.unpack1 "H*"
175
+ y_hex = y_data.unpack1 "H*"
176
+ bn = OpenSSL::BN.new ["04#{x_hex}#{y_hex}"].pack("H*"), 2
175
177
  key = OpenSSL::PKey::EC.new curve_name
176
178
  key.public_key = OpenSSL::PKey::EC::Point.new group, bn
177
179
  key
@@ -284,10 +286,10 @@ module Google
284
286
  raise KeySourceError, "Unable to retrieve data from #{uri}" unless response.is_a? Net::HTTPSuccess
285
287
 
286
288
  data = begin
287
- JSON.parse response.body
288
- rescue JSON::ParserError
289
- raise KeySourceError, "Unable to parse JSON"
290
- end
289
+ JSON.parse response.body
290
+ rescue JSON::ParserError
291
+ raise KeySourceError, "Unable to parse JSON"
292
+ end
291
293
 
292
294
  @current_keys = Array(interpret_json(data))
293
295
  end
@@ -105,15 +105,13 @@ module Google
105
105
  def decode_token token, keys, aud, azp, iss
106
106
  payload = nil
107
107
  keys.find do |key|
108
- begin
109
- options = { algorithms: key.algorithm }
110
- decoded_token = JWT.decode token, key.key, true, options
111
- payload = decoded_token.first
112
- rescue JWT::ExpiredSignature
113
- raise ExpiredTokenError, "Token signature is expired"
114
- rescue JWT::DecodeError
115
- nil # Try the next key
116
- end
108
+ options = { algorithms: key.algorithm }
109
+ decoded_token = JWT.decode token, key.key, true, options
110
+ payload = decoded_token.first
111
+ rescue JWT::ExpiredSignature
112
+ raise ExpiredTokenError, "Token signature is expired"
113
+ rescue JWT::DecodeError
114
+ nil # Try the next key
117
115
  end
118
116
 
119
117
  normalize_and_verify_payload payload, aud, azp, iss
@@ -51,7 +51,7 @@ module Google
51
51
  when Array
52
52
  scope
53
53
  when String
54
- scope.split " "
54
+ scope.split
55
55
  else
56
56
  raise "Invalid scope value. Must be string or array"
57
57
  end
@@ -123,11 +123,13 @@ module Google
123
123
  def apply_self_signed_jwt! a_hash
124
124
  # Use the ServiceAccountJwtHeaderCredentials using the same cred values
125
125
  cred_json = {
126
- private_key: @signing_key.to_s,
127
- client_email: @issuer
126
+ private_key: @signing_key.to_s,
127
+ client_email: @issuer,
128
+ project_id: @project_id,
129
+ quota_project_id: @quota_project_id
128
130
  }
129
131
  key_io = StringIO.new MultiJson.dump(cred_json)
130
- alt = ServiceAccountJwtHeaderCredentials.make_creds json_key_io: key_io
132
+ alt = ServiceAccountJwtHeaderCredentials.make_creds json_key_io: key_io, scope: scope
131
133
  alt.apply! a_hash
132
134
  end
133
135
  end
@@ -152,15 +154,13 @@ module Google
152
154
  attr_reader :project_id
153
155
  attr_reader :quota_project_id
154
156
 
155
- # make_creds proxies the construction of a credentials instance
157
+ # Create a ServiceAccountJwtHeaderCredentials.
156
158
  #
157
- # make_creds is used by the methods in CredentialsLoader.
158
- #
159
- # By default, it calls #new with 2 args, the second one being an
160
- # optional scope. Here's the constructor only has one param, so
161
- # we modify make_creds to reflect this.
162
- def self.make_creds *args
163
- new json_key_io: args[0][:json_key_io]
159
+ # @param json_key_io [IO] an IO from which the JSON key can be read
160
+ # @param scope [string|array|nil] the scope(s) to access
161
+ def self.make_creds options = {}
162
+ json_key_io, scope = options.values_at :json_key_io, :scope
163
+ new json_key_io: json_key_io, scope: scope
164
164
  end
165
165
 
166
166
  # Initializes a ServiceAccountJwtHeaderCredentials.
@@ -179,6 +179,7 @@ module Google
179
179
  end
180
180
  @project_id ||= CredentialsLoader.load_gcloud_project_id
181
181
  @signing_key = OpenSSL::PKey::RSA.new @private_key
182
+ @scope = options[:scope]
182
183
  end
183
184
 
184
185
  # Construct a jwt token if the JWT_AUD_URI key is present in the input
@@ -187,7 +188,7 @@ module Google
187
188
  # The jwt token is used as the value of a 'Bearer '.
188
189
  def apply! a_hash, opts = {}
189
190
  jwt_aud_uri = a_hash.delete JWT_AUD_URI_KEY
190
- return a_hash if jwt_aud_uri.nil?
191
+ return a_hash if jwt_aud_uri.nil? && @scope.nil?
191
192
  jwt_token = new_jwt_token jwt_aud_uri, opts
192
193
  a_hash[AUTH_METADATA_KEY] = "Bearer #{jwt_token}"
193
194
  a_hash
@@ -203,22 +204,27 @@ module Google
203
204
  # Returns a reference to the #apply method, suitable for passing as
204
205
  # a closure
205
206
  def updater_proc
206
- lambda(&method(:apply))
207
+ proc { |a_hash, opts = {}| apply a_hash, opts }
207
208
  end
208
209
 
209
210
  protected
210
211
 
211
212
  # Creates a jwt uri token.
212
- def new_jwt_token jwt_aud_uri, options = {}
213
+ def new_jwt_token jwt_aud_uri = nil, options = {}
213
214
  now = Time.new
214
215
  skew = options[:skew] || 60
215
216
  assertion = {
216
217
  "iss" => @issuer,
217
218
  "sub" => @issuer,
218
- "aud" => jwt_aud_uri,
219
219
  "exp" => (now + EXPIRY).to_i,
220
220
  "iat" => (now - skew).to_i
221
221
  }
222
+
223
+ jwt_aud_uri = nil if @scope
224
+
225
+ assertion["scope"] = Array(@scope).join " " if @scope
226
+ assertion["aud"] = jwt_aud_uri if jwt_aud_uri
227
+
222
228
  JWT.encode assertion, @signing_key, SIGNING_ALGORITHM
223
229
  end
224
230
  end
@@ -63,7 +63,7 @@ module Signet
63
63
  # Returns a reference to the #apply method, suitable for passing as
64
64
  # a closure
65
65
  def updater_proc
66
- lambda(&method(:apply))
66
+ proc { |a_hash, opts = {}| apply a_hash, opts }
67
67
  end
68
68
 
69
69
  def on_refresh &block
@@ -40,6 +40,7 @@ module Google
40
40
  # @param [String, File] file
41
41
  # Path to storage file
42
42
  def initialize options = {}
43
+ super()
43
44
  path = options[:file]
44
45
  @store = YAML::Store.new path
45
46
  end
@@ -49,6 +49,7 @@ module Google
49
49
  # the options passed through. You may include any other keys accepted
50
50
  # by `Redis.new`
51
51
  def initialize options = {}
52
+ super()
52
53
  redis = options.delete :redis
53
54
  prefix = options.delete :prefix
54
55
  @redis = case redis
@@ -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.15.1".freeze
34
+ VERSION = "0.17.0".freeze
35
35
  end
36
36
  end
@@ -189,7 +189,7 @@ module Google
189
189
  # May raise an error if an authorization code is present in the session
190
190
  # and exchange of the code fails
191
191
  def get_credentials user_id, request = nil, scope = nil
192
- if request && request.session.key?(CALLBACK_STATE_KEY)
192
+ if request&.session&.key? CALLBACK_STATE_KEY
193
193
  # Note - in theory, no need to check required scope as this is
194
194
  # expected to be called immediately after a return from authorization
195
195
  state_json = request.session.delete CALLBACK_STATE_KEY
@@ -44,9 +44,10 @@ require "os"
44
44
 
45
45
  include Google::Auth::CredentialsLoader
46
46
 
47
- shared_examples "jwt header auth" do
47
+ shared_examples "jwt header auth" do |aud="https://www.googleapis.com/myservice"|
48
48
  context "when jwt_aud_uri is present" do
49
- let(:test_uri) { "https://www.googleapis.com/myservice" }
49
+ let(:test_uri) { aud }
50
+ let(:test_scope) { "scope/1 scope/2" }
50
51
  let(:auth_prefix) { "Bearer " }
51
52
  let(:auth_key) { ServiceAccountJwtHeaderCredentials::AUTH_METADATA_KEY }
52
53
  let(:jwt_uri_key) { ServiceAccountJwtHeaderCredentials::JWT_AUD_URI_KEY }
@@ -56,14 +57,16 @@ shared_examples "jwt header auth" do
56
57
  expect(hdr.start_with?(auth_prefix)).to be true
57
58
  authorization = hdr[auth_prefix.length..-1]
58
59
  payload, = JWT.decode authorization, @key.public_key, true, algorithm: "RS256"
59
- expect(payload["aud"]).to eq(test_uri)
60
+
61
+ expect(payload["aud"]).to eq(test_uri) if not test_uri.nil?
62
+ expect(payload["scope"]).to eq(test_scope) if test_uri.nil?
60
63
  expect(payload["iss"]).to eq(client_email)
61
64
  end
62
65
 
63
66
  describe "#apply!" do
64
67
  it "should update the target hash with a jwt token" do
65
68
  md = { foo: "bar" }
66
- md[jwt_uri_key] = test_uri
69
+ md[jwt_uri_key] = test_uri if test_uri
67
70
  @client.apply! md
68
71
  auth_header = md[auth_key]
69
72
  expect_is_encoded_jwt auth_header
@@ -74,31 +77,31 @@ shared_examples "jwt header auth" do
74
77
  describe "updater_proc" do
75
78
  it "should provide a proc that updates a hash with a jwt token" do
76
79
  md = { foo: "bar" }
77
- md[jwt_uri_key] = test_uri
80
+ md[jwt_uri_key] = test_uri if test_uri
78
81
  the_proc = @client.updater_proc
79
82
  got = the_proc.call md
80
83
  auth_header = got[auth_key]
81
84
  expect_is_encoded_jwt auth_header
82
85
  expect(got[jwt_uri_key]).to be_nil
83
- expect(md[jwt_uri_key]).to_not be_nil
86
+ expect(md[jwt_uri_key]).to_not be_nil if test_uri
84
87
  end
85
88
  end
86
89
 
87
90
  describe "#apply" do
88
91
  it "should not update the original hash with a jwt token" do
89
92
  md = { foo: "bar" }
90
- md[jwt_uri_key] = test_uri
93
+ md[jwt_uri_key] = test_uri if test_uri
91
94
  the_proc = @client.updater_proc
92
95
  got = the_proc.call md
93
96
  auth_header = md[auth_key]
94
97
  expect(auth_header).to be_nil
95
98
  expect(got[jwt_uri_key]).to be_nil
96
- expect(md[jwt_uri_key]).to_not be_nil
99
+ expect(md[jwt_uri_key]).to_not be_nil if test_uri
97
100
  end
98
101
 
99
102
  it "should add a jwt token to the returned hash" do
100
103
  md = { foo: "bar" }
101
- md[jwt_uri_key] = test_uri
104
+ md[jwt_uri_key] = test_uri if test_uri
102
105
  got = @client.apply md
103
106
  auth_header = got[auth_key]
104
107
  expect_is_encoded_jwt auth_header
@@ -107,6 +110,7 @@ shared_examples "jwt header auth" do
107
110
  end
108
111
  end
109
112
 
113
+
110
114
  describe Google::Auth::ServiceAccountCredentials do
111
115
  ServiceAccountCredentials = Google::Auth::ServiceAccountCredentials
112
116
  let(:client_email) { "app@developer.gserviceaccount.com" }
@@ -169,14 +173,24 @@ describe Google::Auth::ServiceAccountCredentials do
169
173
  it_behaves_like "jwt header auth"
170
174
  end
171
175
 
172
- context "when enable_self_signed_jwt is set" do
176
+ context "when enable_self_signed_jwt is set with aud" do
173
177
  before :example do
178
+ @client.scope = nil
174
179
  @client.instance_variable_set(:@enable_self_signed_jwt, true)
175
180
  end
176
181
 
177
182
  it_behaves_like "jwt header auth"
178
183
  end
179
184
 
185
+ context "when enable_self_signed_jwt is set with scope" do
186
+ before :example do
187
+ @client.scope = ['scope/1', 'scope/2']
188
+ @client.instance_variable_set(:@enable_self_signed_jwt, true)
189
+ end
190
+
191
+ it_behaves_like "jwt header auth", nil
192
+ end
193
+
180
194
  describe "#from_env" do
181
195
  before :example do
182
196
  @var_name = ENV_VAR
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.15.1
4
+ version: 0.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Emiola
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-08 00:00:00.000000000 Z
11
+ date: 2021-07-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -140,32 +140,31 @@ files:
140
140
  - ".github/ISSUE_TEMPLATE/bug_report.md"
141
141
  - ".github/ISSUE_TEMPLATE/feature_request.md"
142
142
  - ".github/ISSUE_TEMPLATE/support_request.md"
143
- - ".github/workflows/release.yml"
143
+ - ".github/renovate.json"
144
+ - ".github/sync-repo-settings.yaml"
145
+ - ".github/workflows/ci.yml"
146
+ - ".github/workflows/release-please.yml"
144
147
  - ".gitignore"
145
- - ".kokoro/build.bat"
146
- - ".kokoro/build.sh"
147
- - ".kokoro/continuous/common.cfg"
148
- - ".kokoro/continuous/linux.cfg"
149
- - ".kokoro/continuous/osx.cfg"
150
- - ".kokoro/continuous/post.cfg"
151
- - ".kokoro/continuous/windows.cfg"
152
- - ".kokoro/osx.sh"
153
- - ".kokoro/presubmit/common.cfg"
154
- - ".kokoro/presubmit/linux.cfg"
155
- - ".kokoro/presubmit/osx.cfg"
156
- - ".kokoro/presubmit/windows.cfg"
148
+ - ".kokoro/populate-secrets.sh"
157
149
  - ".kokoro/release.cfg"
158
- - ".kokoro/trampoline.bat"
159
- - ".kokoro/trampoline.sh"
150
+ - ".kokoro/release.sh"
151
+ - ".kokoro/trampoline_v2.sh"
160
152
  - ".repo-metadata.json"
161
153
  - ".rspec"
162
154
  - ".rubocop.yml"
155
+ - ".toys/.toys.rb"
156
+ - ".toys/ci.rb"
157
+ - ".toys/kokoro/.toys.rb"
158
+ - ".toys/kokoro/publish-docs.rb"
159
+ - ".toys/kokoro/publish-gem.rb"
160
+ - ".toys/linkinator.rb"
161
+ - ".trampolinerc"
163
162
  - CHANGELOG.md
164
163
  - CODE_OF_CONDUCT.md
165
164
  - Gemfile
166
165
  - LICENSE
167
166
  - README.md
168
- - Rakefile
167
+ - SECURITY.md
169
168
  - googleauth.gemspec
170
169
  - integration/helper.rb
171
170
  - integration/id_tokens/key_source_test.rb
@@ -192,9 +191,6 @@ files:
192
191
  - lib/googleauth/user_refresh.rb
193
192
  - lib/googleauth/version.rb
194
193
  - lib/googleauth/web_user_authorizer.rb
195
- - rakelib/devsite_builder.rb
196
- - rakelib/link_checker.rb
197
- - rakelib/repo_metadata.rb
198
194
  - spec/googleauth/apply_auth_examples.rb
199
195
  - spec/googleauth/client_id_spec.rb
200
196
  - spec/googleauth/compute_engine_spec.rb
@@ -226,14 +222,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
226
222
  requirements:
227
223
  - - ">="
228
224
  - !ruby/object:Gem::Version
229
- version: 2.4.0
225
+ version: '2.5'
230
226
  required_rubygems_version: !ruby/object:Gem::Requirement
231
227
  requirements:
232
228
  - - ">="
233
229
  - !ruby/object:Gem::Version
234
230
  version: '0'
235
231
  requirements: []
236
- rubygems_version: 3.2.6
232
+ rubygems_version: 3.2.17
237
233
  signing_key:
238
234
  specification_version: 4
239
235
  summary: Google Auth Library for Ruby