oauth2 2.0.10 → 2.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +31 -3
- data/CODE_OF_CONDUCT.md +0 -0
- data/README.md +115 -112
- data/lib/oauth2/access_token.rb +25 -1
- data/lib/oauth2/client.rb +28 -12
- data/lib/oauth2/response.rb +63 -31
- data/lib/oauth2/strategy/base.rb +0 -0
- data/lib/oauth2/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +21 -10
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4fbe5e9ef7a438960d018f63b2fcf4e409a30fe1a57192a335d38adc6a3fdb84
|
4
|
+
data.tar.gz: 92761da258a1ac1335e048966e235b9278b6fd4096ee29b424d96b9796dff35b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9cc454d65145c89f4c75c234c99432cce1090b41e1dc228f42285d854cda6063647b8d443022058d49eeac79e82dd6c04e610a3ba99a70a4ed339180b69ce11f
|
7
|
+
data.tar.gz: 59f3b0f528397a93a3b691bef5112fa3a0cf60df108613474f47c690c2eecf300ab4847403d359565d2ec176e771202400cfd85fbefa87c62628cc38e6ede6a2
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
CHANGED
@@ -12,7 +12,33 @@ and this project adheres to [Semantic Versioning v2](https://semver.org/spec/v2.
|
|
12
12
|
### Fixed
|
13
13
|
### Security
|
14
14
|
|
15
|
-
## [2.0.
|
15
|
+
## [2.0.11] - 2025-05-23
|
16
|
+
- TAG: [v2.0.11][2.0.11t]
|
17
|
+
- COVERAGE: 100.00% -- 518/518 lines in 14 files
|
18
|
+
- BRANCH COVERAGE: 100.00% -- 172/172 branches in 14 files
|
19
|
+
- 80.00% documented
|
20
|
+
### Added
|
21
|
+
- [gh651](https://github.com/oauth-xx/oauth2/pull/651) - `:snaky_hash_klass` option (@pboling)
|
22
|
+
- More documentation
|
23
|
+
- Codeberg as ethical mirror (@pboling)
|
24
|
+
- https://codeberg.org/oauth-xx/oauth2
|
25
|
+
- Don't check for cert if SKIP_GEM_SIGNING is set (@pboling)
|
26
|
+
- All runtime deps, including oauth-xx sibling gems, are now tested against HEAD (@pboling)
|
27
|
+
- YARD config, GFM compatible with relative file links (@pboling)
|
28
|
+
- Documentation site on GitHub Pages (@pboling)
|
29
|
+
- [oauth2.galtzo.com](https://oauth2.galtzo.com)
|
30
|
+
- [!649](https://gitlab.com/oauth-xx/oauth2/-/merge_requests/649) - Test compatibility with all key minor versions of Hashie v0, v1, v2, v3, v4, v5, HEAD (@pboling)
|
31
|
+
- [gh651](https://github.com/oauth-xx/oauth2/pull/651) - Mock OAuth2 server for testing (@pboling)
|
32
|
+
- https://github.com/navikt/mock-oauth2-server
|
33
|
+
### Changed
|
34
|
+
- [gh651](https://github.com/oauth-xx/oauth2/pull/651) - Upgraded to snaky_hash v2.0.3 (@pboling)
|
35
|
+
- Provides solution for serialization issues
|
36
|
+
- Updated `spec.homepage_uri` in gemspec to GitHub Pages YARD documentation site (@pboling)
|
37
|
+
### Fixed
|
38
|
+
- [gh650](https://github.com/oauth-xx/oauth2/pull/650) - Regression in return type of `OAuth2::Response#parsed` (@pboling)
|
39
|
+
- Incorrect documentation related to silencing warnings (@pboling)
|
40
|
+
|
41
|
+
## [2.0.10] - 2025-05-17
|
16
42
|
- TAG: [v2.0.10][2.0.10t]
|
17
43
|
- COVERAGE: 100.00% -- 518/518 lines in 14 files
|
18
44
|
- BRANCH COVERAGE: 100.00% -- 170/170 branches in 14 files
|
@@ -369,8 +395,10 @@ and this project adheres to [Semantic Versioning v2](https://semver.org/spec/v2.
|
|
369
395
|
|
370
396
|
[gemfiles/readme]: gemfiles/README.md
|
371
397
|
|
372
|
-
[Unreleased]: https://gitlab.com/oauth-xx/oauth2/-/compare/v2.0.
|
373
|
-
[2.0.
|
398
|
+
[Unreleased]: https://gitlab.com/oauth-xx/oauth2/-/compare/v2.0.11...HEAD
|
399
|
+
[2.0.11]: https://gitlab.com/oauth-xx/oauth2/-/compare/v2.0.10...v2.0.11
|
400
|
+
[2.0.11t]: https://gitlab.com/oauth-xx/oauth2/-/tags/v2.0.11
|
401
|
+
[2.0.10]: https://gitlab.com/oauth-xx/oauth2/-/compare/v2.0.9...v2.0.10
|
374
402
|
[2.0.10t]: https://gitlab.com/oauth-xx/oauth2/-/tags/v2.0.10
|
375
403
|
[2.0.9]: https://gitlab.com/oauth-xx/oauth2/-/compare/v2.0.8...v2.0.9
|
376
404
|
[2.0.9t]: https://gitlab.com/oauth-xx/oauth2/-/tags/v2.0.9
|
data/CODE_OF_CONDUCT.md
CHANGED
File without changes
|
data/README.md
CHANGED
@@ -9,49 +9,28 @@
|
|
9
9
|
|
10
10
|
## 🔐 OAuth2
|
11
11
|
|
12
|
-
[![Version][👽versioni]][👽version]
|
13
|
-
[![License: MIT][📄license-img]][📄license-ref]
|
14
|
-
[![Downloads Rank][👽dl-ranki]][👽dl-rank]
|
15
|
-
[![Open Source Helpers][👽oss-helpi]][👽oss-help]
|
16
|
-
[![Depfu][🔑depfui♻️]][🔑depfu]
|
17
|
-
[![Coveralls Test Coverage][🔑coveralls-img]][🔑coveralls]
|
18
|
-
[![QLTY Test Coverage][🔑cc-covi♻️]][🔑cc-cov]
|
19
|
-
[![Maintainability][🔑cc-mnti♻️]][🔑cc-mnt]
|
20
|
-
[![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf]
|
21
|
-
[![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-wf]
|
22
|
-
[![CI Current][🚎11-c-wfi]][🚎11-c-wf]
|
23
|
-
[![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf]
|
24
|
-
[![CI JRuby][🚎10-j-wfi]][🚎10-j-wf]
|
25
|
-
[![CI Supported][🚎6-s-wfi]][🚎6-s-wf]
|
26
|
-
[![CI Legacy][🚎4-lg-wfi]][🚎4-lg-wf]
|
27
|
-
[![CI Unsupported][🚎7-us-wfi]][🚎7-us-wf]
|
28
|
-
[![CI Ancient][🚎1-an-wfi]][🚎1-an-wf]
|
29
|
-
[![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf]
|
30
|
-
[![CI Style][🚎5-st-wfi]][🚎5-st-wf]
|
12
|
+
[![Version][👽versioni]][👽version] [![License: MIT][📄license-img]][📄license-ref] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![Open Source Helpers][👽oss-helpi]][👽oss-help] [![Depfu][🔑depfui♻️]][🔑depfu] [![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] [![CI Supported][🚎6-s-wfi]][🚎6-s-wf] [![CI Legacy][🚎4-lg-wfi]][🚎4-lg-wf] [![CI Unsupported][🚎7-us-wfi]][🚎7-us-wf] [![CI Ancient][🚎1-an-wfi]][🚎1-an-wf] [![CI Caboose is an absolute WAGON][🚎13-cbs-wfi]][🚎13-cbs-wf] [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf] [![CodeQL][🖐codeQL-img]][🖐codeQL]
|
31
13
|
|
32
14
|
---
|
33
15
|
|
34
|
-
[![Liberapay
|
35
|
-
[![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor]
|
36
|
-
[![Buy me a coffee][🖇buyme-small-img]][🖇buyme]
|
37
|
-
[![Donate on Polar][🖇polar-img]][🖇polar]
|
38
|
-
[![Donate to my FLOSS or refugee efforts at ko-fi.com][🖇kofi-img]][🖇kofi]
|
39
|
-
[![Donate to my FLOSS or refugee efforts using Patreon][🖇patreon-img]][🖇patreon]
|
16
|
+
[![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate to my FLOSS or refugee efforts at ko-fi.com][🖇kofi-img]][🖇kofi] [![Donate to my FLOSS or refugee efforts using Patreon][🖇patreon-img]][🖇patreon]
|
40
17
|
|
41
18
|
OAuth 2.0 is the industry-standard protocol for authorization.
|
42
19
|
OAuth 2.0 focuses on client developer simplicity while providing specific authorization flows for web applications,
|
43
20
|
desktop applications, mobile phones, and living room devices.
|
44
21
|
This is a RubyGem for implementing OAuth 2.0 clients (not servers) in Ruby applications.
|
45
22
|
|
46
|
-
| Federated [DVCS][💎d-in-dvcs] Repository | Status
|
47
|
-
|
48
|
-
| 🧪 [oauth-xx/oauth2 on GitLab][📜src-gl] | The Truth
|
49
|
-
|
|
50
|
-
|
|
23
|
+
| Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
|
24
|
+
|-----------------------------------------------|-------------------------------------------------------------------|---------------------------|--------------------------|---------------------------|--------------------------|------------------------------|
|
25
|
+
| 🧪 [oauth-xx/oauth2 on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜wiki] | 🏀 Tiny Matrix | ➖ |
|
26
|
+
| 🧊 [oauth-xx/oauth2 on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | ➖ | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |
|
27
|
+
| 🐙 [oauth-xx/oauth2 on GitHub][📜src-gh] | A Dirty Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | ➖ | 💯 Full Matrix | ➖ |
|
28
|
+
| 🤼 [OAuth Ruby Google Group][⛳gg-discussions] | "Active" | ➖ | ➖ | ➖ | ➖ | [💚][⛳gg-discussions] |
|
29
|
+
| 🎮️ [Discord Server][✉️discord-invite] | [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite] | [Let's][✉️discord-invite] | [talk][✉️discord-invite] | [about][✉️discord-invite] | [this][✉️discord-invite] | [library!][✉️discord-invite] |
|
51
30
|
|
52
31
|
### Upgrading Runtime Gem Dependencies
|
53
32
|
|
54
|
-
This project sits underneath a large portion of the
|
33
|
+
This project sits underneath a large portion of the authorization systems on the internet.
|
55
34
|
According to GitHub's project tracking, which I believe only reports on public projects,
|
56
35
|
[100,000+ projects](https://github.com/oauth-xx/oauth2/network/dependents), and
|
57
36
|
[500+ packages](https://github.com/oauth-xx/oauth2/network/dependents?dependent_type=PACKAGE) depend on this project.
|
@@ -70,26 +49,29 @@ covering the latest patch for each of the following minor versions:
|
|
70
49
|
* NOTE: This gem will still install on ruby v2.2, but vanilla GitHub Actions no longer supports testing against it, so YMMV.
|
71
50
|
* JRuby @ v9.2, v9.3, v9.4, v10.0, HEAD
|
72
51
|
* TruffleRuby @ v23.1, v23.2, HEAD
|
73
|
-
* gem `faraday` @ v0, v1, v2, HEAD
|
74
|
-
* gem `jwt` @ v1, v2, v3, HEAD
|
75
|
-
* gem `logger` @ v1.2, v1.5, v1.7, HEAD
|
76
|
-
* gem `multi_xml` @ v0.5, v0.6, v0.7, HEAD
|
77
|
-
* gem `rack` @ v1.2, v1.6, v2, v3, HEAD
|
52
|
+
* gem `faraday` @ v0, v1, v2, HEAD ⏩️ [lostisland/faraday](https://github.com/lostisland/faraday)
|
53
|
+
* gem `jwt` @ v1, v2, v3, HEAD ⏩️ [lostisland/faraday](https://github.com/lostisland/faraday)
|
54
|
+
* gem `logger` @ v1.2, v1.5, v1.7, HEAD ⏩️ [jwt/ruby-jwt](https://github.com/jwt/ruby-jwt)
|
55
|
+
* gem `multi_xml` @ v0.5, v0.6, v0.7, HEAD ⏩️ [sferik/multi_xml](https://github.com/sferik/multi_xml)
|
56
|
+
* gem `rack` @ v1.2, v1.6, v2, v3, HEAD ⏩️ [rack/rack](https://github.com/rack/rack)
|
57
|
+
* gem `snaky_hash` @v2, HEAD ⏩️ [oauth-xx/snaky_hash](https://gitlab.com/oauth-xx/snaky_hash)
|
58
|
+
* gem `version_gem` - @v1, HEAD ⏩️ [oauth-xx/version_gem](https://gitlab.com/oauth-xx/version_gem)
|
59
|
+
|
60
|
+
The last two were extracted from this gem. They are part of the `oauth-xx` org,
|
61
|
+
and are developed in tight collaboration with this gem.
|
62
|
+
|
63
|
+
Also, where reasonable, tested against the runtime dependencies of those dependencies:
|
64
|
+
|
65
|
+
* gem `hashie` @ v0, v1, v2, v3, v4, v5, HEAD ⏩️ [hashie/hashie](https://github.com/hashie/hashie)
|
66
|
+
|
67
|
+
#### You should upgrade this gem with confidence\*.
|
78
68
|
|
79
69
|
- This gem follows a _strict & correct_ (according to the maintainer of SemVer; [more info][sv-pub-api]) interpretation of SemVer.
|
80
70
|
- Dropping support for **any** of the runtime dependency versions above will be a major version bump.
|
81
71
|
- If you aren't on one of the minor versions above, make getting there a priority.
|
82
|
-
- You should upgrade this gem with confidence\*.
|
83
72
|
- You should upgrade the dependencies of this gem with confidence\*.
|
84
73
|
- Please do upgrade, and then, when it goes smooth as butter [please sponsor me][🖇sponsor]. Thanks!
|
85
74
|
|
86
|
-
If you are thinking, "that list is missing two runtime dependencies", you are correct!
|
87
|
-
Both of them were extracted from this gem. They are part of the `oauth-xx` org,
|
88
|
-
and are developed in tight collaboration with this gem, so not much more needs to be said about them.
|
89
|
-
|
90
|
-
* gem `snaky_hash` - https://gitlab.com/oauth-xx/snaky_hash
|
91
|
-
* gem `version_gem` - https://gitlab.com/oauth-xx/version_gem
|
92
|
-
|
93
75
|
[sv-pub-api]: #-is-platform-support-part-of-the-public-api
|
94
76
|
|
95
77
|
\* MIT license; I am unable to make guarantees.
|
@@ -158,19 +140,20 @@ One of these might be what you are looking for:
|
|
158
140
|
|
159
141
|
## 💡 Info you can shake a stick at
|
160
142
|
|
161
|
-
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace]
|
162
|
-
|
163
|
-
| Works with JRuby | [![JRuby 9.2 Compat][💎jruby-9.2i]][🚎10-j-wf] [![JRuby 9.3 Compat][💎jruby-9.3i]][🚎10-j-wf] [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎10-j-wf] [![JRuby 10.0 Compat][💎jruby-c-i]][🚎11-c-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf]
|
164
|
-
| Works with Truffle Ruby | [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎9-t-wf] [![Truffle Ruby 24.1 Compat][💎truby-c-i]][🚎11-c-wf] [![Truffle Ruby HEAD Compat][💎truby-headi]][🚎3-hd-wf]
|
165
|
-
| Works with MRI Ruby 3 | [![Ruby 3.0 Compat][💎ruby-3.0i]][🚎4-lg-wf] [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎6-s-wf] [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎6-s-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎6-s-wf] [![Ruby 3.4 Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]
|
166
|
-
| Works with MRI Ruby 2 | [![Ruby 2.3 Compat][💎ruby-2.3i]][🚎
|
167
|
-
| 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]
|
168
|
-
| Documentation | [![Discussion][⛳gg-discussions-img]][⛳gg-discussions] [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![HEAD on RubyDoc.info][📜docs-head-rd-img]][🚎yard-head] [![BDFL Blog][🚂bdfl-blog-img]][🚂bdfl-blog] [![Wiki][📜wiki-img]][📜wiki]
|
169
|
-
| Compliance | [![License: MIT][📄license-img]][📄license-ref] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
143
|
+
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|
144
|
+
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
145
|
+
| Works with JRuby | [![JRuby 9.2 Compat][💎jruby-9.2i]][🚎10-j-wf] [![JRuby 9.3 Compat][💎jruby-9.3i]][🚎10-j-wf] [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎10-j-wf] [![JRuby 10.0 Compat][💎jruby-c-i]][🚎11-c-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf] |
|
146
|
+
| Works with Truffle Ruby | [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎9-t-wf] [![Truffle Ruby 24.1 Compat][💎truby-c-i]][🚎11-c-wf] [![Truffle Ruby HEAD Compat][💎truby-headi]][🚎3-hd-wf] |
|
147
|
+
| Works with MRI Ruby 3 | [![Ruby 3.0 Compat][💎ruby-3.0i]][🚎4-lg-wf] [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎6-s-wf] [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎6-s-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎6-s-wf] [![Ruby 3.4 Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf] |
|
148
|
+
| Works with MRI Ruby 2 | [![Ruby 2.3 Compat][💎ruby-2.3i]][🚎13-cbs-wf] [![Ruby 2.4 Compat][💎ruby-2.4i]][🚎1-an-wf] [![Ruby 2.5 Compat][💎ruby-2.5i]][🚎1-an-wf] [![Ruby 2.6 Compat][💎ruby-2.6i]][🚎7-us-wf] [![Ruby 2.7 Compat][💎ruby-2.7i]][🚎7-us-wf] |
|
149
|
+
| 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] |
|
150
|
+
| Documentation | [![Discussion][⛳gg-discussions-img]][⛳gg-discussions] [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![HEAD on RubyDoc.info][📜docs-head-rd-img]][🚎yard-head] [![BDFL Blog][🚂bdfl-blog-img]][🚂bdfl-blog] [![Wiki][📜wiki-img]][📜wiki] |
|
151
|
+
| Compliance | [![License: MIT][📄license-img]][📄license-ref] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
|
152
|
+
| Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] |
|
153
|
+
| Support | [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
|
154
|
+
| Enterprise Support | [![Get help from me on Tidelift][🏙️entsup-tidelift-img]][🏙️entsup-tidelift]<br/>💡Subscribe for support guarantees covering _all_ FLOSS dependencies!<br/>💡Tidelift is part of [Sonar][🏙️entsup-tidelift-sonar]!<br/>💡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! |
|
155
|
+
| Comrade BDFL 🎖️ | [![Follow Me on LinkedIn][💖🖇linkedin-img]][💖🖇linkedin] [![Follow Me on Ruby.Social][💖🐘ruby-mast-img]][💖🐘ruby-mast] [![Follow Me on Bluesky][💖🦋bluesky-img]][💖🦋bluesky] [![Contact BDFL][🚂bdfl-contact-img]][🚂bdfl-contact] [![My technical writing][💖💁🏼♂️devto-img]][💖💁🏼♂️devto] |
|
156
|
+
| `...` 💖 | [![Find Me on WellFound:][💖✌️wellfound-img]][💖✌️wellfound] [![Find Me on CrunchBase][💖💲crunchbase-img]][💖💲crunchbase] [![My LinkTree][💖🌳linktree-img]][💖🌳linktree] [![More About Me][💖💁🏼♂️aboutme-img]][💖💁🏼♂️aboutme] [🧊][💖🧊berg] [🐙][💖🐙hub] [🛖][💖🛖hut] [🧪][💖🧪lab] |
|
174
157
|
|
175
158
|
## 🚀 Release Documentation
|
176
159
|
|
@@ -181,7 +164,8 @@ One of these might be what you are looking for:
|
|
181
164
|
|
182
165
|
| Version | Release Date | CHANGELOG | README |
|
183
166
|
|---------|--------------|---------------------------------------|---------------------------------|
|
184
|
-
| 2.0.
|
167
|
+
| 2.0.11 | 2025-05-23 | [v2.0.11 CHANGELOG][2.0.11-changelog] | [v2.0.10 README][2.0.11-readme] |
|
168
|
+
| 2.0.10 | 2025-05-17 | [v2.0.10 CHANGELOG][2.0.10-changelog] | [v2.0.10 README][2.0.10-readme] |
|
185
169
|
| 2.0.9 | 2022-09-16 | [v2.0.9 CHANGELOG][2.0.9-changelog] | [v2.0.9 README][2.0.9-readme] |
|
186
170
|
| 2.0.8 | 2022-09-01 | [v2.0.8 CHANGELOG][2.0.8-changelog] | [v2.0.8 README][2.0.8-readme] |
|
187
171
|
| 2.0.7 | 2022-08-22 | [v2.0.7 CHANGELOG][2.0.7-changelog] | [v2.0.7 README][2.0.7-readme] |
|
@@ -194,7 +178,8 @@ One of these might be what you are looking for:
|
|
194
178
|
| 2.0.0 | 2022-06-21 | [v2.0.0 CHANGELOG][2.0.0-changelog] | [v2.0.0 README][2.0.0-readme] |
|
195
179
|
</details>
|
196
180
|
|
197
|
-
[2.0.
|
181
|
+
[2.0.11-changelog]: https://gitlab.com/oauth-xx/oauth2/-/blob/main/CHANGELOG.md?ref_type=heads#2011---2025-05-23
|
182
|
+
[2.0.10-changelog]: https://gitlab.com/oauth-xx/oauth2/-/blob/main/CHANGELOG.md?ref_type=heads#2010---2025-05-17
|
198
183
|
[2.0.9-changelog]: https://gitlab.com/oauth-xx/oauth2/-/blob/main/CHANGELOG.md?ref_type=heads#209---2022-09-16
|
199
184
|
[2.0.8-changelog]: https://gitlab.com/oauth-xx/oauth2/-/blob/main/CHANGELOG.md?ref_type=heads#208---2022-09-01
|
200
185
|
[2.0.7-changelog]: https://gitlab.com/oauth-xx/oauth2/-/blob/main/CHANGELOG.md?ref_type=heads#207---2022-08-22
|
@@ -206,6 +191,7 @@ One of these might be what you are looking for:
|
|
206
191
|
[2.0.1-changelog]: https://gitlab.com/oauth-xx/oauth2/-/blob/main/CHANGELOG.md?ref_type=heads#201---2022-06-22
|
207
192
|
[2.0.0-changelog]: https://gitlab.com/oauth-xx/oauth2/-/blob/main/CHANGELOG.md?ref_type=heads#200---2022-06-21
|
208
193
|
|
194
|
+
[2.0.10-readme]: https://gitlab.com/oauth-xx/oauth2/-/blob/v2.0.11/README.md
|
209
195
|
[2.0.10-readme]: https://gitlab.com/oauth-xx/oauth2/-/blob/v2.0.10/README.md
|
210
196
|
[2.0.9-readme]: https://gitlab.com/oauth-xx/oauth2/-/blob/v2.0.9/README.md
|
211
197
|
[2.0.8-readme]: https://gitlab.com/oauth-xx/oauth2/-/blob/v2.0.8/README.md
|
@@ -304,7 +290,7 @@ by following the instructions below.
|
|
304
290
|
Add my public key (if you haven’t already, expires 2045-04-29) as a trusted certificate:
|
305
291
|
|
306
292
|
```shell
|
307
|
-
gem cert --add <(curl -Ls https://raw.github.com/
|
293
|
+
gem cert --add <(curl -Ls https://raw.github.com/oauth-xx/oauth2/main/certs/pboling.pem)
|
308
294
|
```
|
309
295
|
|
310
296
|
You only need to do that once. Then proceed to install with:
|
@@ -342,27 +328,28 @@ For more see [SECURITY.md][🔐security].
|
|
342
328
|
|
343
329
|
## What is new for v2.0?
|
344
330
|
|
345
|
-
-
|
346
|
-
- Unofficially support Ruby versions >= 2.5
|
347
|
-
- Incidentally support Ruby versions >= 2.2
|
331
|
+
- Works with Ruby versions >= 2.2
|
348
332
|
- Drop support for the expired MAC Draft (all versions)
|
349
333
|
- Support IETF rfc7523 JWT Bearer Tokens
|
350
334
|
- Support IETF rfc7231 Relative Location in Redirect
|
351
335
|
- Support IETF rfc6749 Don't set oauth params when nil
|
336
|
+
- Support IETF rfc7009 Token Revocation (since v2.0.10)
|
352
337
|
- Support [OIDC 1.0 Private Key JWT](https://openid.net/specs/openid-connect-core-1_0.html#ClientAuthentication); based on the OAuth JWT assertion specification [(RFC 7523)](https://tools.ietf.org/html/rfc7523)
|
353
338
|
- Support new formats, including from [jsonapi.org](http://jsonapi.org/format/): `application/vdn.api+json`, `application/vnd.collection+json`, `application/hal+json`, `application/problem+json`
|
354
|
-
- Adds
|
339
|
+
- Adds option to `OAuth2::Client#get_token`:
|
355
340
|
- `:access_token_class` (`AccessToken`); user specified class to use for all calls to `get_token`
|
356
|
-
- Adds
|
341
|
+
- Adds option to `OAuth2::AccessToken#initialize`:
|
357
342
|
- `:expires_latency` (`nil`); number of seconds by which AccessToken validity will be reduced to offset latency
|
358
343
|
- By default, keys are transformed to snake case.
|
359
|
-
- Original keys will still work as previously, in most scenarios, thanks to
|
344
|
+
- Original keys will still work as previously, in most scenarios, thanks to [snaky_hash][snaky_hash] gem.
|
360
345
|
- However, this is a _breaking_ change if you rely on `response.parsed.to_h` to retain the original case, and the original wasn't snake case, as the keys in the result will be snake case.
|
361
346
|
- As of version 2.0.4 you can turn key transformation off with the `snaky: false` option.
|
362
347
|
- By default, the `:auth_scheme` is now `:basic_auth` (instead of `:request_body`)
|
363
348
|
- Third-party strategies and gems may need to be updated if a provider was requiring client id/secret in the request body
|
364
349
|
- [... A lot more](https://gitlab.com/oauth-xx/oauth2/-/blob/main/CHANGELOG.md#200-2022-06-21-tag)
|
365
350
|
|
351
|
+
[snaky_hash]: https://gitlab.com/oauth-xx/snaky_hash
|
352
|
+
|
366
353
|
## Compatibility
|
367
354
|
|
368
355
|
Targeted ruby compatibility is non-EOL versions of Ruby, currently 3.2, 3.3, and 3.4.
|
@@ -377,7 +364,7 @@ This gem is tested against MRI, JRuby, and Truffleruby.
|
|
377
364
|
Each of those has varying versions that target a specific version of MRI Ruby.
|
378
365
|
This gem should work in the just-listed Ruby engines according to the targeted MRI compatibility in the table below.
|
379
366
|
If you would like to add support for additional engines,
|
380
|
-
see
|
367
|
+
see [gemfiles/README.md](gemfiles/README.md), then submit a PR to the correct maintenance branch as according to the table below.
|
381
368
|
</details>
|
382
369
|
|
383
370
|
<details>
|
@@ -404,25 +391,25 @@ of a major release, support for that Ruby version may be dropped.
|
|
404
391
|
| 3️⃣ | older | N/A | Best of luck to you! | Please upgrade! | |
|
405
392
|
|
406
393
|
NOTE: The 1.4 series will only receive critical security updates.
|
407
|
-
See [SECURITY.md][
|
394
|
+
See [SECURITY.md][🔐security].
|
408
395
|
|
409
|
-
## Usage
|
396
|
+
## 🔧 Basic Usage
|
410
397
|
|
411
398
|
### Global Configuration
|
412
399
|
|
413
|
-
|
414
|
-
```log
|
415
|
-
OAuth2::AccessToken.from_hash: `hash` contained more than one 'token' key
|
416
|
-
```
|
400
|
+
You can turn on additional warnings.
|
417
401
|
|
418
402
|
```ruby
|
419
403
|
OAuth2.configure do |config|
|
420
|
-
|
421
|
-
|
404
|
+
# Turn on a warning like:
|
405
|
+
# OAuth2::AccessToken.from_hash: `hash` contained more than one 'token' key
|
406
|
+
config.silence_extra_tokens_warning = false # default: true
|
407
|
+
# Set to true if you want to also show warnings about no tokens
|
408
|
+
config.silence_no_tokens_warning = false # default: true,
|
422
409
|
end
|
423
410
|
```
|
424
411
|
|
425
|
-
|
412
|
+
The "extra tokens" problem comes from ambiguity in the spec about which token is the right token.
|
426
413
|
Some OAuth 2.0 standards legitimately have multiple tokens.
|
427
414
|
You may need to subclass `OAuth2::AccessToken`, or write your own custom alternative to it, and pass it in.
|
428
415
|
Specify your custom class with the `access_token_class` option.
|
@@ -491,9 +478,24 @@ response.parsed.access_token # => "aaaaaaaa"
|
|
491
478
|
response.parsed[:access_token] # => "aaaaaaaa"
|
492
479
|
response.parsed.additional_data # => "additional"
|
493
480
|
response.parsed[:additional_data] # => "additional"
|
494
|
-
response.parsed.class.name # =>
|
481
|
+
response.parsed.class.name # => SnakyHash::StringKeyed (from snaky_hash gem)
|
495
482
|
```
|
496
483
|
|
484
|
+
#### Serialization
|
485
|
+
|
486
|
+
As of v2.0.11, if you need to serialize the parsed result, you can!
|
487
|
+
|
488
|
+
There are two ways to do this, and the second option recommended.
|
489
|
+
|
490
|
+
1. Globally configure `SnakyHash::StringKeyed` to use the serializer. Put this in your code somewhere reasonable (like an initializer for Rails):
|
491
|
+
|
492
|
+
```ruby
|
493
|
+
SnakyHash::StringKeyed.class_eval do
|
494
|
+
extend SnakyHash::Serializer
|
495
|
+
end
|
496
|
+
```
|
497
|
+
|
498
|
+
|
497
499
|
#### What if I hate snakes and/or indifference?
|
498
500
|
|
499
501
|
```ruby
|
@@ -506,9 +508,9 @@ response.parsed.class.name # => Hash (just, regular old Hash)
|
|
506
508
|
```
|
507
509
|
|
508
510
|
<details>
|
509
|
-
<summary>Debugging</summary>
|
511
|
+
<summary>Debugging & Logging</summary>
|
510
512
|
|
511
|
-
Set an environment variable
|
513
|
+
Set an environment variable as per usual (e.g. with [dotenv](https://github.com/bkeepers/dotenv)).
|
512
514
|
|
513
515
|
```ruby
|
514
516
|
# will log both request and response, including bodies
|
@@ -529,27 +531,27 @@ client = OAuth2::Client.new(
|
|
529
531
|
```
|
530
532
|
</details>
|
531
533
|
|
532
|
-
|
534
|
+
### OAuth2::Response
|
533
535
|
|
534
536
|
The `AccessToken` methods `#get`, `#post`, `#put` and `#delete` and the generic `#request`
|
535
537
|
will return an instance of the #OAuth2::Response class.
|
536
538
|
|
537
539
|
This instance contains a `#parsed` method that will parse the response body and
|
538
|
-
return a Hash-like [`
|
540
|
+
return a Hash-like [`SnakyHash::StringKeyed`](https://gitlab.com/oauth-xx/snaky_hash/-/blob/main/lib/snaky_hash/string_keyed.rb) if the `Content-Type` is `application/x-www-form-urlencoded` or if
|
539
541
|
the body is a JSON object. It will return an Array if the body is a JSON
|
540
542
|
array. Otherwise, it will return the original body string.
|
541
543
|
|
542
544
|
The original response body, headers, and status can be accessed via their
|
543
545
|
respective methods.
|
544
546
|
|
545
|
-
|
547
|
+
### OAuth2::AccessToken
|
546
548
|
|
547
549
|
If you have an existing Access Token for a user, you can initialize an instance
|
548
550
|
using various class methods including the standard new, `from_hash` (if you have
|
549
551
|
a hash of the values), or `from_kvform` (if you have an
|
550
552
|
`application/x-www-form-urlencoded` encoded string of the values).
|
551
553
|
|
552
|
-
|
554
|
+
### OAuth2::Error
|
553
555
|
|
554
556
|
On 400+ status code responses, an `OAuth2::Error` will be raised. If it is a
|
555
557
|
standard OAuth2 error response, the body will be parsed and `#code` and `#description` will contain the values provided from the error and
|
@@ -561,9 +563,9 @@ option on initialization of the client. In this case the `OAuth2::Response`
|
|
561
563
|
instance will be returned as usual and on 400+ status code responses, the
|
562
564
|
Response instance will contain the `OAuth2::Error` instance.
|
563
565
|
|
564
|
-
|
566
|
+
### Authorization Grants
|
565
567
|
|
566
|
-
Currently the Authorization Code, Implicit, Resource Owner Password Credentials, Client Credentials, and Assertion
|
568
|
+
Currently, the Authorization Code, Implicit, Resource Owner Password Credentials, Client Credentials, and Assertion
|
567
569
|
authentication grant types have helper strategy classes that simplify client
|
568
570
|
use. They are available via the [`#auth_code`](https://gitlab.com/oauth-xx/oauth2/-/blob/main/lib/oauth2/strategy/auth_code.rb),
|
569
571
|
[`#implicit`](https://gitlab.com/oauth-xx/oauth2/-/blob/main/lib/oauth2/strategy/implicit.rb),
|
@@ -621,8 +623,7 @@ See [SECURITY.md][🔐security].
|
|
621
623
|
## 🤝 Contributing
|
622
624
|
|
623
625
|
If you need some ideas of where to help, you could work on adding more code coverage,
|
624
|
-
or if it is already 💯 (see [below](#code-coverage)) check
|
625
|
-
or check [issues][🤝issues], or [PRs][🤝pulls],
|
626
|
+
or if it is already 💯 (see [below](#code-coverage)) check [issues][🤝gh-issues], or [PRs][🤝gh-pulls],
|
626
627
|
or use the gem and think about how it could be better.
|
627
628
|
|
628
629
|
We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
|
@@ -632,7 +633,7 @@ See [CONTRIBUTING.md][🤝contributing] for more detailed instructions.
|
|
632
633
|
### Code Coverage
|
633
634
|
|
634
635
|
[![Coveralls Test Coverage][🔑coveralls-img]][🔑coveralls]
|
635
|
-
[![QLTY Test Coverage][🔑
|
636
|
+
[![QLTY Test Coverage][🔑qlty-covi♻️]][🔑qlty-cov]
|
636
637
|
|
637
638
|
### 🪇 Code of Conduct
|
638
639
|
|
@@ -700,11 +701,6 @@ The gem is available as open source under the terms of
|
|
700
701
|
the [MIT License][📄license] [![License: MIT][📄license-img]][📄license-ref].
|
701
702
|
See [LICENSE.txt][📄license] for the official [Copyright Notice][📄copyright-notice-explainer].
|
702
703
|
|
703
|
-
[![FOSSA Status][fossa2-img])][fossa2]
|
704
|
-
|
705
|
-
[fossa2]: https://app.fossa.io/projects/git%2Bgithub.com%2Foauth-xx%2Foauth2?ref=badge_large
|
706
|
-
[fossa2-img]: https://app.fossa.io/api/projects/git%2Bgithub.com%2Foauth-xx%2Foauth2.svg?type=large
|
707
|
-
|
708
704
|
### © Copyright
|
709
705
|
|
710
706
|
<ul>
|
@@ -734,7 +730,7 @@ or one of the others at the head of this README.
|
|
734
730
|
[![Buy me a latte][🖇buyme-img]][🖇buyme]
|
735
731
|
|
736
732
|
[⛳gg-discussions]: https://groups.google.com/g/oauth-ruby
|
737
|
-
[⛳gg-discussions-img]: https://img.shields.io/badge/google-group-
|
733
|
+
[⛳gg-discussions-img]: https://img.shields.io/badge/google-group-0093D0.svg?style=for-the-badge&logo=google&logoColor=orange
|
738
734
|
|
739
735
|
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
|
740
736
|
[⛳️gem-namespace]: https://github.com/oauth-xx/oauth2
|
@@ -781,7 +777,7 @@ or one of the others at the head of this README.
|
|
781
777
|
[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
|
782
778
|
[📜src-gh]: https://github.com/oauth-xx/oauth2
|
783
779
|
[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
|
784
|
-
[📜docs-head-rd-img]: https://img.shields.io/badge/
|
780
|
+
[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
|
785
781
|
[📜wiki]: https://gitlab.com/oauth-xx/oauth2/-/wikis/home
|
786
782
|
[📜wiki-img]: https://img.shields.io/badge/wiki-examples-943CD2.svg?style=for-the-badge&logo=Wiki&logoColor=white
|
787
783
|
[👽dl-rank]: https://rubygems.org/gems/oauth2
|
@@ -790,10 +786,10 @@ or one of the others at the head of this README.
|
|
790
786
|
[👽oss-helpi]: https://www.codetriage.com/oauth-xx/oauth2/badges/users.svg
|
791
787
|
[👽version]: https://rubygems.org/gems/oauth2
|
792
788
|
[👽versioni]: https://img.shields.io/gem/v/oauth2.svg
|
793
|
-
[🔑
|
794
|
-
[🔑
|
795
|
-
[🔑
|
796
|
-
[🔑
|
789
|
+
[🔑qlty-mnt]: https://qlty.sh/gh/oauth-xx/projects/oauth2
|
790
|
+
[🔑qlty-mnti♻️]: https://qlty.sh/badges/d3370c2c-8791-4202-9759-76f527f76005/maintainability.svg
|
791
|
+
[🔑qlty-cov]: https://qlty.sh/gh/oauth-xx/projects/oauth2
|
792
|
+
[🔑qlty-covi♻️]: https://qlty.sh/badges/d3370c2c-8791-4202-9759-76f527f76005/test_coverage.svg
|
797
793
|
[🔑codecov]: https://codecov.io/gh/oauth-xx/oauth2
|
798
794
|
[🔑codecovi♻️]: https://codecov.io/gh/oauth-xx/oauth2/graph/badge.svg?token=bNqSzNiuo2
|
799
795
|
[🔑coveralls]: https://coveralls.io/github/oauth-xx/oauth2?branch=main
|
@@ -826,6 +822,8 @@ or one of the others at the head of this README.
|
|
826
822
|
[🚎11-c-wfi]: https://github.com/oauth-xx/oauth2/actions/workflows/current.yml/badge.svg
|
827
823
|
[🚎12-crh-wf]: https://github.com/oauth-xx/oauth2/actions/workflows/current-runtime-heads.yml
|
828
824
|
[🚎12-crh-wfi]: https://github.com/oauth-xx/oauth2/actions/workflows/current-runtime-heads.yml/badge.svg
|
825
|
+
[🚎13-cbs-wf]: https://github.com/oauth-xx/oauth2/actions/workflows/caboose.yml
|
826
|
+
[🚎13-cbs-wfi]: https://github.com/oauth-xx/oauth2/actions/workflows/caboose.yml/badge.svg
|
829
827
|
[⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay
|
830
828
|
[⛳liberapay]: https://liberapay.com/pboling/donate
|
831
829
|
[🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
|
@@ -861,8 +859,13 @@ or one of the others at the head of this README.
|
|
861
859
|
[💎jruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
862
860
|
[💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
|
863
861
|
[💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
|
864
|
-
[🤝issues]: https://github.com/oauth-xx/oauth2/issues
|
865
|
-
[🤝pulls]: https://github.com/oauth-xx/oauth2/pulls
|
862
|
+
[🤝gh-issues]: https://github.com/oauth-xx/oauth2/issues
|
863
|
+
[🤝gh-pulls]: https://github.com/oauth-xx/oauth2/pulls
|
864
|
+
[🤝gl-issues]: https://gitlab.com/oauth-xx/oauth2/-/issues
|
865
|
+
[🤝gl-pulls]: https://gitlab.com/oauth-xx/oauth2/-/merge_requests
|
866
|
+
[🤝cb-issues]: https://codeberg.org/oauth-xx/oauth2/issues
|
867
|
+
[🤝cb-pulls]: https://codeberg.org/oauth-xx/oauth2/pulls
|
868
|
+
[🤝cb-donate]: https://donate.codeberg.org/
|
866
869
|
[🤝contributing]: CONTRIBUTING.md
|
867
870
|
[🔑codecov-g♻️]: https://codecov.io/gh/oauth-xx/oauth2/graphs/tree.svg?token=bNqSzNiuo2
|
868
871
|
[🖐contrib-rocks]: https://contrib.rocks
|
@@ -870,36 +873,36 @@ or one of the others at the head of this README.
|
|
870
873
|
[🖐contributors-img]: https://contrib.rocks/image?repo=oauth-xx/oauth2
|
871
874
|
[🚎contributors-gl]: https://gitlab.com/oauth-xx/oauth2/-/graphs/main
|
872
875
|
[🪇conduct]: CODE_OF_CONDUCT.md
|
873
|
-
[🪇conduct-img]: https://img.shields.io/badge/Contributor_Covenant-2.1-
|
876
|
+
[🪇conduct-img]: https://img.shields.io/badge/Contributor_Covenant-2.1-259D6C.svg
|
874
877
|
[📌pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
|
875
878
|
[📌semver]: https://semver.org/spec/v2.0.0.html
|
876
|
-
[📌semver-img]: https://img.shields.io/badge/semver-2.0.0-
|
879
|
+
[📌semver-img]: https://img.shields.io/badge/semver-2.0.0-259D6C.svg?style=flat
|
877
880
|
[📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
|
878
881
|
[📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
|
879
882
|
[📌changelog]: CHANGELOG.md
|
880
883
|
[📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
|
881
|
-
[📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-
|
884
|
+
[📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat
|
882
885
|
[📌gitmoji]:https://gitmoji.dev
|
883
|
-
[📌gitmoji-img]:https://img.shields.io/badge/
|
886
|
+
[📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20😜%20😍-34495e.svg?style=flat-square
|
884
887
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
885
888
|
[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.518-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
886
889
|
[🔐security]: SECURITY.md
|
887
|
-
[🔐security-img]: https://img.shields.io/badge/security-policy-
|
890
|
+
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
888
891
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
889
892
|
[📄license]: LICENSE.txt
|
890
893
|
[📄license-ref]: https://opensource.org/licenses/MIT
|
891
|
-
[📄license-img]: https://img.shields.io/badge/License-MIT-
|
894
|
+
[📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
|
892
895
|
[📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
|
893
|
-
[📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-
|
896
|
+
[📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
|
894
897
|
[🚎yard-current]: http://rubydoc.info/gems/oauth2
|
895
|
-
[🚎yard-head]: https://
|
898
|
+
[🚎yard-head]: https://oauth2.galtzo.com
|
896
899
|
[💎stone_checksums]: https://github.com/pboling/stone_checksums
|
897
900
|
[💎SHA_checksums]: https://gitlab.com/oauth-xx/oauth2/-/tree/main/checksums
|
898
901
|
[💎rlts]: https://github.com/rubocop-lts/rubocop-lts
|
899
|
-
[💎rlts-img]: https://img.shields.io/badge/
|
900
|
-
[🏘fossa]: https://app.fossa.io/projects/git%2Bgithub.com%2Foauth-xx%2Foauth2?ref=badge_shield
|
901
|
-
[🏘fossa-img]: https://app.fossa.io/api/projects/git%2Bgithub.com%2Foauth-xx%2Foauth2.svg?type=shield
|
902
|
+
[💎rlts-img]: https://img.shields.io/badge/code_style_%26_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white
|
902
903
|
[💎d-in-dvcs]: https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/
|
904
|
+
[✉️discord-invite]: https://discord.gg/3qme4XHNKN
|
905
|
+
[✉️discord-invite-img]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge
|
903
906
|
|
904
907
|
<details>
|
905
908
|
<summary>
|
data/lib/oauth2/access_token.rb
CHANGED
@@ -1,5 +1,20 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :nocov:
|
4
|
+
begin
|
5
|
+
# The first version of hashie that has a version file was 1.1.0
|
6
|
+
# The first version of hashie that required the version file at runtime was 3.2.0
|
7
|
+
# If it has already been loaded then this is very low cost, as Kernel.require uses maintains a cache
|
8
|
+
# If this it hasn't this will work to get it loaded, and then we will be able to use
|
9
|
+
# defined?(Hashie::Version)
|
10
|
+
# as a test.
|
11
|
+
# TODO: get rid this mess when we drop Hashie < 3.2, as Hashie will self-load its version then
|
12
|
+
require "hashie/version"
|
13
|
+
rescue LoadError
|
14
|
+
nil
|
15
|
+
end
|
16
|
+
# :nocov:
|
17
|
+
|
3
18
|
module OAuth2
|
4
19
|
class AccessToken # rubocop:disable Metrics/ClassLength
|
5
20
|
TOKEN_KEYS_STR = %w[access_token id_token token accessToken idToken].freeze
|
@@ -54,7 +69,16 @@ module OAuth2
|
|
54
69
|
extra_tokens_warning(supported_keys, t_key)
|
55
70
|
t_key
|
56
71
|
end
|
57
|
-
|
72
|
+
# :nocov:
|
73
|
+
# TODO: Get rid of this branching logic when dropping Hashie < v3.2
|
74
|
+
token = if !defined?(Hashie::VERSION) # i.e. <= "1.1.0"; the first Hashie to ship with a VERSION constant
|
75
|
+
warn("snaky_hash and oauth2 will drop support for Hashie v0 in the next major version. Please upgrade to a modern Hashie.")
|
76
|
+
# There is a bug in Hashie v0, which is accounts for.
|
77
|
+
fresh.delete(key) || fresh[key] || ""
|
78
|
+
else
|
79
|
+
fresh.delete(key) || ""
|
80
|
+
end
|
81
|
+
# :nocov:
|
58
82
|
new(client, token, fresh)
|
59
83
|
end
|
60
84
|
|
data/lib/oauth2/client.rb
CHANGED
@@ -19,7 +19,7 @@ module OAuth2
|
|
19
19
|
# The OAuth2::Client class
|
20
20
|
class Client # rubocop:disable Metrics/ClassLength
|
21
21
|
RESERVED_REQ_KEYS = %w[body headers params redirect_count].freeze
|
22
|
-
RESERVED_PARAM_KEYS = (RESERVED_REQ_KEYS + %w[parse snaky token_method]).freeze
|
22
|
+
RESERVED_PARAM_KEYS = (RESERVED_REQ_KEYS + %w[parse snaky snaky_hash_klass token_method]).freeze
|
23
23
|
|
24
24
|
include FilteredAttributes
|
25
25
|
|
@@ -342,14 +342,26 @@ module OAuth2
|
|
342
342
|
|
343
343
|
private
|
344
344
|
|
345
|
-
#
|
345
|
+
# Processes request parameters and transforms them into request options
|
346
|
+
#
|
347
|
+
# @param [Hash] params the request parameters to process
|
348
|
+
# @option params [Symbol] :parse (:automatic) parsing strategy for the response
|
349
|
+
# @option params [Boolean] :snaky (true) whether to convert response keys to snake_case
|
350
|
+
# @option params [Class] :snaky_hash_klass (SnakyHash::StringKeyed) class to use for snake_case hash conversion
|
351
|
+
# @option params [Symbol] :token_method (:post) HTTP method to use for token request
|
352
|
+
# @option params [Hash] :headers Additional HTTP headers for the request
|
353
|
+
#
|
354
|
+
# @return [Hash] the processed request options
|
355
|
+
#
|
356
|
+
# @api private
|
346
357
|
def params_to_req_opts(params)
|
347
|
-
parse, snaky, token_method, params, headers = parse_snaky_params_headers(params)
|
358
|
+
parse, snaky, snaky_hash_klass, token_method, params, headers = parse_snaky_params_headers(params)
|
348
359
|
req_opts = {
|
349
360
|
raise_errors: options[:raise_errors],
|
350
361
|
token_method: token_method || options[:token_method],
|
351
362
|
parse: parse,
|
352
363
|
snaky: snaky,
|
364
|
+
snaky_hash_klass: snaky_hash_klass,
|
353
365
|
}
|
354
366
|
if req_opts[:token_method] == :post
|
355
367
|
# NOTE: If proliferation of request types continues, we should implement a parser solution for Request,
|
@@ -369,19 +381,22 @@ module OAuth2
|
|
369
381
|
req_opts
|
370
382
|
end
|
371
383
|
|
372
|
-
# Processes and transforms
|
384
|
+
# Processes and transforms parameters for OAuth requests
|
373
385
|
#
|
374
386
|
# @param [Hash] params the input parameters to process
|
375
|
-
# @option params [Symbol
|
387
|
+
# @option params [Symbol] :parse (:automatic) parsing strategy for the response
|
376
388
|
# @option params [Boolean] :snaky (true) whether to convert response keys to snake_case
|
389
|
+
# @option params [Class] :snaky_hash_klass (SnakyHash::StringKeyed) class to use for snake_case hash conversion
|
390
|
+
# @option params [Symbol] :token_method overrides the default token method for this request
|
377
391
|
# @option params [Hash] :headers HTTP headers for the request
|
378
392
|
#
|
379
|
-
# @return [Array<(Symbol, Boolean, Hash, Hash)>] Returns an array containing:
|
380
|
-
# -
|
381
|
-
# -
|
382
|
-
# -
|
383
|
-
# -
|
384
|
-
# -
|
393
|
+
# @return [Array<(Symbol, Boolean, Class, Symbol, Hash, Hash)>] Returns an array containing:
|
394
|
+
# - parse strategy (Symbol)
|
395
|
+
# - snaky flag for response key transformation (Boolean)
|
396
|
+
# - hash class for snake_case conversion (Class)
|
397
|
+
# - token method override (Symbol, nil)
|
398
|
+
# - processed parameters (Hash)
|
399
|
+
# - HTTP headers (Hash)
|
385
400
|
#
|
386
401
|
# @api private
|
387
402
|
def parse_snaky_params_headers(params)
|
@@ -394,11 +409,12 @@ module OAuth2
|
|
394
409
|
end.to_h
|
395
410
|
parse = params.key?(:parse) ? params.delete(:parse) : Response::DEFAULT_OPTIONS[:parse]
|
396
411
|
snaky = params.key?(:snaky) ? params.delete(:snaky) : Response::DEFAULT_OPTIONS[:snaky]
|
412
|
+
snaky_hash_klass = params.key?(:snaky_hash_klass) ? params.delete(:snaky_hash_klass) : Response::DEFAULT_OPTIONS[:snaky_hash_klass]
|
397
413
|
token_method = params.delete(:token_method) if params.key?(:token_method)
|
398
414
|
params = authenticator.apply(params)
|
399
415
|
# authenticator may add :headers, and we separate them from params here
|
400
416
|
headers = params.delete(:headers) || {}
|
401
|
-
[parse, snaky, token_method, params, headers]
|
417
|
+
[parse, snaky, snaky_hash_klass, token_method, params, headers]
|
402
418
|
end
|
403
419
|
|
404
420
|
# Executes an HTTP request with error handling and response processing
|
data/lib/oauth2/response.rb
CHANGED
@@ -5,23 +5,39 @@ require "multi_xml"
|
|
5
5
|
require "rack"
|
6
6
|
|
7
7
|
module OAuth2
|
8
|
-
#
|
8
|
+
# The Response class handles HTTP responses in the OAuth2 gem, providing methods
|
9
|
+
# to access and parse response data in various formats.
|
10
|
+
#
|
11
|
+
# @since 1.0.0
|
9
12
|
class Response
|
13
|
+
# Default configuration options for Response instances
|
14
|
+
#
|
15
|
+
# @return [Hash] The default options hash
|
10
16
|
DEFAULT_OPTIONS = {
|
11
17
|
parse: :automatic,
|
12
18
|
snaky: true,
|
19
|
+
snaky_hash_klass: SnakyHash::StringKeyed,
|
13
20
|
}.freeze
|
21
|
+
|
22
|
+
# @return [Faraday::Response] The raw Faraday response object
|
14
23
|
attr_reader :response
|
24
|
+
|
25
|
+
# @return [Hash] The options hash for this instance
|
15
26
|
attr_accessor :options
|
16
27
|
|
17
|
-
#
|
18
|
-
#
|
28
|
+
# @private
|
29
|
+
# Storage for response body parser procedures
|
30
|
+
#
|
31
|
+
# @return [Hash<Symbol, Proc>] Hash of parser procs keyed by format symbol
|
19
32
|
@@parsers = {
|
20
33
|
query: ->(body) { Rack::Utils.parse_query(body) },
|
21
34
|
text: ->(body) { body },
|
22
35
|
}
|
23
36
|
|
24
|
-
#
|
37
|
+
# @private
|
38
|
+
# Maps content types to parser symbols
|
39
|
+
#
|
40
|
+
# @return [Hash<String, Symbol>] Hash of content types mapped to parser symbols
|
25
41
|
@@content_types = {
|
26
42
|
"application/x-www-form-urlencoded" => :query,
|
27
43
|
"text/plain" => :text,
|
@@ -29,9 +45,11 @@ module OAuth2
|
|
29
45
|
|
30
46
|
# Adds a new content type parser.
|
31
47
|
#
|
32
|
-
# @param [Symbol] key A descriptive symbol key such as :json or :query
|
33
|
-
# @param [Array] mime_types One or more mime types to which this parser applies
|
34
|
-
# @yield [String]
|
48
|
+
# @param [Symbol] key A descriptive symbol key such as :json or :query
|
49
|
+
# @param [Array<String>, String] mime_types One or more mime types to which this parser applies
|
50
|
+
# @yield [String] Block that will be called to parse the response body
|
51
|
+
# @yieldparam [String] body The response body to parse
|
52
|
+
# @return [void]
|
35
53
|
def self.register_parser(key, mime_types, &block)
|
36
54
|
key = key.to_sym
|
37
55
|
@@parsers[key] = block
|
@@ -43,38 +61,48 @@ module OAuth2
|
|
43
61
|
# Initializes a Response instance
|
44
62
|
#
|
45
63
|
# @param [Faraday::Response] response The Faraday response instance
|
46
|
-
# @param [Symbol] parse (:automatic)
|
47
|
-
#
|
48
|
-
# @param [
|
49
|
-
#
|
50
|
-
# @
|
51
|
-
|
64
|
+
# @param [Symbol] parse (:automatic) How to parse the response body
|
65
|
+
# @param [Boolean] snaky (true) Whether to convert parsed response to snake_case using SnakyHash
|
66
|
+
# @param [Class, nil] snaky_hash_klass (nil) Custom class for snake_case hash conversion
|
67
|
+
# @param [Hash] options Additional options for the response
|
68
|
+
# @option options [Symbol] :parse (:automatic) Parse strategy (:query, :json, or :automatic)
|
69
|
+
# @option options [Boolean] :snaky (true) Enable/disable snake_case conversion
|
70
|
+
# @option options [Class] :snaky_hash_klass (SnakyHash::StringKeyed) Class to use for hash conversion
|
71
|
+
# @return [OAuth2::Response] The new Response instance
|
72
|
+
def initialize(response, parse: :automatic, snaky: true, snaky_hash_klass: nil, **options)
|
52
73
|
@response = response
|
53
74
|
@options = {
|
54
75
|
parse: parse,
|
55
76
|
snaky: snaky,
|
77
|
+
snaky_hash_klass: snaky_hash_klass,
|
56
78
|
}.merge(options)
|
57
79
|
end
|
58
80
|
|
59
81
|
# The HTTP response headers
|
82
|
+
#
|
83
|
+
# @return [Hash] The response headers
|
60
84
|
def headers
|
61
85
|
response.headers
|
62
86
|
end
|
63
87
|
|
64
88
|
# The HTTP response status code
|
89
|
+
#
|
90
|
+
# @return [Integer] The response status code
|
65
91
|
def status
|
66
92
|
response.status
|
67
93
|
end
|
68
94
|
|
69
95
|
# The HTTP response body
|
96
|
+
#
|
97
|
+
# @return [String] The response body or empty string if nil
|
70
98
|
def body
|
71
99
|
response.body || ""
|
72
100
|
end
|
73
101
|
|
74
|
-
# The
|
102
|
+
# The parsed response body
|
75
103
|
#
|
76
|
-
# @return [Object]
|
77
|
-
# @return [nil] If
|
104
|
+
# @return [Object, SnakyHash::StringKeyed] The parsed response body
|
105
|
+
# @return [nil] If no parser is available
|
78
106
|
def parsed
|
79
107
|
return @parsed if defined?(@parsed)
|
80
108
|
|
@@ -91,36 +119,36 @@ module OAuth2
|
|
91
119
|
end
|
92
120
|
|
93
121
|
if options[:snaky] && @parsed.is_a?(Hash)
|
94
|
-
|
95
|
-
@parsed = parsed
|
122
|
+
hash_klass = options[:snaky_hash_klass] || DEFAULT_OPTIONS[:snaky_hash_klass]
|
123
|
+
@parsed = hash_klass[@parsed]
|
96
124
|
end
|
97
125
|
|
98
126
|
@parsed
|
99
127
|
end
|
100
128
|
|
101
|
-
#
|
129
|
+
# Determines the content type of the response
|
130
|
+
#
|
131
|
+
# @return [String, nil] The content type or nil if headers are not present
|
102
132
|
def content_type
|
103
133
|
return unless response.headers
|
104
134
|
|
105
135
|
((response.headers.values_at("content-type", "Content-Type").compact.first || "").split(";").first || "").strip.downcase
|
106
136
|
end
|
107
137
|
|
108
|
-
# Determines the parser
|
109
|
-
# that will be passed the {#body} (and optional {#response}) to supply
|
110
|
-
# {#parsed}.
|
138
|
+
# Determines the parser to be used for the response body
|
111
139
|
#
|
112
|
-
# The parser can be supplied as the +:parse+ option in the form of a Proc
|
113
|
-
#
|
114
|
-
#
|
140
|
+
# @note The parser can be supplied as the +:parse+ option in the form of a Proc
|
141
|
+
# (or other Object responding to #call) or a Symbol. In the latter case,
|
142
|
+
# the actual parser will be looked up in {@@parsers} by the supplied Symbol.
|
115
143
|
#
|
116
|
-
# If no +:parse+ option is supplied, the lookup Symbol will be determined
|
117
|
-
#
|
144
|
+
# @note If no +:parse+ option is supplied, the lookup Symbol will be determined
|
145
|
+
# by looking up {#content_type} in {@@content_types}.
|
118
146
|
#
|
119
|
-
# If {#parser} is a Proc, it will be called with no arguments, just
|
120
|
-
#
|
147
|
+
# @note If {#parser} is a Proc, it will be called with no arguments, just
|
148
|
+
# {#body}, or {#body} and {#response}, depending on the Proc's arity.
|
121
149
|
#
|
122
|
-
# @return [Proc, #call]
|
123
|
-
# @return [nil] If no parser
|
150
|
+
# @return [Proc, #call] The parser proc or callable object
|
151
|
+
# @return [nil] If no suitable parser is found
|
124
152
|
def parser
|
125
153
|
return @parser if defined?(@parser)
|
126
154
|
|
@@ -136,12 +164,16 @@ module OAuth2
|
|
136
164
|
end
|
137
165
|
end
|
138
166
|
|
167
|
+
# Register XML parser
|
168
|
+
# @api private
|
139
169
|
OAuth2::Response.register_parser(:xml, ["text/xml", "application/rss+xml", "application/rdf+xml", "application/atom+xml", "application/xml"]) do |body|
|
140
170
|
next body unless body.respond_to?(:to_str)
|
141
171
|
|
142
172
|
MultiXml.parse(body)
|
143
173
|
end
|
144
174
|
|
175
|
+
# Register JSON parser
|
176
|
+
# @api private
|
145
177
|
OAuth2::Response.register_parser(:json, ["application/json", "text/javascript", "application/hal+json", "application/vnd.collection+json", "application/vnd.api+json", "application/problem+json"]) do |body|
|
146
178
|
next body unless body.respond_to?(:to_str)
|
147
179
|
|
data/lib/oauth2/strategy/base.rb
CHANGED
File without changes
|
data/lib/oauth2/version.rb
CHANGED
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oauth2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Boling
|
@@ -37,7 +37,7 @@ cert_chain:
|
|
37
37
|
DVjBtqT23eugOqQ73umLcYDZkc36vnqGxUBSsXrzY9pzV5gGr2I8YUxMqf6ATrZt
|
38
38
|
L9nRqA==
|
39
39
|
-----END CERTIFICATE-----
|
40
|
-
date: 2025-05-
|
40
|
+
date: 2025-05-23 00:00:00.000000000 Z
|
41
41
|
dependencies:
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: faraday
|
@@ -134,6 +134,9 @@ dependencies:
|
|
134
134
|
- - "~>"
|
135
135
|
- !ruby/object:Gem::Version
|
136
136
|
version: '2.0'
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: 2.0.3
|
137
140
|
type: :runtime
|
138
141
|
prerelease: false
|
139
142
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -141,6 +144,9 @@ dependencies:
|
|
141
144
|
- - "~>"
|
142
145
|
- !ruby/object:Gem::Version
|
143
146
|
version: '2.0'
|
147
|
+
- - ">="
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: 2.0.3
|
144
150
|
- !ruby/object:Gem::Dependency
|
145
151
|
name: version_gem
|
146
152
|
requirement: !ruby/object:Gem::Requirement
|
@@ -395,27 +401,27 @@ homepage: https://github.com/oauth-xx/oauth2
|
|
395
401
|
licenses:
|
396
402
|
- MIT
|
397
403
|
metadata:
|
398
|
-
homepage_uri: https://
|
399
|
-
source_code_uri: https://
|
400
|
-
changelog_uri: https://gitlab.com/oauth-xx/oauth2/-/blob/v2.0.
|
404
|
+
homepage_uri: https://oauth2.galtzo.com/
|
405
|
+
source_code_uri: https://github.com/oauth-xx/oauth2/releases/tag//v2.0.11
|
406
|
+
changelog_uri: https://gitlab.com/oauth-xx/oauth2/-/blob/v2.0.11/CHANGELOG.md
|
401
407
|
bug_tracker_uri: https://gitlab.com/oauth-xx/oauth2/-/issues
|
402
|
-
documentation_uri: https://www.rubydoc.info/gems/oauth2/2.0.
|
408
|
+
documentation_uri: https://www.rubydoc.info/gems/oauth2/2.0.11
|
403
409
|
wiki_uri: https://gitlab.com/oauth-xx/oauth2/-/wiki
|
404
410
|
mailing_list_uri: https://groups.google.com/g/oauth-ruby
|
405
|
-
news_uri: https://www.railsbling.com/tags/oauth2
|
406
411
|
funding_uri: https://liberapay.com/pboling
|
412
|
+
news_uri: https://www.railsbling.com/tags/oauth2
|
407
413
|
rubygems_mfa_required: 'true'
|
408
414
|
post_install_message: |2
|
409
415
|
|
410
|
-
You have installed oauth2 version 2.0.
|
416
|
+
You have installed oauth2 version 2.0.11, congratulations!
|
411
417
|
|
412
418
|
There are BREAKING changes if you are upgrading from < v2, but most will not encounter them, and updating your code should be easy!
|
413
419
|
Please see:
|
414
420
|
• https://gitlab.com/oauth-xx/oauth2/-/blob/main/SECURITY.md
|
415
|
-
• https://gitlab.com/oauth-xx/oauth2/-/blob/v2.0.
|
421
|
+
• https://gitlab.com/oauth-xx/oauth2/-/blob/v2.0.11/CHANGELOG.md#200-2022-06-21-tag
|
416
422
|
• Summary of most important breaking changes: https://gitlab.com/oauth-xx/oauth2#what-is-new-for-v20
|
417
423
|
|
418
|
-
There are BUGFIXES in v2.0.
|
424
|
+
There are BUGFIXES in v2.0.11, which depending on how you relied on them instead of reporting and fixing them, may be BREAKING for you.
|
419
425
|
For more information please see:
|
420
426
|
https://railsbling.com/tags/oauth2
|
421
427
|
|
@@ -444,7 +450,12 @@ rdoc_options:
|
|
444
450
|
- "--title"
|
445
451
|
- oauth2 - OAuth 2.0 Core Ruby implementation
|
446
452
|
- "--main"
|
453
|
+
- CHANGELOG.md
|
454
|
+
- CODE_OF_CONDUCT.md
|
455
|
+
- CONTRIBUTING.md
|
456
|
+
- LICENSE.txt
|
447
457
|
- README.md
|
458
|
+
- SECURITY.md
|
448
459
|
- "--line-numbers"
|
449
460
|
- "--inline-source"
|
450
461
|
- "--quiet"
|
metadata.gz.sig
CHANGED
Binary file
|