oauth2 2.0.22 → 2.0.23

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: 7964123b20cd2a456b4207c27b2695bbe8e46b30efdafc01731bdf97038fd58e
4
- data.tar.gz: 908001fb4aa70279ee6384a0de5fefb43bf3c8b64466e5df248f244b353a270c
3
+ metadata.gz: 01151dc8f48c49a5a925098de896b74bca26c0791d4667f9f87edd6329a5c8ab
4
+ data.tar.gz: d49ddb0357387cf39b3cd961e4c4747328f8b8495081efc9f65389bb7187cc79
5
5
  SHA512:
6
- metadata.gz: 772d189a481bf1329bcbb0443f98ce2feefefcc77387dad7d8f6128ebd2139a29fc0c2410721394aec5bcece3f786b980c33eba6acc0fe6ecd1c4366308dc0fb
7
- data.tar.gz: 959412178a6d2b37902c1b91a7e3b8c688dc1142dc118e56752ddaf0fdc99c06017d297d96ccfd0b37bca1dc2308c441050b40b64f06d31a815c6f5df7c91d0d
6
+ metadata.gz: 45cab4b58795551fd1e0b827b5ee8e155ae741a5af983f1f777926cac677eeeea89f9220d1fd478e2529632e01d27291da0c37e6ef6c7e88771dc8f4a1affefd
7
+ data.tar.gz: 981305491fe56a81552efcc9d9719313e159f8d4f2251fe3a0753637c0958509fdb99bdbc46f2202b7b938f1bb7e6b827bb08213eb467d0fb2e8704435e0c647
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,27 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [2.0.23] - 2026-06-13
34
+
35
+ - TAG: [v2.0.23][2.0.23t]
36
+ - COVERAGE: 100.00% -- 562/562 lines in 15 files
37
+ - BRANCH COVERAGE: 97.89% -- 186/190 branches in 15 files
38
+ - 88.35% documented
39
+
40
+ ### Changed
41
+
42
+ - Upgraded to snaky_hash v2.0.6 by @pboling
43
+ - Refreshed generated GHA workflow action SHA pins by @pboling
44
+
45
+ ### Fixed
46
+
47
+ - Addressed Reek code-quality checks with targeted cleanup and documented compatibility exclusions by @pboling
48
+ - Fixed deprecation warning from MultiXML by @robzolkos
49
+
50
+ [gh!733]: https://github.com/ruby-oauth/oauth2/pull/733
51
+
52
+ - Fixed head appraisal dependency conflicts and Ruby 2.4 protocol-relative redirect handling by @pboling
53
+
33
54
  ## [2.0.22] - 2026-06-07
34
55
 
35
56
  - TAG: [v2.0.22][2.0.22t]
@@ -45,7 +66,9 @@ Please file a bug if you notice a violation of semantic versioning.
45
66
 
46
67
  ### Security
47
68
 
48
- - [GHSA-pp92-crg2-gfv9] Prevent protocol-relative redirect `Location` values from changing request authority, and strip `Authorization` headers from cross-origin redirects.
69
+ - [GHSA-pp92-crg2-gfv9][GHSA-pp92-crg2-gfv9] Prevent protocol-relative redirect `Location` values from changing request authority, and strip `Authorization` headers from cross-origin redirects by @tonghuaroot and @pboling
70
+
71
+ [GHSA-pp92-crg2-gfv9]: https://github.com/ruby-oauth/oauth2/security/advisories/GHSA-pp92-crg2-gfv9
49
72
 
50
73
  ## [2.0.21] - 2026-06-06
51
74
 
@@ -863,7 +886,9 @@ Please file a bug if you notice a violation of semantic versioning.
863
886
 
864
887
  [gemfiles/readme]: gemfiles/README.md
865
888
 
