oauth2 2.0.24 → 2.0.26

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.
data/README.md CHANGED
@@ -1,18 +1,19 @@
1
- <a href="https://github.com/ruby-oauth"><img alt="ruby-oauth Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/ruby-oauth/avatar-128px.svg" width="14%" align="right"/></a>
1
+ <a href="https://github.com/ruby-oauth"><img alt="ruby-oauth Logo by GitHub" src="https://github.com/ruby-oauth.png?size=192" width="14%" align="right"/></a>
2
2
 
3
3
  # 🔐 OAuth2
4
4
 
5
- [![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![CodeCov Test Coverage][🏀codecovi]][🏀codecov] [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls] [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov] [![QLTY Maintainability][🏀qlty-mnti]][🏀qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-wf] [![CI Current][🚎11-c-wfi]][🚎11-c-wf] [![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf] [![CI JRuby][🚎10-j-wfi]][🚎10-j-wf] [![Deps Locked][🚎13-🔒️-wfi]][🚎13-🔒️-wf] [![Deps Unlocked][🚎14-🔓️-wfi]][🚎14-🔓️-wf] [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf] [![Apache SkyWalking Eyes License Compatibility Check][🚎15-🪪-wfi]][🚎15-🪪-wf]
5
+ [![Version][👽versioni]][👽version] [![Ruby Users Forum][✉️ruby-forum-top-img]][✉️ruby-forum] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license] [![Total downloads][👽dl-ranki]][👽dl-rank] [![CodeCov Test Coverage][🏀codecovi]][🏀codecov] [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls] [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov] [![QLTY Maintainability][🏀qlty-mnti]][🏀qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-wf] [![CI Current][🚎11-c-wfi]][🚎11-c-wf] [![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf] [![CI JRuby][🚎10-j-wfi]][🚎10-j-wf] [![Deps Locked][🚎13-🔒️-wfi]][🚎13-🔒️-wf] [![Deps Unlocked][🚎14-🔓️-wfi]][🚎14-🔓️-wf] [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf] [![Apache SkyWalking Eyes License Compatibility Check][🚎15-🪪-wfi]][🚎15-🪪-wf]
6
6
 
7
- `if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know][✉️discord-invite], as I may have missed the [discord notification][✉️discord-invite].
7
+ `if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know on Discord][✉️discord-invite] or [RubyForum][✉️ruby-forum], as I may have missed the notification.
8
8
 
9
9
  ---
10
10
 
11
11
  `if ci_badges.map(&:color).all? { it == "green"}` 👇️ send money so I can do more of this. FLOSS maintenance is now my full-time job.
12
12
 
13
- [![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate at ko-fi.com][🖇kofi-img]][🖇kofi]
13
+ [![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate at ko-fi.com][🖇kofi-img]][🖇kofi]
14
+ <p><sub>Corporate sponsors: <a href="https://alpha-omega.dev"><img alt="Alpha-Omega" src="https://alpha-omega.dev/wp-content/uploads/sites/22/2023/05/logo.svg" height="24"/></a> <a href="https://serpapi.com"><img alt="SerpApi" src="https://serpapi.com/assets/media_kit/logo-with-wordmark.svg" height="24"/></a> <a href="#-floss-funding">Become a sponsor</a></sub></p>
14
15
 
15
- <details>
16
+ <details markdown="1">
16
17
  <summary>👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️</summary>
17
18
 
18
19
  I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo).
@@ -150,13 +151,13 @@ See also the [OAuth 2.0 Spec][oauth2-spec], the [OpenID Connect Spec][oidc-spec]
150
151
 
151
152
  | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
152
153
  |-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
153
- | Works with JRuby | [![JRuby 9.2 Compat][💎jruby-9.2i]][🚎jruby-9.2-wf] [![JRuby 9.3 Compat][💎jruby-9.3i]][🚎jruby-9.3-wf] <br/> [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎jruby-9.4-wf] [![JRuby current Compat][💎jruby-c-i]][🚎10-j-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf]|
154
- | Works with Truffle Ruby | [![Truffle Ruby 22.3 Compat][💎truby-22.3i]][🚎truby-22.3-wf] [![Truffle Ruby 23.0 Compat][💎truby-23.0i]][🚎truby-23.0-wf] [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎truby-23.1-wf] <br/> [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf]|
155
- | Works with MRI Ruby 4 | [![Ruby 4.0 Compat][💎ruby-4.0i]][🚎11-c-wf] [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
154
+ | Works with JRuby | [![JRuby 9.2 Compat][💎jruby-9.2i]][🚎jruby-9.2-wf] [![JRuby 9.3 Compat][💎jruby-9.3i]][🚎jruby-9.3-wf] <br/> [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎jruby-9.4-wf] [![JRuby 10.0 Compat][💎jruby-10.0i]][🚎jruby-10.0-wf] [![JRuby current Compat][💎jruby-c-i]][🚎10-j-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf]|
155
+ | Works with Truffle Ruby | [![Truffle Ruby 22.3 Compat][💎truby-22.3i]][🚎truby-22.3-wf] [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎truby-23.1-wf] <br/> [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby 33.0 Compat][💎truby-33.0i]][🚎truby-33.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf]|
156
+ | Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
156
157
  | Works with MRI Ruby 3 | [![Ruby 3.0 Compat][💎ruby-3.0i]][🚎ruby-3.0-wf] [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎ruby-3.1-wf] [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎ruby-3.2-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎ruby-3.3-wf] [![Ruby 3.4 Compat][💎ruby-3.4i]][🚎ruby-3.4-wf]|