866
- [Unreleased]: https://github.com/ruby-oauth/oauth2/compare/v2.0.22...HEAD
889
+ [Unreleased]: https://github.com/ruby-oauth/oauth2/compare/v2.0.23...HEAD
890
+ [2.0.23]: https://github.com/ruby-oauth/oauth2/compare/v2.0.22...v2.0.23
891
+ [2.0.23t]: https://github.com/ruby-oauth/oauth2/releases/tag/v2.0.23
867
892
  [2.0.22]: https://github.com/ruby-oauth/oauth2/compare/v2.0.21...v2.0.22
868
893
  [2.0.22t]: https://github.com/ruby-oauth/oauth2/releases/tag/v2.0.22
869
894
  [2.0.21]: https://github.com/ruby-oauth/oauth2/compare/v2.0.20...v2.0.21
data/LICENSE.md CHANGED
@@ -107,4 +107,5 @@ Choose the option that best fits your use case:
107
107
  - Copyright (c) 2025 Sasa Rosic
108
108
  - Copyright (c) 2026 Jonathan Grinstead
109
109
  - Copyright (c) 2026 kain
110
+ - Copyright (c) 2026 Rob Zolkos
110
111
  - Copyright (c) 2026 StepSecurity Bot
data/README.md CHANGED
@@ -871,6 +871,7 @@ See [LICENSE.md][📄license] for the official copyright notice.
871
871
  - Copyright (c) 2025 Sasa Rosic
872
872
  - Copyright (c) 2026 Jonathan Grinstead
873
873
  - Copyright (c) 2026 kain
874
+ - Copyright (c) 2026 Rob Zolkos
874
875
  - Copyright (c) 2026 StepSecurity Bot
875
876
 
876
877
  </details>
@@ -1086,7 +1087,7 @@ Thanks for RTFM. ☺️
1086
1087
  [📌gitmoji]: https://gitmoji.dev
1087
1088
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
1088
1089
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
1089
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.542-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1090
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.562-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1090
1091
  [🔐security]: https://github.com/ruby-oauth/oauth2/blob/main/SECURITY.md
1091
1092
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
1092
1093
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -1094,7 +1095,7 @@ Thanks for RTFM. ☺️
1094
1095
  [📄license-ref]: MIT.md