157
158
  | Works with MRI Ruby 2 | ![Ruby 2.2 Compat][💎ruby-2.2i] ![Ruby 2.3 Compat][💎ruby-2.3i] <br/> [![Ruby 2.4 Compat][💎ruby-2.4i]][🚎ruby-2.4-wf] [![Ruby 2.5 Compat][💎ruby-2.5i]][🚎ruby-2.5-wf] [![Ruby 2.6 Compat][💎ruby-2.6i]][🚎ruby-2.6-wf] [![Ruby 2.7 Compat][💎ruby-2.7i]][🚎ruby-2.7-wf]|
158
- | Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] |
159
- | Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
159
+ | Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] |
160
+ | Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on GitHub.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
160
161
  | Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
161
162
  | Compliance | [![License: MIT][📄license-img]][📄license] [![Apache license compatibility: Category A][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
162
163
  | Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
@@ -165,26 +166,30 @@ See also the [OAuth 2.0 Spec][oauth2-spec], the [OpenID Connect Spec][oidc-spec]
165
166
 
166
167
  ### Compatibility
167
168
 
168
- Compatible with MRI Ruby 2.2.0+, and concordant releases of JRuby, and TruffleRuby.
169
+ Compatible with MRI Ruby 2.2.0+, JRuby, and TruffleRuby.
169
170
  CI workflows and Appraisals are generated for MRI Ruby 2.4+.
171
+ The current MRI CI lane runs on Linux and macOS.
170
172
  This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
171
173
  may be higher than the gem's runtime compatibility floor when legacy Rubies are
172
174
  not practical for the current toolchain.
173
175
 
174
- | 🚚 _Amazing_ test matrix was brought to you by | The Kettle dev/test stack |
175
- |------------------------------------------------|---------------------------|
176
+ <a href="https://github.com/kettle-dev"><img alt="kettle-dev Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/kettle-dev/avatar-128px.svg" width="14%" align="right"/></a>
177
+
178
+ The _amazing_ test matrix is powered by the kettle-dev stack.
176
179
 
177
- <details>
178
- <summary>How We Manage Complexity In Tests</summary>
180
+ <details markdown="1">
181
+ <summary>How kettle-dev manages complexity in tests</summary>
179
182
 
180
- | Gem | Source | Role | Daily download rank |
183
+ | Gem | Source | Role | Total downloads |
181
184
  |-----|--------|------|---------------------|
182
- | [appraisal2](https://bestgems.org/gems/appraisal2) | [GitHub](https://github.com/appraisal-rb/appraisal2) | multi-dependency Appraisal matrix generation | [![Daily download rank for appraisal2](https://img.shields.io/gem/rd/appraisal2.svg?style=flat-square)](https://bestgems.org/gems/appraisal2) |
183
- | [appraisal2-rubocop](https://bestgems.org/gems/appraisal2-rubocop) | [GitHub](https://github.com/appraisal-rb/appraisal2-rubocop) | RuboCop Appraisal generator integration | [![Daily download rank for appraisal2-rubocop](https://img.shields.io/gem/rd/appraisal2-rubocop.svg?style=flat-square)](https://bestgems.org/gems/appraisal2-rubocop) |
184
- | [turbo_tests2](https://bestgems.org/gems/turbo_tests2) | [GitHub](https://github.com/galtzo-floss/turbo_tests2) | parallel test execution | [![Daily download rank for turbo_tests2](https://img.shields.io/gem/rd/turbo_tests2.svg?style=flat-square)](https://bestgems.org/gems/turbo_tests2) |
185
- | [kettle-test](https://bestgems.org/gems/kettle-test) | [GitHub](https://github.com/kettle-dev/kettle-test) | standard test runner and coverage harness | [![Daily download rank for kettle-test](https://img.shields.io/gem/rd/kettle-test.svg?style=flat-square)](https://bestgems.org/gems/kettle-test) |
186
- | [kettle-soup-cover](https://bestgems.org/gems/kettle-soup-cover) | [GitHub](https://github.com/kettle-dev/kettle-soup-cover) | SimpleCov coverage policy and reporting | [![Daily download rank for kettle-soup-cover](https://img.shields.io/gem/rd/kettle-soup-cover.svg?style=flat-square)](https://bestgems.org/gems/kettle-soup-cover) |
187
- | [rubocop-lts](https://bestgems.org/gems/rubocop-lts) | [GitHub](https://github.com/rubocop-lts/rubocop-lts) | Ruby-version-aware linting | [![Daily download rank for rubocop-lts](https://img.shields.io/gem/rd/rubocop-lts.svg?style=flat-square)](https://bestgems.org/gems/rubocop-lts) |
185
+ | [appraisal2](https://clickgems.clickhouse.com/dashboard/appraisal2) | [GitHub](https://github.com/appraisal-rb/appraisal2) | multi-dependency Appraisal matrix generation | [![Total downloads for appraisal2](https://img.shields.io/gem/dt/appraisal2.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/appraisal2) |
186
+ | [appraisal2-rubocop](https://clickgems.clickhouse.com/dashboard/appraisal2-rubocop) | [GitHub](https://github.com/appraisal-rb/appraisal2-rubocop) | RuboCop Appraisal generator integration | [![Total downloads for appraisal2-rubocop](https://img.shields.io/gem/dt/appraisal2-rubocop.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/appraisal2-rubocop) |
187
+ | [kettle-dev](https://clickgems.clickhouse.com/dashboard/kettle-dev) | [GitHub](https://github.com/kettle-dev/kettle-dev) | development, release, and CI workflow tooling | [![Total downloads for kettle-dev](https://img.shields.io/gem/dt/kettle-dev.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-dev) |
188
+ | [kettle-jem](https://clickgems.clickhouse.com/dashboard/kettle-jem) | [GitHub](https://github.com/kettle-dev/kettle-jem) | Appraisals & CI workflow templates | [![Total downloads for kettle-jem](https://img.shields.io/gem/dt/kettle-jem.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-jem) |
189
+ | [kettle-soup-cover](https://clickgems.clickhouse.com/dashboard/kettle-soup-cover) | [GitHub](https://github.com/kettle-dev/kettle-soup-cover) | SimpleCov coverage policy and reporting | [![Total downloads for kettle-soup-cover](https://img.shields.io/gem/dt/kettle-soup-cover.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-soup-cover) |
190
+ | [kettle-test](https://clickgems.clickhouse.com/dashboard/kettle-test) | [GitHub](https://github.com/kettle-dev/kettle-test) | standard test runner and coverage harness | [![Total downloads for kettle-test](https://img.shields.io/gem/dt/kettle-test.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-test) |
191
+ | [rubocop-lts](https://clickgems.clickhouse.com/dashboard/rubocop-lts) | [GitHub](https://github.com/rubocop-lts/rubocop-lts) | Ruby-version-aware linting | [![Total downloads for rubocop-lts](https://img.shields.io/gem/dt/rubocop-lts.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/rubocop-lts) |
192
+ | [turbo_tests2](https://clickgems.clickhouse.com/dashboard/turbo_tests2) | [GitHub](https://github.com/galtzo-floss/turbo_tests2) | parallel test execution | [![Total downloads for turbo_tests2](https://img.shields.io/gem/dt/turbo_tests2.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/turbo_tests2) |
188
193
 
189
194
  </details>
190
195
 
@@ -193,39 +198,22 @@ not practical for the current toolchain.
193
198
  <details markdown="1">
194
199
  <summary>Find this repo on federated forges (Coming soon!)</summary>
195
200
 
196
- | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
197
- |-------------------------------------------------|-----------------------------------------------------------------------|---------------------------|--------------------------|---------------------------|--------------------------|------------------------------|
198
- | 🧪 [ruby-oauth/oauth2 on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix | ➖ |
199
- | 🧊 [ruby-oauth/oauth2 on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |
200
- | 🐙 [ruby-oauth/oauth2 on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix | [💚][gh-discussions] |
201
- | 🎮️ [Discord Server][✉️discord-invite] | [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] | [Let's][✉️discord-invite] | [talk][✉️discord-invite] | [about][✉️discord-invite] | [this][✉️discord-invite] | [library!][✉️discord-invite] |
201
+ | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI |
202
+ |-------------------------------------------------|-------------------------------------------|-------------------|------------------|-----------------|----------------|
203
+ | 🧪 [ruby-oauth/oauth2 on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix |
204
+ | 🧊 [ruby-oauth/oauth2 on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix |
205
+ | 🐙 [ruby-oauth/oauth2 on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix |
202
206
 
203
207
  </details>
204
208
 
205
- [gh-discussions]: https://github.com/ruby-oauth/oauth2/discussions
209
+ ### Enterprise Support
206
210
 
207
- ### Enterprise Support [![Tidelift](https://tidelift.com/badges/package/rubygems/oauth2)](https://tidelift.com/subscription/pkg/rubygems-oauth2?utm_source=rubygems-oauth2&utm_medium=referral&utm_campaign=readme)
208
-
209
- Available as part of the Tidelift Subscription.
210
-
211
- <details markdown="1">
212
- <summary>Need enterprise-level guarantees?</summary>
211
+ For enterprise support from the maintainer, use [Upwork][👨🏼‍🏫expsup-upwork] or [CodeMentor][👨🏼‍🏫expsup-codementor].
213
212
 
214
- The maintainers of this and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source packages you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact packages you use.
215
-
216
- [![Get help from me on Tidelift][🏙️entsup-tidelift-img]][🏙️entsup-tidelift]
217
-
218
- - 💡Subscribe for support guarantees covering _all_ your FLOSS dependencies
219
- - 💡Tidelift is part of [Sonar][🏙️entsup-tidelift-sonar]
220
- - 💡Tidelift pays maintainers to maintain the software you depend on!<br/>📊`@`Pointy Haired Boss: An [enterprise support][🏙️entsup-tidelift] subscription is "[never gonna let you down][🧮kloc]", and *supports* open source maintainers
221
-
222
- Alternatively:
213
+ Other support channels:
223
214
 
215
+ - [![Ruby Users Forum][✉️ruby-forum-img]][✉️ruby-forum]
224
216
  - [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
225
- - [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork]
226
- - [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor]
227
-
228
- </details>
229
217
 
230
218
  ## ✨ Installation
231
219
 
@@ -641,19 +629,21 @@ We welcome both individual and corporate sponsors! We also offer a
641
629
  wide array of funding channels to account for your preferences.
642
630
  Currently, [Open Collective][🖇osc] is our preferred funding platform.
643
631
 
632
+ ### Corporate Sponsorship
633
+
634
+ - <a href="https://alpha-omega.dev"><img alt="Alpha-Omega" src="https://alpha-omega.dev/wp-content/uploads/sites/22/2023/05/logo.svg" height="32"/></a> [Alpha-Omega](https://alpha-omega.dev) — backed by [Amazon Web Services](https://aws.amazon.com), [Google](https://www.google.com), [Microsoft](https://www.microsoft.com), [Anthropic](https://www.anthropic.com), [OpenAI](https://openai.com), [Citi](https://www.citigroup.com), [GitHub](https://github.com)
635
+ - <a href="https://serpapi.com"><img alt="SerpApi" src="https://serpapi.com/assets/media_kit/logo-with-wordmark.svg" height="32"/></a> [SerpApi](https://serpapi.com)
636
+
644
637
  **If you're working in a company that's making significant use of ruby-oauth tools we'd
645
638
  appreciate it if you suggest to your company to become a ruby-oauth sponsor.**
646
639
 
640
+ ### Individual Support
641
+
647
642
  You can support the development of ruby-oauth tools via
648
643
  [GitHub Sponsors][🖇sponsor],
649
644
  [Liberapay][⛳liberapay],
650
- [PayPal][🖇paypal],
651
- [Open Collective][🖇osc]
652
- and [Tidelift][🏙️entsup-tidelift].
653
-
654
- | 📍 NOTE |
655
- |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
656
- | If doing a sponsorship in the form of donation is problematic for your company <br/> from an accounting standpoint, we'd recommend the use of Tidelift, <br/> where you can get a support-like subscription instead. |
645
+ [Open Collective][🖇osc],
646
+ and [PayPal][🖇paypal].
657
647
 
658
648
  ### Open Collective for Individuals
659
649
 
@@ -673,10 +663,6 @@ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day
673
663
 
674
664
  <!-- OPENCOLLECTIVE-ORGANIZATIONS:START -->
675
665
  No sponsors yet. Be the first!
676
-
677
- ### Open Collective for Donors
678
-
679
- [Bill Woika](https://opencollective.com/bill-woika) [Philipp Ebneter](https://opencollective.com/guest-e77282f7) [Grigoriy](https://opencollective.com/guest-c93e0c48)
680
666
  <!-- OPENCOLLECTIVE-ORGANIZATIONS:END -->
681
667
 
682
668
  [kettle-readme-backers]: https://github.com/ruby-oauth/oauth2/blob/main/bin/kettle-readme-backers
@@ -691,7 +677,7 @@ I’m developing a new library, [floss_funding][🖇floss-funding-gem], designed
691
677
 
692
678
  **[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
693
679
 
694
- [![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate to my FLOSS efforts at ko-fi.com][🖇kofi-img]][🖇kofi] [![Donate to my FLOSS efforts using Patreon][🖇patreon-img]][🖇patreon]
680
+ [![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate to my FLOSS efforts at ko-fi.com][🖇kofi-img]][🖇kofi]
695
681
 
696
682
  ## 🔐 Security
697
683
 
@@ -700,8 +686,7 @@ See [SECURITY.md][🔐security].
700
686
  ## 🤝 Contributing
701
687
 
702
688
  If you need some ideas of where to help, you could work on adding more code coverage,
703
- or if it is already 💯 (see [below](#code-coverage)) check [issues][🤝gh-issues] or [PRs][🤝gh-pulls],
704
- or use the gem and think about how it could be better.
689
+ check [issues][🤝gh-issues] or [PRs][🤝gh-pulls], or use the gem and think about how it could be better.
705
690
 
706
691
  We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
707
692
 
@@ -737,14 +722,14 @@ Made with [contributors-img][🖐contrib-rocks].
737
722
 
738
723
  Also see GitLab Contributors: [https://gitlab.com/ruby-oauth/oauth2/-/graphs/main][🚎contributors-gl]
739
724
 
740
- <details>
725
+ <details markdown="1">
741
726
  <summary>⭐️ Star History</summary>
742
727
 
743
- <a href="https://star-history.com/ruby-oauth/oauth2&Date">
728
+ <a href="https://star-history.dera.page/#ruby-oauth/oauth2&type=date&legend=top-left">
744
729
  <picture>
745
- <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=ruby-oauth/oauth2&type=Date&theme=dark" />
746
- <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=ruby-oauth/oauth2&type=Date" />
747
- <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=ruby-oauth/oauth2&type=Date" />
730
+ <source media="(prefers-color-scheme: dark)" srcset="https://star-history.dera.page/svg?repos=ruby-oauth/oauth2&type=date&theme=dark&legend=top-left" />
731
+ <source media="(prefers-color-scheme: light)" srcset="https://star-history.dera.page/svg?repos=ruby-oauth/oauth2&type=date&legend=top-left" />
732
+ <img alt="Star History Chart" src="https://star-history.dera.page/svg?repos=ruby-oauth/oauth2&type=date&legend=top-left" />
748
733
  </picture>
749
734
  </a>
750
735
 
@@ -779,7 +764,7 @@ See [CHANGELOG.md][📌changelog] for a list of releases.
779
764
  ## 📄 License
780
765
 
781
766
  The gem is available as open source under the terms of
782
- the [MIT](MIT.md) [![License: MIT][📄license-img]][📄license-ref].
767
+ the [MIT](https://github.com/ruby-oauth/oauth2/blob/main/MIT.md) [![License: MIT][📄license-img]][📄license-ref].
783
768
 
784
769
  ### © Copyright
785
770
 
@@ -790,17 +775,15 @@ See [LICENSE.md][📄license] for the official copyright notice.
790
775
 
791
776
  - Copyright (c) 2010-2014, 2016-2017 Erik Michaels-Ober
792
777
  - Copyright (c) 2010 Jeremy Kemper
793
- - Copyright (c) 2010-2011 Michael Bleigh
778
+ - Copyright (c) 2010-2011, 2014 Michael Bleigh
794
779
  - Copyright (c) 2010-2011 Paul Walker
795
780
  - Copyright (c) 2010 rick
796
781
  - Copyright (c) 2010 Tim Habermaas
797
782
  - Copyright (c) 2010 Wynn Netherland
798
783
  - Copyright (c) 2011 Alexander Lang
799
- - Copyright (c) 2011 Alexander Lang
800
784
  - Copyright (c) 2011 Greg Spurrier
801
785
  - Copyright (c) 2011 Jay Adkisson
802
786
  - Copyright (c) 2011 Luke Saunders
803
- - Copyright (c) 2011 Paul Walker
804
787
  - Copyright (c) 2011 Simon Gate
805
788
  - Copyright (c) 2012 Bas Vodde
806
789
  - Copyright (c) 2012 Damian Janowski
@@ -823,7 +806,6 @@ See [LICENSE.md][📄license] for the official copyright notice.
823
806
  - Copyright (c) 2014 Dave Stevens
824
807
  - Copyright (c) 2014 Ellis Berner
825
808
  - Copyright (c) 2014 Frank Macreery
826
- - Copyright (c) 2014 Michael Bleigh
827
809
  - Copyright (c) 2014 Olivier Lacan
828
810
  - Copyright (c) 2014 Peter Souter
829
811
  - Copyright (c) 2014 Ryan Williams
@@ -836,7 +818,7 @@ See [LICENSE.md][📄license] for the official copyright notice.
836
818
  - Copyright (c) 2016 Linus Pettersson
837
819
  - Copyright (c) 2016 Motoshi Nishihira
838
820
  - Copyright (c) 2017 Adrian Setyadi
839
- - Copyright (c) 2017-2018 Benjamin Quorning
821
+ - Copyright (c) 2017-2018, 2022 Benjamin Quorning
840
822
  - Copyright (c) 2017 Christoph Petschnig
841
823
  - Copyright (c) 2017, 2022 Nathaniel Bibler
842
824
  - Copyright (c) 2017 Oleg
@@ -848,10 +830,8 @@ See [LICENSE.md][📄license] for the official copyright notice.
848
830
  - Copyright (c) 2018 David Christensen
849
831
  - Copyright (c) 2018 fossabot
850
832
  - Copyright (c) 2018 Jeff Moore
851
- - Copyright (c) 2018 Jeff Moore
852
833
  - Copyright (c) 2018 Jonathan del Strother
853
834
  - Copyright (c) 2018 Joseph Page
854
- - Copyright (c) 2018 Joseph Page
855
835
  - Copyright (c) 2018 Lomey
856
836
  - Copyright (c) 2018 Markus Bengts
857
837
  - Copyright (c) 2018 Mathias Klippinge
@@ -872,24 +852,26 @@ See [LICENSE.md][📄license] for the official copyright notice.
872
852
  - Copyright (c) 2021 Jan Zaydowicz
873
853
  - Copyright (c) 2021 Nicholas Palaniuk
874
854
  - Copyright (c) 2021-2022 Stan Hu
875
- - Copyright (c) 2022 Benjamin Quorning
876
855
  - Copyright (c) 2022 Bouke van der Bijl
877
856
  - Copyright (c) 2022 nov
878
857
  - Copyright (c) 2022 Rick Selby
879
858
  - Copyright (c) 2022 Ryo Takahashi
880
859
  - Copyright (c) 2023 Jessie Young
881
860
  - Copyright (c) 2023 Карим Гимадеев
882
- - Copyright (c) 2024 Aboling0
861
+ - Copyright (c) 2024-2026 Annibelle Boling
883
862
  - Copyright (c) 2024 Elise Wood
884
863
  - Copyright (c) 2024 Manuel van Rijn
885
- - Copyright (c) 2025-2026 Annibelle Boling
886
864
  - Copyright (c) 2025 Mark James
887
865
  - Copyright (c) 2025 Mridang Agarwalla
888
866
  - Copyright (c) 2025 Sasa Rosic
867
+ - Copyright (c) 2026 Daniel Pepper
868
+ - Copyright (c) 2026 iamibi
889
869
  - Copyright (c) 2026 Jonathan Grinstead
890
870
  - Copyright (c) 2026 kain
871
+ - Copyright (c) 2026 makssein
872
+ - Copyright (c) 2026 Martin Vlach
873
+ - Copyright (c) 2026 Mubelotix
891
874
  - Copyright (c) 2026 Rob Zolkos
892
- - Copyright (c) 2026 StepSecurity Bot
893
875
 
894
876
  </details>
895
877
 
@@ -902,11 +884,12 @@ I'm hoping to be able to pay for my kids' health insurance this month,
902
884
  so if you value the work I am doing, I need your support.
903
885
  Please consider sponsoring me or the project.
904
886
 
905
- To join the community or get help 👇️ Join the Discord.
887
+ To join the community or get help, use the RubyForum or Discord.
906
888
 
889
+ [![Ruby Users Forum][✉️ruby-forum-img]][✉️ruby-forum]
907
890
  [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
908
891
 
909
- To say "thanks!" ☝️ Join the Discord or 👇️ send money.
892
+ To say "thanks!" ☝️ Join the community or 👇️ send money.
910
893
 
911
894
  [![Sponsor ruby-oauth/oauth2 on Open Source Collective][🖇osc-all-bottom-img]][🖇osc] 💌 [![Sponsor me on GitHub Sponsors][🖇sponsor-bottom-img]][🖇sponsor] 💌 [![Sponsor me on Liberapay][⛳liberapay-bottom-img]][⛳liberapay] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal]
912
895
 
@@ -933,12 +916,8 @@ Thanks for RTFM. ☺️
933
916
  [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
934
917
  [🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
935
918
  [🖇sponsor]: https://github.com/sponsors/pboling
936
- [🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
937
- [🖇polar]: https://polar.sh/pboling
938
919
  [🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
939
920
  [🖇kofi]: https://ko-fi.com/pboling
940
- [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
941
- [🖇patreon]: https://patreon.com/galtzo
942
921
  [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
943
922
  [🖇buyme-img]: https://img.buymeacoffee.com/button-api/?text=Buy%20me%20a%20latte&emoji=&slug=pboling&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff
944
923
  [🖇buyme]: https://www.buymeacoffee.com/pboling
@@ -951,11 +930,14 @@ Thanks for RTFM. ☺️
951
930
  [✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
952
931
  [✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
953
932
  [✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
933
+ [✉️ruby-forum-top-img]: https://img.shields.io/discourse/topics?server=https://www.rubyforum.org&style=flat&logo=discourse&label=Ruby%20Users%20Forum
934
+ [✉️ruby-forum-img]: https://img.shields.io/discourse/topics?server=https://www.rubyforum.org&style=for-the-badge&logo=discourse&label=Ruby%20Users%20Forum
935
+ [✉️ruby-forum]: https://www.rubyforum.org/tag/oauth2
954
936
 
955
937
  [✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
956
938
  [⛳️gem-namespace]: https://github.com/ruby-oauth/oauth2
957
939
  [⛳️namespace-img]: https://img.shields.io/badge/namespace-OAuth2-3C2D2D.svg?style=square&logo=ruby&logoColor=white
958
- [⛳️gem-name]: https://bestgems.org/gems/oauth2
940
+ [⛳️gem-name]: https://clickgems.clickhouse.com/dashboard/oauth2
959
941
  [⛳️name-img]: https://img.shields.io/badge/name-oauth2-3C2D2D.svg?style=square&logo=rubygems&logoColor=red
960
942
  [⛳️tag-img]: https://img.shields.io/github/tag/ruby-oauth/oauth2.svg
961
943
  [⛳️tag]: https://github.com/ruby-oauth/oauth2/releases
@@ -987,16 +969,13 @@ Thanks for RTFM. ☺️
987
969
  [👨🏼‍🏫expsup-upwork-img]: https://img.shields.io/badge/UpWork-13544E?style=for-the-badge&logo=Upwork&logoColor=white
988
970
  [👨🏼‍🏫expsup-codementor]: https://www.codementor.io/peterboling?utm_source=github&utm_medium=button&utm_term=peterboling&utm_campaign=github
989
971
  [👨🏼‍🏫expsup-codementor-img]: https://img.shields.io/badge/CodeMentor-Get_Help-1abc9c?style=for-the-badge&logo=CodeMentor&logoColor=white
990
- [🏙️entsup-tidelift]: https://tidelift.com/subscription/pkg/rubygems-oauth2?utm_source=rubygems-oauth2&utm_medium=referral&utm_campaign=readme
991
- [🏙️entsup-tidelift-img]: https://img.shields.io/badge/Tidelift_and_Sonar-Enterprise_Support-FD3456?style=for-the-badge&logo=sonar&logoColor=white
992
- [🏙️entsup-tidelift-sonar]: https://blog.tidelift.com/tidelift-joins-sonar
993
972
  [💁🏼‍♂️peterboling]: http://www.peterboling.com
994
973
  [🚂railsbling]: http://www.railsbling.com
995
974
  [📜src-gl-img]: https://img.shields.io/badge/GitLab-FBA326?style=for-the-badge&logo=Gitlab&logoColor=orange
996
975
  [📜src-gl]: https://gitlab.com/ruby-oauth/oauth2
997
976
  [📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
998
977
  [📜src-cb]: https://codeberg.org/ruby-oauth/oauth2
999
- [📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
978
+ [📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
1000
979
  [📜src-gh]: https://github.com/ruby-oauth/oauth2
1001
980
  [📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
1002
981
  [📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
@@ -1004,9 +983,9 @@ Thanks for RTFM. ☺️
1004
983
  [📜gh-wiki]: https://github.com/ruby-oauth/oauth2/wiki
1005
984
  [📜gl-wiki-img]: https://img.shields.io/badge/wiki-gitlab-943CD2.svg?style=for-the-badge&logo=gitlab&logoColor=white
1006
985
  [📜gh-wiki-img]: https://img.shields.io/badge/wiki-github-943CD2.svg?style=for-the-badge&logo=github&logoColor=white
1007
- [👽dl-rank]: https://bestgems.org/gems/oauth2
1008
- [👽dl-ranki]: https://img.shields.io/gem/rd/oauth2.svg
1009
- [👽version]: https://bestgems.org/gems/oauth2
986
+ [👽dl-rank]: https://clickgems.clickhouse.com/dashboard/oauth2
987
+ [👽dl-ranki]: https://img.shields.io/gem/dt/oauth2.svg
988
+ [👽version]: https://clickgems.clickhouse.com/dashboard/oauth2
1010
989
  [👽versioni]: https://img.shields.io/gem/v/oauth2.svg
1011
990
  [🏀qlty-mnt]: https://qlty.sh/gh/ruby-oauth/projects/oauth2
1012
991
  [🏀qlty-mnti]: https://qlty.sh/gh/ruby-oauth/projects/oauth2/maintainability.svg
@@ -1028,11 +1007,12 @@ Thanks for RTFM. ☺️
1028
1007
  [🚎jruby-9.2-wf]: https://github.com/ruby-oauth/oauth2/actions/workflows/jruby-9.2.yml
1029
1008
  [🚎jruby-9.3-wf]: https://github.com/ruby-oauth/oauth2/actions/workflows/jruby-9.3.yml
1030
1009
  [🚎jruby-9.4-wf]: https://github.com/ruby-oauth/oauth2/actions/workflows/jruby-9.4.yml
1010
+ [🚎jruby-10.0-wf]: https://github.com/ruby-oauth/oauth2/actions/workflows/jruby-10.0.yml
1031
1011
  [🚎truby-22.3-wf]: https://github.com/ruby-oauth/oauth2/actions/workflows/truffleruby-22.3.yml
1032
- [🚎truby-23.0-wf]: https://github.com/ruby-oauth/oauth2/actions/workflows/truffleruby-23.0.yml
1033
1012
  [🚎truby-23.1-wf]: https://github.com/ruby-oauth/oauth2/actions/workflows/truffleruby-23.1.yml
1034
1013
  [🚎truby-24.2-wf]: https://github.com/ruby-oauth/oauth2/actions/workflows/truffleruby-24.2.yml
1035
1014
  [🚎truby-25.0-wf]: https://github.com/ruby-oauth/oauth2/actions/workflows/truffleruby-25.0.yml
1015
+ [🚎truby-33.0-wf]: https://github.com/ruby-oauth/oauth2/actions/workflows/truffleruby-33.0.yml
1036
1016
  [🚎2-cov-wf]: https://github.com/ruby-oauth/oauth2/actions/workflows/coverage.yml
1037
1017
  [🚎2-cov-wfi]: https://github.com/ruby-oauth/oauth2/actions/workflows/coverage.yml/badge.svg
1038
1018
  [🚎3-hd-wf]: https://github.com/ruby-oauth/oauth2/actions/workflows/heads.yml
@@ -1064,18 +1044,18 @@ Thanks for RTFM. ☺️
1064
1044
  [💎ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
1065
1045
  [💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
1066
1046
  [💎ruby-3.4i]: https://img.shields.io/badge/Ruby-3.4-CC342D?style=for-the-badge&logo=ruby&logoColor=white
1067
- [💎ruby-4.0i]: https://img.shields.io/badge/Ruby-4.0-CC342D?style=for-the-badge&logo=ruby&logoColor=white
1068
1047
  [💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
1069
1048
  [💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
1070
1049
  [💎truby-22.3i]: https://img.shields.io/badge/Truffle_Ruby-22.3-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
1071
- [💎truby-23.0i]: https://img.shields.io/badge/Truffle_Ruby-23.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
1072
1050
  [💎truby-23.1i]: https://img.shields.io/badge/Truffle_Ruby-23.1-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
1073
1051
  [💎truby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
1074
1052
  [💎truby-25.0i]: https://img.shields.io/badge/Truffle_Ruby-25.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
1053
+ [💎truby-33.0i]: https://img.shields.io/badge/Truffle_Ruby-33.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
1075
1054
  [💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
1076
1055
  [💎jruby-9.2i]: https://img.shields.io/badge/JRuby-9.2-FBE742?style=for-the-badge&logo=ruby&logoColor=red
1077
1056
  [💎jruby-9.3i]: https://img.shields.io/badge/JRuby-9.3-FBE742?style=for-the-badge&logo=ruby&logoColor=red
1078
1057
  [💎jruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge&logo=ruby&logoColor=red
1058
+ [💎jruby-10.0i]: https://img.shields.io/badge/JRuby-10.0-FBE742?style=for-the-badge&logo=ruby&logoColor=red
1079
1059
  [💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
1080
1060
  [💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
1081
1061
  [🤝gh-issues]: https://github.com/ruby-oauth/oauth2/issues
@@ -1104,12 +1084,12 @@ Thanks for RTFM. ☺️
1104
1084
  [📌gitmoji]: https://gitmoji.dev
1105
1085
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
1106
1086
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
1107
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.558-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1087
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.657-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1108
1088
  [🔐security]: https://github.com/ruby-oauth/oauth2/blob/main/SECURITY.md
1109
1089
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
1110
1090
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
1111
1091
  [📄license]: LICENSE.md
1112
- [📄license-ref]: MIT.md
1092
+ [📄license-ref]: https://github.com/ruby-oauth/oauth2/blob/main/MIT.md
1113
1093
  [📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
1114
1094
  [📄license-compat]: https://www.apache.org/legal/resolved.html#category-a
1115
1095
  [📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-%E2%9C%93-259D6C.svg?style=flat&logo=Apache
@@ -1134,5 +1114,5 @@ Thanks for RTFM. ☺️
1134
1114
  | Homepage | https://github.com/ruby-oauth/oauth2 |
1135
1115
  | Source | https://github.com/ruby-oauth/oauth2 |
1136
1116
  | License | `MIT` |
1137
- | 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 |
1117
+ | Funding | https://github.com/sponsors/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/ruby-oauth, https://thanks.dev/u/gh/pboling, https://www.buymeacoffee.com/pboling |
1138
1118
  <!-- kettle-jem:metadata:end -->
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # :nocov:
3
+ # simplecov:disable
4
4
  begin
5
5
  # The first version of hashie that has a version file was 1.1.0
6
6
  # The first version of hashie that required the version file at runtime was 3.2.0
@@ -13,7 +13,7 @@ begin
13
13
  rescue LoadError
14
14
  nil
15
15
  end
16
- # :nocov:
16
+ # simplecov:enable
17
17
 
18
18
  module OAuth2
19
19
  class AccessToken # rubocop:disable Metrics/ClassLength
@@ -66,10 +66,10 @@ module OAuth2
66
66
  t_key = supported_keys[0]
67
67
  extra_tokens_warning(supported_keys, t_key)
68
68
  end
69
- # :nocov:
69
+ # simplecov:disable
70
70
  # TODO: Get rid of this branching logic when dropping Hashie < v3.2
71
71
  token = extract_token_value(fresh, t_key)
72
- # :nocov:
72
+ # simplecov:enable
73
73
  new(client, token, fresh)
74
74
  end
75
75
 
@@ -103,7 +103,7 @@ You may need to set `snaky: false`. See inline documentation for more info.
103
103
  ])
104
104
  end
105
105
 
106
- # :nocov:
106
+ # simplecov:disable
107
107
  def extract_token_value(fresh, key)
108
108
  token_value = fresh.delete(key)
109
109
  return token_value || "" if defined?(Hashie::VERSION)
@@ -112,7 +112,7 @@ You may need to set `snaky: false`. See inline documentation for more info.
112
112
  # There is a bug in Hashie v0, which this accounts for.
113
113
  token_value || fresh[key] || ""
114
114
  end
115
- # :nocov:
115
+ # simplecov:enable
116
116
  end
117
117
 
118
118
  # Initialize an AccessToken
@@ -157,9 +157,14 @@ You may need to set `snaky: false`. See inline documentation for more info.
157
157
  no_tokens = (@token.nil? || @token.empty?) && (@refresh_token.nil? || @refresh_token.empty?)
158
158
  if no_tokens
159
159
  if @client.options[:raise_errors]
160
+ sanitized_opts = OAuth2::AUTH_SANITIZER.sanitize(
161
+ opts,
162
+ filtered_keys: OAuth2.config[:filtered_debug_keys],
163
+ label: OAuth2.config[:filtered_label]
164
+ )
160
165
  raise Error.new({
161
166
  error: "OAuth2::AccessToken has no token",
162
- error_description: "Options are: #{opts.inspect}",
167
+ error_description: "Options are: #{sanitized_opts.inspect}",
163
168
  })
164
169
  elsif !OAuth2.config.silence_no_tokens_warning
165
170
  warn("OAuth2::AccessToken has no token")
@@ -171,7 +176,7 @@ You may need to set `snaky: false`. See inline documentation for more info.
171
176
  @expires_at &&= convert_expires_at(@expires_at)
172
177
  @expires_latency &&= @expires_latency.to_i
173
178
  @expires_at ||= Time.now.to_i + @expires_in if @expires_in && !@expires_in.zero?
174
- @expires_at -= @expires_latency if @expires_latency
179
+ @expires_at -= @expires_latency if @expires_at && @expires_latency
175
180
  @options = {
176
181
  mode: opts.delete(:mode) || :header,
177
182
  header_format: opts.delete(:header_format) || "Bearer %s",
data/lib/oauth2/client.rb CHANGED
@@ -3,14 +3,14 @@
3
3
  require "faraday"
4
4
  require "logger"
5
5
 
6
- # :nocov: since coverage tracking only runs on the builds with Faraday v2
6
+ # simplecov:disable since coverage tracking only runs on the builds with Faraday v2
7
7
  # We do run builds on Faraday v0 (and v1!), so this code is actually covered!
8
8
  # This is the only nocov in the whole project!
9
9
  if Faraday::Utils.respond_to?(:default_space_encoding)
10
10
  # This setting doesn't exist in faraday 0.x
11
11
  Faraday::Utils.default_space_encoding = "%20"
12
12
  end
13
- # :nocov:
13
+ # simplecov:enable
14
14
 
15
15
  module OAuth2
16
16
  ConnectionError = Class.new(Faraday::ConnectionFailed)
@@ -491,13 +491,21 @@ module OAuth2
491
491
  def sanitize_redirect_options(req_opts, current_location, next_location)
492
492
  return req_opts unless cross_origin_redirect?(current_location, next_location)
493
493
 
494
- headers = req_opts[:headers]
495
- return req_opts unless headers && headers.any? { |key, _value| authorization_header?(key) }
496
-
497
494
  safe_opts = req_opts.dup
498
- safe_headers = headers.dup
499
- safe_headers.delete_if { |key, _value| authorization_header?(key) }
500
- safe_opts[:headers] = safe_headers
495
+
496
+ [:headers, "headers"].each do |key|
497
+ headers = safe_opts[key]
498
+ next unless headers && headers.any? { |header, _value| authorization_header?(header) }
499
+
500
+ safe_headers = headers.dup
501
+ safe_headers.delete_if { |header, _value| authorization_header?(header) }
502
+ safe_opts[key] = safe_headers
503
+ end
504
+
505
+ safe_opts.delete(:body)
506
+ safe_opts.delete("body")
507
+ safe_opts.delete(:params)
508
+ safe_opts.delete("params")
501
509
  safe_opts
502
510
  end
503
511
 
@@ -600,17 +608,28 @@ module OAuth2
600
608
  #
601
609
  # @api private
602
610
  def build_access_token_legacy(response, access_token_opts, extract_access_token)
603
- extract_access_token.call(self, response.parsed.merge(access_token_opts))
604
- rescue
605
- # An error will be raised by the called if nil is returned and options[:raise_errors] is truthy, so this rescue is but temporary.
606
- # Unfortunately, it does hide the real error, but this is deprecated legacy code,
607
- # and this was effectively the long-standing pre-existing behavior, so there is little point in changing it.
608
- nil
611
+ parsed = response.parsed
612
+ begin
613
+ extract_access_token.call(self, parsed.merge(access_token_opts))
614
+ rescue
615
+ # An error will be raised by the called if nil is returned and options[:raise_errors] is truthy, so this rescue is but temporary.
616
+ # Unfortunately, it does hide the real error, but this is deprecated legacy code,
617
+ # and this was effectively the long-standing pre-existing behavior, so there is little point in changing it.
618
+ nil
619
+ end
609
620
  end
610
621
 
611
622
  def oauth_debug_logging(builder)
612
623
  if OAuth2::OAUTH_DEBUG
613
624
  config = OAuth2.config
625
+ logger_options = {bodies: true}
626
+ # Faraday >= 1.0 supports pluggable formatters; use ours to redact
627
+ # structured (Hash/Array) bodies before Faraday renders them.
628
+ if defined?(OAuth2::SanitizedLogFormatter)
629
+ # Faraday instantiates the formatter with (logger:, options:); the
630
+ # formatter snapshots redaction config from OAuth2.config at that point.
631
+ logger_options[:formatter] = OAuth2::SanitizedLogFormatter
632
+ end
614
633
  builder.response(
615
634
  :logger,
616
635
  OAuth2::AUTH_SANITIZER::SanitizedLogger.new(
@@ -618,7 +637,7 @@ module OAuth2
618
637
  filtered_keys: config[:filtered_debug_keys],
619
638
  label: config[:filtered_label]
620
639
  ),
621
- bodies: true
640
+ **logger_options
622
641
  )
623
642
  end
624
643
  end