1095
1096
  [📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
1096
1097
  [📄license-compat]: https://www.apache.org/legal/resolved.html#category-a
1097
- [📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-✓-259D6C.svg?style=flat&logo=Apache
1098
+ [📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-%E2%9C%93-259D6C.svg?style=flat&logo=Apache
1098
1099
 
1099
1100
  [📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
1100
1101
  [📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
@@ -1114,7 +1115,7 @@ Thanks for RTFM. ☺️
1114
1115
  | Package | oauth2 |
1115
1116
  | Description | 🔐 A Ruby wrapper for the OAuth 2.0 Authorization Framework, including the OAuth 2.1 draft spec, and OpenID Connect (OIDC) |
1116
1117
  | Homepage | https://github.com/ruby-oauth/oauth2 |
1117
- | Source | https://github.com/ruby-oauth/oauth2/tree/v2.0.21 |
1118
+ | Source | https://github.com/ruby-oauth/oauth2/tree/v2.0.23 |
1118
1119
  | License | `MIT` |
1119
1120
  | Funding | https://github.com/sponsors/pboling, https://issuehunt.io/u/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/ruby-oauth, https://patreon.com/galtzo, https://polar.sh/pboling, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/oauth2, https://www.buymeacoffee.com/pboling |
1120
1121
  <!-- kettle-jem:metadata:end -->
@@ -68,13 +68,7 @@ module OAuth2
68
68
  end
69
69
  # :nocov:
70
70
  # TODO: Get rid of this branching logic when dropping Hashie < v3.2
71
- token = if !defined?(Hashie::VERSION) # i.e. <= "1.1.0"; the first Hashie to ship with a VERSION constant
72
- warn("snaky_hash and oauth2 will drop support for Hashie v0 in the next major version. Please upgrade to a modern Hashie.")
73
- # There is a bug in Hashie v0, which is accounts for.
74
- fresh.delete(t_key) || fresh[t_key] || ""
75
- else
76
- fresh.delete(t_key) || ""
77
- end
71
+ token = extract_token_value(fresh, t_key)
78
72
  # :nocov:
79
73
  new(client, token, fresh)
80
74
  end
@@ -108,6 +102,17 @@ Custom token_name (#{key}) is not found in (#{hash.keys})
108
102
  You may need to set `snaky: false`. See inline documentation for more info.
109
103
  ])
110
104
  end
105
+
106
+ # :nocov:
107
+ def extract_token_value(fresh, key)
108
+ token_value = fresh.delete(key)
109
+ return token_value || "" if defined?(Hashie::VERSION)
110
+
111
+ warn("snaky_hash and oauth2 will drop support for Hashie v0 in the next major version. Please upgrade to a modern Hashie.")
112
+ # There is a bug in Hashie v0, which this accounts for.
113
+ token_value || fresh[key] || ""
114
+ end
115
+ # :nocov:
111
116
  end
112
117
 
113
118
  # Initialize an AccessToken
@@ -305,8 +310,8 @@ You may need to set `snaky: false`. See inline documentation for more info.
305
310
  # TODO: Switch when dropping Ruby < 2.5 support
306
311
  # params.transform_keys(&:to_sym) # Ruby 2.5 only
307
312
  # Old Ruby transform_keys alternative:
308
- sheesh = @params.each_with_object({}) { |(k, v), memo|
309
- memo[k.to_sym] = v
313
+ sheesh = @params.each_with_object({}) { |(key, value), memo|
314
+ memo[key.to_sym] = value
310
315
  }
311
316
  sheesh.merge(hsh)
312
317
  end
@@ -375,6 +380,7 @@ You may need to set `snaky: false`. See inline documentation for more info.
375
380
 
376
381
  def configure_authentication!(opts, verb)
377
382
  mode_opt = options[:mode]
383
+ param_name = options[:param_name]
378
384
  mode =
379
385
  if mode_opt.respond_to?(:call)
380
386
  mode_opt.call(verb)
@@ -388,19 +394,19 @@ You may need to set `snaky: false`. See inline documentation for more info.
388
394
 
389
395
  case mode
390
396
  when :header
391
- opts[:headers] ||= {}
392
- opts[:headers].merge!(headers)
397
+ request_headers = opts[:headers] ||= {}
398
+ request_headers.merge!(headers)
393
399
  when :query
394
400
  # OAuth 2.1 note: Bearer tokens in the query string are omitted from the spec due to security risks.
395
401
  # Prefer the default :header mode whenever possible.
396
- opts[:params] ||= {}
397
- opts[:params][options[:param_name]] = token
402
+ request_params = opts[:params] ||= {}
403
+ request_params[param_name] = token
398
404
  when :body
399
- opts[:body] ||= {}
400
- if opts[:body].is_a?(Hash)
401
- opts[:body][options[:param_name]] = token
405
+ request_body = opts[:body] ||= {}
406
+ if request_body.is_a?(Hash)
407
+ request_body[param_name] = token
402
408
  else
403
- opts[:body] += "&#{options[:param_name]}=#{token}"
409
+ opts[:body] = "#{request_body}&#{param_name}=#{token}"
404
410
  end
405
411
  # @todo support for multi-part (file uploads)
406
412
  else
data/lib/oauth2/client.rb CHANGED
@@ -86,8 +86,9 @@ module OAuth2
86
86
  @connection ||=
87
87
  Faraday.new(site, options[:connection_opts]) do |builder|
88
88
  oauth_debug_logging(builder)
89
- if options[:connection_build]
90
- options[:connection_build].call(builder)
89
+ connection_build = options[:connection_build]
90
+ if connection_build
91
+ connection_build.call(builder)
91
92
  else
92
93
  builder.request(:url_encoded) # form-encode POST params
93
94
  builder.adapter(Faraday.default_adapter) # make requests with Net::HTTP
@@ -149,9 +150,9 @@ module OAuth2
149
150
 
150
151
  case status
151
152
  when 301, 302, 303, 307
152
- req_opts[:redirect_count] ||= 0
153
- req_opts[:redirect_count] += 1
154
- return response if req_opts[:redirect_count] > options[:max_redirects]
153
+ redirect_count = (req_opts[:redirect_count] || 0).to_i + 1
154
+ req_opts[:redirect_count] = redirect_count
155
+ return response if redirect_count > options[:max_redirects]
155
156
 
156
157
  if status == 303
157
158
  verb = :get
@@ -338,8 +339,9 @@ module OAuth2
338
339
  #
339
340
  # @return [Hash] the params to add to a request or URL
340
341
  def redirection_params
341
- if options[:redirect_uri]
342
- {"redirect_uri" => options[:redirect_uri]}
342
+ redirect_uri = options[:redirect_uri]
343
+ if redirect_uri
344
+ {"redirect_uri" => redirect_uri}
343
345
  else
344
346
  {}
345
347
  end
@@ -446,7 +448,7 @@ module OAuth2
446
448
  url = connection.build_url(url).to_s
447
449
  # See: Hash#partition https://bugs.ruby-lang.org/issues/16252
448
450
  req_opts, oauth_opts = opts.
449
- partition { |k, _v| RESERVED_REQ_KEYS.include?(k.to_s) }.
451
+ partition { |key, _value| RESERVED_REQ_KEYS.include?(key.to_s) }.
450
452
  map(&:to_h)
451
453
 
452
454
  begin
@@ -454,10 +456,10 @@ module OAuth2
454
456
  req.params.update(req_opts[:params]) if req_opts[:params]
455
457
  yield(req) if block_given?
456
458
  end
457
- rescue Faraday::ConnectionFailed => e
458
- raise ConnectionError, e
459
- rescue Faraday::TimeoutError => e
460
- raise TimeoutError, e
459
+ rescue Faraday::ConnectionFailed => exception
460
+ raise ConnectionError, exception
461
+ rescue Faraday::TimeoutError => exception
462
+ raise TimeoutError, exception
461
463
  end
462
464
 
463
465
  parse = oauth_opts.key?(:parse) ? oauth_opts.delete(:parse) : Response::DEFAULT_OPTIONS[:parse]
@@ -467,29 +469,42 @@ module OAuth2
467
469
  end
468
470
 
469
471
  def resolve_redirect_location(current_location, location)
470
- safe_location =
471
- if location.respond_to?(:start_with?) && location.start_with?("//")
472
- "./#{location}"
473
- else
474
- location
475
- end
472
+ return protocol_relative_redirect_location(current_location, location) if location.respond_to?(:start_with?) && location.start_with?("//")
476
473
 
477
- current_location.merge(safe_location)
474
+ current_location.merge(location)
475
+ end
476
+
477
+ def protocol_relative_redirect_location(current_location, location)
478
+ protocol_relative_location = URI.parse(location)
479
+ authority = +""
480
+ authority << "#{protocol_relative_location.userinfo}@" if protocol_relative_location.userinfo
481
+ authority << protocol_relative_location.host.to_s
482
+ authority << ":#{protocol_relative_location.port}" if protocol_relative_location.port
483
+
484
+ current_location.dup.tap do |safe_location|
485
+ safe_location.path = "///#{authority}#{protocol_relative_location.path}"
486
+ safe_location.query = protocol_relative_location.query if safe_location.respond_to?(:query=)
487
+ safe_location.fragment = protocol_relative_location.fragment if safe_location.respond_to?(:fragment=)
488
+ end
478
489
  end
479
490
 
480
491
  def sanitize_redirect_options(req_opts, current_location, next_location)
481
492
  return req_opts unless cross_origin_redirect?(current_location, next_location)
482
493
 
483
494
  headers = req_opts[:headers]
484
- return req_opts unless headers && headers.any? { |key, _value| key.to_s.casecmp("Authorization").zero? }
495
+ return req_opts unless headers && headers.any? { |key, _value| authorization_header?(key) }
485
496
 
486
497
  safe_opts = req_opts.dup
487
498
  safe_headers = headers.dup
488
- safe_headers.delete_if { |key, _value| key.to_s.casecmp("Authorization").zero? }
499
+ safe_headers.delete_if { |key, _value| authorization_header?(key) }
489
500
  safe_opts[:headers] = safe_headers
490
501
  safe_opts
491
502
  end
492
503
 
504
+ def authorization_header?(key)
505
+ key.to_s.casecmp("Authorization").zero?
506
+ end
507
+
493
508
  def cross_origin_redirect?(current_location, next_location)
494
509
  current_location.scheme != next_location.scheme ||
495
510
  current_location.host != next_location.host ||
@@ -595,12 +610,13 @@ module OAuth2
595
610
 
596
611
  def oauth_debug_logging(builder)
597
612
  if OAuth2::OAUTH_DEBUG
613
+ config = OAuth2.config
598
614
  builder.response(
599
615
  :logger,
600
616
  OAuth2::AUTH_SANITIZER::SanitizedLogger.new(
601
617
  options[:logger],
602
- filtered_keys: OAuth2.config[:filtered_debug_keys],
603
- label: OAuth2.config[:filtered_label]
618
+ filtered_keys: config[:filtered_debug_keys],
619
+ label: config[:filtered_label]
604
620
  ),
605
621
  bodies: true
606
622
  )
data/lib/oauth2/error.rb CHANGED
@@ -20,9 +20,10 @@ module OAuth2
20
20
  @code = nil
21
21
  @description = nil
22
22
  if response.respond_to?(:parsed)
23
- if response.parsed.is_a?(Hash)
24
- @code = response.parsed["error"]
25
- @description = response.parsed["error_description"]
23
+ parsed_response = response.parsed
24
+ if parsed_response.is_a?(Hash)
25
+ @code = parsed_response["error"]
26
+ @description = parsed_response["error_description"]
26
27
  end
27
28
  elsif response.is_a?(Hash)
28
29
  @code = response["error"]
@@ -46,11 +47,12 @@ module OAuth2
46
47
  # @return [String] Message suitable for StandardError
47
48
  def error_message(response_body, opts = {})
48
49
  lines = []
50
+ error_description = opts[:error_description]
49
51
 
50
- lines << opts[:error_description] if opts[:error_description]
52
+ lines << error_description if error_description
51
53
 
52
- error_string = if response_body.respond_to?(:encode) && opts[:error_description].respond_to?(:encoding)
53
- script_encoding = opts[:error_description].encoding
54
+ error_string = if response_body.respond_to?(:encode) && error_description.respond_to?(:encoding)
55
+ script_encoding = error_description.encoding
54
56
  response_body.encode(script_encoding, invalid: :replace, undef: :replace)
55
57
  else
56
58
  response_body
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "json"
4
+ require "set"
4
5
  require "multi_xml"
5
6
  require "rack"
6
7
 
@@ -108,15 +109,16 @@ module OAuth2
108
109
  def parsed
109
110
  return @parsed if defined?(@parsed)
110
111
 
112
+ response_parser = parser
111
113
  @parsed =
112
- if parser.respond_to?(:call)
113
- case parser.arity
114
+ if response_parser.respond_to?(:call)
115
+ case response_parser.arity
114
116
  when 0
115
- parser.call
117
+ response_parser.call
116
118
  when 1
117
- parser.call(body)
119
+ response_parser.call(body)
118
120
  else
119
- parser.call(body, response)
121
+ response_parser.call(body, response)
120
122
  end
121
123
  end
122
124
 
@@ -132,9 +134,10 @@ module OAuth2
132
134
  #
133
135
  # @return [String, nil] The content type or nil if headers are not present
134
136
  def content_type
135
- return unless response.headers
137
+ response_headers = response.headers
138
+ return unless response_headers
136
139
 
137
- ((response.headers.values_at("content-type", "Content-Type").compact.first || "").split(";").first || "").strip.downcase
140
+ ((response_headers.values_at("content-type", "Content-Type").compact.first || "").split(";").first || "").strip.downcase
138
141
  end
139
142
 
140
143
  # Determines the parser to be used for the response body
@@ -154,11 +157,12 @@ module OAuth2
154
157
  def parser
155
158
  return @parser if defined?(@parser)
156
159
 
160
+ parse_option = options[:parse]
157
161
  @parser =
158
- if options[:parse].respond_to?(:call)
159
- options[:parse]
160
- elsif options[:parse]
161
- @@parsers[options[:parse].to_sym]
162
+ if parse_option.respond_to?(:call)
163
+ parse_option
164
+ elsif parse_option
165
+ @@parsers[parse_option.to_sym]
162
166
  end
163
167
 
164
168
  @parser ||= @@parsers[@@content_types[content_type]]
@@ -171,7 +175,7 @@ end
171
175
  OAuth2::Response.register_parser(:xml, ["text/xml", "application/rss+xml", "application/rdf+xml", "application/atom+xml", "application/xml"]) do |body|
172
176
  next body unless body.respond_to?(:to_str)
173
177
 
174
- MultiXml.parse(body)
178
+ (defined?(MultiXML) ? MultiXML : MultiXml).parse(body)
175
179
  end
176
180
 
177
181
  # Register JSON parser
@@ -2,7 +2,7 @@
2
2
 
3
3
  module OAuth2
4
4
  module Version
5
- VERSION = "2.0.22"
5
+ VERSION = "2.0.23"
6
6
  end
7
7
  VERSION = Version::VERSION # Traditional Constant Location
8
8
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,12 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oauth2
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.22
4
+ version: 2.0.23
5
5
  platform: ruby
6
6
  authors:
7
- - Peter Boling
8
- - Erik Michaels-Ober
9
- - Michael Bleigh
7
+ - Peter H. Boling
10
8
  bindir: exe
11
9
  cert_chain:
12
10
  - |
@@ -156,7 +154,7 @@ dependencies:
156
154
  version: '2.0'
157
155
  - - ">="
158
156
  - !ruby/object:Gem::Version
159
- version: 2.0.5
157
+ version: 2.0.6
160
158
  type: :runtime
161
159
  prerelease: false
162
160
  version_requirements: !ruby/object:Gem::Requirement
@@ -166,7 +164,7 @@ dependencies:
166
164
  version: '2.0'
167
165
  - - ">="
168
166
  - !ruby/object:Gem::Version
169
- version: 2.0.5
167
+ version: 2.0.6
170
168
  - !ruby/object:Gem::Dependency
171
169
  name: version_gem
172
170
  requirement: !ruby/object:Gem::Requirement
@@ -193,20 +191,20 @@ dependencies:
193
191
  requirements:
194
192
  - - "~>"
195
193
  - !ruby/object:Gem::Version
196
- version: '2.1'
194
+ version: '2.2'
197
195
  - - ">="
198
196
  - !ruby/object:Gem::Version
199
- version: 2.1.1
197
+ version: 2.2.5
200
198
  type: :development
201
199
  prerelease: false
202
200
  version_requirements: !ruby/object:Gem::Requirement
203
201
  requirements:
204
202
  - - "~>"
205
203
  - !ruby/object:Gem::Version
206
- version: '2.1'
204
+ version: '2.2'
207
205
  - - ">="
208
206
  - !ruby/object:Gem::Version
209
- version: 2.1.1
207
+ version: 2.2.5
210
208
  - !ruby/object:Gem::Dependency
211
209
  name: bundler-audit
212
210
  requirement: !ruby/object:Gem::Requirement
@@ -264,7 +262,7 @@ dependencies:
264
262
  version: '3.1'
265
263
  - - ">="
266
264
  - !ruby/object:Gem::Version
267
- version: 3.1.1
265
+ version: 3.1.2
268
266
  type: :development
269
267
  prerelease: false
270
268
  version_requirements: !ruby/object:Gem::Requirement
@@ -274,7 +272,7 @@ dependencies:
274
272
  version: '3.1'
275
273
  - - ">="
276
274
  - !ruby/object:Gem::Version
277
- version: 3.1.1
275
+ version: 3.1.2
278
276
  - !ruby/object:Gem::Dependency
279
277
  name: kettle-test
280
278
  requirement: !ruby/object:Gem::Requirement
@@ -284,7 +282,7 @@ dependencies:
284
282
  version: '2.0'
285
283
  - - ">="
286
284
  - !ruby/object:Gem::Version
287
- version: 2.0.3
285
+ version: 2.0.5
288
286
  type: :development
289
287
  prerelease: false
290
288
  version_requirements: !ruby/object:Gem::Requirement
@@ -294,7 +292,7 @@ dependencies:
294
292
  version: '2.0'
295
293
  - - ">="
296
294
  - !ruby/object:Gem::Version
297
- version: 2.0.3
295
+ version: 2.0.5
298
296
  - !ruby/object:Gem::Dependency
299
297
  name: turbo_tests2
300
298
  requirement: !ruby/object:Gem::Requirement
@@ -304,7 +302,7 @@ dependencies:
304
302
  version: '3.1'
305
303
  - - ">="
306
304
  - !ruby/object:Gem::Version
307
- version: 3.1.1
305
+ version: 3.1.2
308
306
  type: :development
309
307
  prerelease: false
310
308
  version_requirements: !ruby/object:Gem::Requirement
@@ -314,7 +312,7 @@ dependencies:
314
312
  version: '3.1'
315
313
  - - ">="
316
314
  - !ruby/object:Gem::Version
317
- version: 3.1.1
315
+ version: 3.1.2
318
316
  - !ruby/object:Gem::Dependency
319
317
  name: ruby-progressbar
320
318
  requirement: !ruby/object:Gem::Requirement
@@ -447,7 +445,6 @@ description: "\U0001F510 A Ruby wrapper for the OAuth 2.0 Authorization Framewor
447
445
  including the OAuth 2.1 draft spec, and OpenID Connect (OIDC)"
448
446
  email:
449
447
  - floss@galtzo.com
450
- - oauth-ruby@googlegroups.com
451
448
  executables: []
452
449
  extensions: []
453
450
  extra_rdoc_files:
@@ -502,10 +499,10 @@ licenses:
502
499
  - MIT
503
500
  metadata:
504
501
  homepage_uri: https://oauth2.galtzo.com
505
- source_code_uri: https://github.com/ruby-oauth/oauth2/tree/v2.0.22
506
- changelog_uri: https://github.com/ruby-oauth/oauth2/blob/v2.0.22/CHANGELOG.md
502
+ source_code_uri: https://github.com/ruby-oauth/oauth2/tree/v2.0.23
503
+ changelog_uri: https://github.com/ruby-oauth/oauth2/blob/v2.0.23/CHANGELOG.md
507
504
  bug_tracker_uri: https://github.com/ruby-oauth/oauth2/issues
508
- documentation_uri: https://www.rubydoc.info/gems/oauth2/2.0.22
505
+ documentation_uri: https://www.rubydoc.info/gems/oauth2/2.0.23
509
506
  funding_uri: https://github.com/sponsors/pboling
510
507
  wiki_uri: https://github.com/ruby-oauth/oauth2/wiki
511
508
  news_uri: https://www.railsbling.com/tags/oauth2
metadata.gz.sig CHANGED
Binary file