auth-sanitizer 0.2.2 → 0.2.4
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 +131 -1
- data/LICENSE.md +1 -1
- data/README.md +81 -65
- data/lib/auth/sanitizer/core.rb +7 -13
- data/lib/auth/sanitizer/filtered_attributes.rb +15 -10
- data/lib/auth/sanitizer/sanitized_logger.rb +59 -33
- data/lib/auth/sanitizer/thing_filter.rb +3 -3
- data/lib/auth/sanitizer/version.rb +4 -1
- data/lib/auth/sanitizer.rb +1 -1
- data/lib/auth_sanitizer/loader.rb +5 -0
- data/sig/auth/sanitizer.rbs +9 -0
- data.tar.gz.sig +2 -2
- metadata +50 -46
- metadata.gz.sig +0 -0
- data/CITATION.cff +0 -20
- data/CODE_OF_CONDUCT.md +0 -134
- data/CONTRIBUTING.md +0 -272
- data/FUNDING.md +0 -74
- data/RUBOCOP.md +0 -71
- data/SECURITY.md +0 -21
- data/certs/pboling.pem +0 -27
- data/sig/auth/sanitizer/version.rbs +0 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 133e8f52ab2988ce4f62b80654a92286a9bc7c9edb1092790cace4b4dbd581e6
|
|
4
|
+
data.tar.gz: e0ceaea5693cf3c9ba036acdd8162b4added1e5c441ac5e726e325c0ce4a23e6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 38242e0bed6885c8b2a4855e7c46ab177e1fc272aef04425d1cec5de9674bb1c9acc38ee6c7e6d637e9a7b0c8ed3ee93052f6fccd85c9267810c3a1e27e3402f
|
|
7
|
+
data.tar.gz: 756ddde554ae8d459b4b664ab1fda0f2436a296f6610ca6d076ad76e21a620d144ad248a85203f0f949624f484e10cd1373ae2dce95ecca2602f1701e6e6bf7e
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,132 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [0.2.4] - 2026-10-23
|
|
34
|
+
|
|
35
|
+
- TAG: [v0.2.4][0.2.4t]
|
|
36
|
+
- COVERAGE: 100.00% -- 172/172 lines in 7 files
|
|
37
|
+
- BRANCH COVERAGE: 100.00% -- 34/34 branches in 7 files
|
|
38
|
+
- 98.08% documented
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- kettle-jem-template-20260720-005 - README Support & Community links now
|
|
43
|
+
include RubyForum.
|
|
44
|
+
- kettle-jem-template-20260726-001 - Projects now include YARD lint
|
|
45
|
+
configuration and documentation dependencies so documentation issues fail
|
|
46
|
+
before generated docs are refreshed.
|
|
47
|
+
- kettle-jem-template-20260727-001 - Spec harness documentation now lists the
|
|
48
|
+
RSpec helpers provided by `kettle-test`.
|
|
49
|
+
|
|
50
|
+
- kettle-jem-template-20260913-001 - Templating now also surfaces a review
|
|
51
|
+
entry in `dependency_conflicts.resolve` when a direct development
|
|
52
|
+
dependency doesn't support one or more of this project's declared
|
|
53
|
+
`engines:` and has no template-managed modular home (e.g. `sqlite3` on
|
|
54
|
+
`jruby`). Review each entry and pick a resolution per the project's own
|
|
55
|
+
engine support needs.
|
|
56
|
+
|
|
57
|
+
### Changed
|
|
58
|
+
|
|
59
|
+
- kettle-jem-template-20260716-002 - Generated gemspec manifests now ship fewer
|
|
60
|
+
repository-only files by default to reduce downstream distro packaging churn.
|
|
61
|
+
|
|
62
|
+
- kettle-jem-template-20260720-002 - Development Gemfiles now use the released
|
|
63
|
+
`tree_sitter_language_pack` gem 1.13.3 or newer by default.
|
|
64
|
+
- kettle-jem-template-20260725-002 - Version specs now use `anonymous_loader` to
|
|
65
|
+
cover `version.rb` without redefining constants, or are removed when version
|
|
66
|
+
specs are not managed for the project.
|
|
67
|
+
- kettle-jem-template-20260728-001 - Generated Ruby workflows now use clearer
|
|
68
|
+
setup-ruby-flash planning and can prepare appraisal-only jobs without
|
|
69
|
+
installing the main Gemfile bundle.
|
|
70
|
+
|
|
71
|
+
- kettle-jem-template-20260801-001 - Generated README gem dashboard links now
|
|
72
|
+
use ClickGems instead of BestGems.
|
|
73
|
+
|
|
74
|
+
- [kc] kettle-jem/prepare: updated 17 project files:
|
|
75
|
+
- configuration (1)
|
|
76
|
+
- dependencies (16)
|
|
77
|
+
|
|
78
|
+
- [kc] kettle-jem/template: updated 52 project files:
|
|
79
|
+
- code and tests (4)
|
|
80
|
+
- configuration (1)
|
|
81
|
+
- dependencies (8)
|
|
82
|
+
- documentation (2)
|
|
83
|
+
- other (5)
|
|
84
|
+
- workflows (32)
|
|
85
|
+
|
|
86
|
+
### Fixed
|
|
87
|
+
|
|
88
|
+
- kettle-jem-template-20260720-003 - StructuredMerge Git diff driver config now
|
|
89
|
+
uses the installed `smorg-rb` driver command.
|
|
90
|
+
- kettle-jem-template-20260725-001 - Release pull request branches beginning
|
|
91
|
+
with `feature/release` now run JRuby and TruffleRuby workflows.
|
|
92
|
+
- kettle-jem-template-20260726-002 - Generated version files now document their
|
|
93
|
+
version namespace and constants, reducing warning-only YARD lint output.
|
|
94
|
+
- kettle-jem-template-20260726-003 - Coverage upload steps now treat Coveralls,
|
|
95
|
+
QLTY, and Codecov as optional, so provider outages do not fail CI when local
|
|
96
|
+
coverage thresholds still pass.
|
|
97
|
+
- kettle-jem-template-20260728-002 - Generated RuboCop configs now ignore the
|
|
98
|
+
same `gemfiles/vendor/bundle` tree as `.gitignore`, so vendored dependency
|
|
99
|
+
installs are not reported as project lint debt.
|
|
100
|
+
- kettle-jem-template-20260728-003 - Generated dep-heads workflows now run
|
|
101
|
+
TruffleRuby jobs with current RubyGems and Bundler, avoiding setup failures
|
|
102
|
+
before the test suite starts.
|
|
103
|
+
- kettle-jem-template-20260728-004 - Generated dep-heads workflows now use the
|
|
104
|
+
setup-ruby Bundler install path for direct appraisal Gemfiles, avoiding rv
|
|
105
|
+
lockfile parser failures on Git and path dependencies.
|
|
106
|
+
- kettle-jem-template-20260728-005 - VersionGem bootstrap now creates the
|
|
107
|
+
missing canonical version spec when a project only has shim namespace version
|
|
108
|
+
specs.
|
|
109
|
+
- kettle-jem-template-20260729-001 - Generated JRuby 9.4 workflows now use the
|
|
110
|
+
legacy manual bundle install path, avoiding setup-time Bundler full-index
|
|
111
|
+
failures against `gem.coop`.
|
|
112
|
+
- kettle-jem-template-20260730-001 - Gemspec package file enumeration now runs
|
|
113
|
+
relative to the gemspec directory, so release package contents stay correct
|
|
114
|
+
even when the gemspec is loaded from another working directory.
|
|
115
|
+
|
|
116
|
+
- kettle-jem-template-20260801-002 - Generated RSpec helpers now normalize
|
|
117
|
+
managed configuration block bindings structurally, preventing mixed block
|
|
118
|
+
parameter names from producing invalid configuration after a merge.
|
|
119
|
+
- kettle-jem-template-20260801-003 - Generated project metadata and
|
|
120
|
+
documentation now normalize configured underscore hostnames to valid
|
|
121
|
+
hyphenated hostnames.
|
|
122
|
+
- kettle-jem-template-20260801-004 - Generated organization README logos now
|
|
123
|
+
use GitHub's stable organization avatar endpoint instead of assuming a
|
|
124
|
+
matching Galtzo-hosted asset exists.
|
|
125
|
+
- kettle-jem-template-20260802-001 - Devcontainer JSON files now merge as JSONC,
|
|
126
|
+
preserving comments and trailing commas during template updates.
|
|
127
|
+
|
|
128
|
+
- Fix load-order `NameError: uninitialized constant Auth::Sanitizer::Version` by removing a duplicate `VersionGem::Basic` class_eval from `auth/sanitizer/core` (the version constant is loaded after `core` in `auth/sanitizer.rb`).
|
|
129
|
+
|
|
130
|
+
- Gemspec no longer defines a top-level `Auth` constant when evaluated on Ruby < 3.1 (e.g. by `bundler/setup`); the version file now loads into an anonymous module via `Module#module_eval` on all supported Rubies. This un-breaks the isolated-loading specs and the ruby-2.4 CI workflow.
|
|
131
|
+
|
|
132
|
+
### Security
|
|
133
|
+
|
|
134
|
+
- SanitizedLogger now redacts configured keys in Ruby `Hash#inspect` output (both Ruby 3.4+ `{"key" => "value"}` / `{key: "value"}` and pre-3.4 hash-rocket formats), fixes a mangling bug where the form-pair pattern partially matched `:key=>"value"` pairs, and no longer raises on invalid-encoded message bytes. This closes the OAUTH_DEBUG cleartext-logging bypass reported for oauth2 as GHSA-cmh8-5q25-68v6, where Faraday renders Hash request bodies with `pretty_inspect`. Reported by iamibi.
|
|
135
|
+
|
|
136
|
+
## [0.2.3] - 2026-07-14
|
|
137
|
+
|
|
138
|
+
- TAG: [v0.2.3][0.2.3t]
|
|
139
|
+
- COVERAGE: 85.80% -- 145/169 lines in 7 files
|
|
140
|
+
- BRANCH COVERAGE: 82.35% -- 28/34 branches in 7 files
|
|
141
|
+
- 84.62% documented
|
|
142
|
+
|
|
143
|
+
### Added
|
|
144
|
+
|
|
145
|
+
- Added support for JRuby 10.1 and TruffleRuby 34.0.
|
|
146
|
+
|
|
147
|
+
### Changed
|
|
148
|
+
|
|
149
|
+
- Retemplated project metadata and CI/development automation with `kettle-jem` v7.0.0.
|
|
150
|
+
|
|
151
|
+
### Fixed
|
|
152
|
+
|
|
153
|
+
- Package configured license files in gem release file lists.
|
|
154
|
+
|
|
155
|
+
- Removed stale local-path `version_gem` state from the main lockfile.
|
|
156
|
+
- Prevented gemspec version detection from defining top-level `Auth` on older
|
|
157
|
+
Rubies.
|
|
158
|
+
|
|
33
159
|
## [0.2.2] - 2026-06-18
|
|
34
160
|
|
|
35
161
|
- TAG: [v0.2.2][0.2.2t]
|
|
@@ -169,7 +295,11 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
169
295
|
|
|
170
296
|
- Initial release
|
|
171
297
|
|
|
172
|
-
[Unreleased]: https://github.com/ruby-oauth/auth-sanitizer/compare/v0.2.
|
|
298
|
+
[Unreleased]: https://github.com/ruby-oauth/auth-sanitizer/compare/v0.2.4...HEAD
|
|
299
|
+
[0.2.4]: https://github.com/ruby-oauth/auth-sanitizer/compare/v0.2.3...v0.2.4
|
|
300
|
+
[0.2.4t]: https://github.com/ruby-oauth/auth-sanitizer/releases/tag/v0.2.4
|
|
301
|
+
[0.2.3]: https://github.com/ruby-oauth/auth-sanitizer/compare/v0.2.2...v0.2.3
|
|
302
|
+
[0.2.3t]: https://github.com/ruby-oauth/auth-sanitizer/releases/tag/v0.2.3
|
|
173
303
|
[0.2.2]: https://github.com/ruby-oauth/auth-sanitizer/compare/v0.2.1...v0.2.2
|
|
174
304
|
[0.2.2t]: https://github.com/ruby-oauth/auth-sanitizer/releases/tag/v0.2.2
|
|
175
305
|
[0.2.1]: https://github.com/ruby-oauth/auth-sanitizer/compare/v0.2.0...v0.2.1
|
data/LICENSE.md
CHANGED
data/README.md
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
<a href="https://github.com/ruby-oauth"><img alt="ruby-oauth Logo by
|
|
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
|
+
# 🧼 Auth::Sanitizer
|
|
4
4
|
|
|
5
|
-
[![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license] [![
|
|
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
|
|
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
|
|
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
14
|
|
|
15
|
-
<details>
|
|
15
|
+
<details markdown="1">
|
|
16
16
|
<summary>👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️</summary>
|
|
17
17
|
|
|
18
18
|
I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo).
|
|
@@ -80,13 +80,13 @@ This gem is used by the following libraries to ensure clean output:
|
|
|
80
80
|
|
|
81
81
|
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|
|
82
82
|
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
83
|
-
| 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]|
|
|
84
|
-
| Works with Truffle Ruby | [![Truffle Ruby 22.3 Compat][💎truby-22.3i]][🚎truby-22.3-wf] [![Truffle Ruby 23.
|
|
85
|
-
| Works with MRI Ruby 4 | [![Ruby
|
|
83
|
+
| 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]|
|
|
84
|
+
| 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]|
|
|
85
|
+
| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
|
|
86
86
|
| 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]|
|
|
87
87
|
| 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]|
|
|
88
|
-
| 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] |
|
|
89
|
-
| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on
|
|
88
|
+
| 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] |
|
|
89
|
+
| 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] |
|
|
90
90
|
| 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] |
|
|
91
91
|
| 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] |
|
|
92
92
|
| 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] |
|
|
@@ -95,33 +95,65 @@ This gem is used by the following libraries to ensure clean output:
|
|
|
95
95
|
|
|
96
96
|
### Compatibility
|
|
97
97
|
|
|
98
|
-
Compatible with MRI Ruby 2.2.0+,
|
|
98
|
+
Compatible with MRI Ruby 2.2.0+, JRuby, and TruffleRuby.
|
|
99
99
|
CI workflows and Appraisals are generated for MRI Ruby 2.4+.
|
|
100
100
|
This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
|
|
101
101
|
may be higher than the gem's runtime compatibility floor when legacy Rubies are
|
|
102
102
|
not practical for the current toolchain.
|
|
103
103
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
<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>
|
|
105
|
+
|
|
106
|
+
The _amazing_ test matrix is powered by the kettle-dev stack.
|
|
107
|
+
|
|
108
|
+
<details markdown="1">
|
|
109
|
+
<summary>How kettle-dev manages complexity in tests</summary>
|
|
110
|
+
|
|
111
|
+
| Gem | Source | Role | Total downloads |
|
|
112
|
+
|-----|--------|------|---------------------|
|
|
113
|
+
| [appraisal2](https://clickgems.clickhouse.com/dashboard/appraisal2) | [GitHub](https://github.com/appraisal-rb/appraisal2) | multi-dependency Appraisal matrix generation | [](https://clickgems.clickhouse.com/dashboard/appraisal2) |
|
|
114
|
+
| [appraisal2-rubocop](https://clickgems.clickhouse.com/dashboard/appraisal2-rubocop) | [GitHub](https://github.com/appraisal-rb/appraisal2-rubocop) | RuboCop Appraisal generator integration | [](https://clickgems.clickhouse.com/dashboard/appraisal2-rubocop) |
|
|
115
|
+
| [kettle-dev](https://clickgems.clickhouse.com/dashboard/kettle-dev) | [GitHub](https://github.com/kettle-dev/kettle-dev) | development, release, and CI workflow tooling | [](https://clickgems.clickhouse.com/dashboard/kettle-dev) |
|
|
116
|
+
| [kettle-jem](https://clickgems.clickhouse.com/dashboard/kettle-jem) | [GitHub](https://github.com/kettle-dev/kettle-jem) | Appraisals & CI workflow templates | [](https://clickgems.clickhouse.com/dashboard/kettle-jem) |
|
|
117
|
+
| [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 | [](https://clickgems.clickhouse.com/dashboard/kettle-soup-cover) |
|
|
118
|
+
| [kettle-test](https://clickgems.clickhouse.com/dashboard/kettle-test) | [GitHub](https://github.com/kettle-dev/kettle-test) | standard test runner and coverage harness | [](https://clickgems.clickhouse.com/dashboard/kettle-test) |
|
|
119
|
+
| [rubocop-lts](https://clickgems.clickhouse.com/dashboard/rubocop-lts) | [GitHub](https://github.com/rubocop-lts/rubocop-lts) | Ruby-version-aware linting | [](https://clickgems.clickhouse.com/dashboard/rubocop-lts) |
|
|
120
|
+
| [turbo_tests2](https://clickgems.clickhouse.com/dashboard/turbo_tests2) | [GitHub](https://github.com/galtzo-floss/turbo_tests2) | parallel test execution | [](https://clickgems.clickhouse.com/dashboard/turbo_tests2) |
|
|
121
|
+
|
|
122
|
+
</details>
|
|
123
|
+
|
|
124
|
+
### Runtime and Platform Support
|
|
125
|
+
|
|
126
|
+
Support tiers describe what this project's CI actually exercises, not what may
|
|
127
|
+
work in an untested environment:
|
|
128
|
+
|
|
129
|
+
- **Parallel support**: CI runs the test suite with multiple workers available.
|
|
130
|
+
- **Unsupported**: the engine/platform combination is not covered by CI and is
|
|
131
|
+
not a project compatibility claim.
|
|
132
|
+
|
|
133
|
+
| Ruby engine/version | Linux | macOS | Windows | Notes |
|
|
134
|
+
|---------------------|-------|-------|---------|-------|
|
|
135
|
+
| MRI 3.1-3.4 | Parallel support | Unsupported | Unsupported | Versioned Ruby workflows run on Linux. |
|
|
136
|
+
| MRI current | Parallel support | Parallel support | Unsupported | Current Ruby workflow covers the declared OS platforms. |
|
|
137
|
+
| MRI head | Parallel support | Unsupported | Unsupported | CI is allowed to fail while Ruby is in development. |
|
|
138
|
+
| JRuby (all CI lanes) | Parallel support | Unsupported | Unsupported | Engine workflows run on Linux; macOS and Windows are not exercised by CI. |
|
|
139
|
+
| TruffleRuby (all CI lanes) | Parallel support | Unsupported | Unsupported | Never shipped a Windows build (zero Windows assets across 66 releases scanned 2026-10-10); setup-ruby hard-fails ([source](https://github.com/ruby/setup-ruby/blob/master/README.md)) |
|
|
107
140
|
|
|
108
141
|
### Federated DVCS
|
|
109
142
|
|
|
110
143
|
<details markdown="1">
|
|
111
144
|
<summary>Find this repo on federated forges (Coming soon!)</summary>
|
|
112
145
|
|
|
113
|
-
| Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI |
|
|
114
|
-
|
|
115
|
-
| 🧪 [ruby-oauth/auth-sanitizer on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix |
|
|
116
|
-
| 🧊 [ruby-oauth/auth-sanitizer on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix |
|
|
117
|
-
| 🐙 [ruby-oauth/auth-sanitizer on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix |
|
|
118
|
-
| 🎮️ [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] |
|
|
146
|
+
| Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI |
|
|
147
|
+
|-------------------------------------------------|-------------------------------------------|-------------------|------------------|-----------------|----------------|
|
|
148
|
+
| 🧪 [ruby-oauth/auth-sanitizer on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix |
|
|
149
|
+
| 🧊 [ruby-oauth/auth-sanitizer on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix |
|
|
150
|
+
| 🐙 [ruby-oauth/auth-sanitizer on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix |
|
|
119
151
|
|
|
120
152
|
</details>
|
|
121
153
|
|
|
122
|
-
|
|
154
|
+
### Enterprise Support
|
|
123
155
|
|
|
124
|
-
|
|
156
|
+
[](https://tidelift.com/subscription/pkg/rubygems-auth-sanitizer?utm_source=rubygems-auth-sanitizer&utm_medium=referral&utm_campaign=readme)
|
|
125
157
|
|
|
126
158
|
Available as part of the Tidelift Subscription.
|
|
127
159
|
|
|
@@ -138,6 +170,7 @@ The maintainers of this and thousands of other packages are working with Tidelif
|
|
|
138
170
|
|
|
139
171
|
Alternatively:
|
|
140
172
|
|
|
173
|
+
- [![Ruby Users Forum][✉️ruby-forum-img]][✉️ruby-forum]
|
|
141
174
|
- [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
|
|
142
175
|
- [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork]
|
|
143
176
|
- [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor]
|
|
@@ -575,13 +608,9 @@ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day
|
|
|
575
608
|
|
|
576
609
|
<!-- OPENCOLLECTIVE-ORGANIZATIONS:START -->
|
|
577
610
|
No sponsors yet. Be the first!
|
|
578
|
-
|
|
579
|
-
### Open Collective for Donors
|
|
580
|
-
|
|
581
|
-
[Bill Woika](https://opencollective.com/bill-woika) [Philipp Ebneter](https://opencollective.com/guest-e77282f7) [Grigoriy](https://opencollective.com/guest-c93e0c48)
|
|
582
611
|
<!-- OPENCOLLECTIVE-ORGANIZATIONS:END -->
|
|
583
612
|
|
|
584
|
-
[kettle-readme-backers]: https://github.com/ruby-oauth/auth-sanitizer/blob/main/
|
|
613
|
+
[kettle-readme-backers]: https://github.com/ruby-oauth/auth-sanitizer/blob/main/bin/kettle-readme-backers
|
|
585
614
|
|
|
586
615
|
### Another way to support open-source
|
|
587
616
|
|
|
@@ -593,7 +622,7 @@ I’m developing a new library, [floss_funding][🖇floss-funding-gem], designed
|
|
|
593
622
|
|
|
594
623
|
**[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
|
|
595
624
|
|
|
596
|
-
[![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
|
|
625
|
+
[![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]
|
|
597
626
|
|
|
598
627
|
## 🔐 Security
|
|
599
628
|
|
|
@@ -602,8 +631,7 @@ See [SECURITY.md][🔐security].
|
|
|
602
631
|
## 🤝 Contributing
|
|
603
632
|
|
|
604
633
|
If you need some ideas of where to help, you could work on adding more code coverage,
|
|
605
|
-
|
|
606
|
-
or use the gem and think about how it could be better.
|
|
634
|
+
check [issues][🤝gh-issues] or [PRs][🤝gh-pulls], or use the gem and think about how it could be better.
|
|
607
635
|
|
|
608
636
|
We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
|
|
609
637
|
|
|
@@ -639,19 +667,6 @@ Made with [contributors-img][🖐contrib-rocks].
|
|
|
639
667
|
|
|
640
668
|
Also see GitLab Contributors: [https://gitlab.com/ruby-oauth/auth-sanitizer/-/graphs/main][🚎contributors-gl]
|
|
641
669
|
|
|
642
|
-
<details>
|
|
643
|
-
<summary>⭐️ Star History</summary>
|
|
644
|
-
|
|
645
|
-
<a href="https://star-history.com/ruby-oauth/auth-sanitizer&Date">
|
|
646
|
-
<picture>
|
|
647
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=ruby-oauth/auth-sanitizer&type=Date&theme=dark" />
|
|
648
|
-
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=ruby-oauth/auth-sanitizer&type=Date" />
|
|
649
|
-
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=ruby-oauth/auth-sanitizer&type=Date" />
|
|
650
|
-
</picture>
|
|
651
|
-
</a>
|
|
652
|
-
|
|
653
|
-
</details>
|
|
654
|
-
|
|
655
670
|
## 📌 Versioning
|
|
656
671
|
|
|
657
672
|
This library follows [![Semantic Versioning 2.0.0][📌semver-img]][📌semver] for its public API where practical.
|
|
@@ -681,7 +696,7 @@ See [CHANGELOG.md][📌changelog] for a list of releases.
|
|
|
681
696
|
## 📄 License
|
|
682
697
|
|
|
683
698
|
The gem is available as open source under the terms of
|
|
684
|
-
the [MIT](MIT.md) [![License: MIT][📄license-img]][📄license-ref].
|
|
699
|
+
the [MIT](https://github.com/ruby-oauth/auth-sanitizer/blob/main/MIT.md) [![License: MIT][📄license-img]][📄license-ref].
|
|
685
700
|
|
|
686
701
|
### © Copyright
|
|
687
702
|
|
|
@@ -703,11 +718,12 @@ I'm hoping to be able to pay for my kids' health insurance this month,
|
|
|
703
718
|
so if you value the work I am doing, I need your support.
|
|
704
719
|
Please consider sponsoring me or the project.
|
|
705
720
|
|
|
706
|
-
To join the community or get help
|
|
721
|
+
To join the community or get help, use the RubyForum or Discord.
|
|
707
722
|
|
|
723
|
+
[![Ruby Users Forum][✉️ruby-forum-img]][✉️ruby-forum]
|
|
708
724
|
[![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
|
|
709
725
|
|
|
710
|
-
To say "thanks!" ☝️ Join the
|
|
726
|
+
To say "thanks!" ☝️ Join the community or 👇️ send money.
|
|
711
727
|
|
|
712
728
|
[![Sponsor ruby-oauth/auth-sanitizer 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]
|
|
713
729
|
|
|
@@ -734,12 +750,8 @@ Thanks for RTFM. ☺️
|
|
|
734
750
|
[🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
|
|
735
751
|
[🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
|
|
736
752
|
[🖇sponsor]: https://github.com/sponsors/pboling
|
|
737
|
-
[🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
|
|
738
|
-
[🖇polar]: https://polar.sh/pboling
|
|
739
753
|
[🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
|
|
740
754
|
[🖇kofi]: https://ko-fi.com/pboling
|
|
741
|
-
[🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
|
|
742
|
-
[🖇patreon]: https://patreon.com/galtzo
|
|
743
755
|
[🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
|
|
744
756
|
[🖇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
|
|
745
757
|
[🖇buyme]: https://www.buymeacoffee.com/pboling
|
|
@@ -752,11 +764,14 @@ Thanks for RTFM. ☺️
|
|
|
752
764
|
[✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
|
|
753
765
|
[✉️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
|
|
754
766
|
[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
|
|
767
|
+
[✉️ruby-forum-top-img]: https://img.shields.io/discourse/topics?server=https%3A%2F%2Fwww.rubyforum.org&style=flat&logo=discourse&label=Ruby%20Users%20Forum
|
|
768
|
+
[✉️ruby-forum-img]: https://img.shields.io/discourse/topics?server=https%3A%2F%2Fwww.rubyforum.org&style=for-the-badge&logo=discourse&label=Ruby%20Users%20Forum
|
|
769
|
+
[✉️ruby-forum]: https://www.rubyforum.org/tag/ruby-oauth
|
|
755
770
|
|
|
756
771
|
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
|
|
757
772
|
[⛳️gem-namespace]: https://github.com/ruby-oauth/auth-sanitizer
|
|
758
773
|
[⛳️namespace-img]: https://img.shields.io/badge/namespace-Auth::Sanitizer-3C2D2D.svg?style=square&logo=ruby&logoColor=white
|
|
759
|
-
[⛳️gem-name]: https://
|
|
774
|
+
[⛳️gem-name]: https://clickgems.clickhouse.com/dashboard/auth-sanitizer
|
|
760
775
|
[⛳️name-img]: https://img.shields.io/badge/name-auth--sanitizer-3C2D2D.svg?style=square&logo=rubygems&logoColor=red
|
|
761
776
|
[⛳️tag-img]: https://img.shields.io/github/tag/ruby-oauth/auth-sanitizer.svg
|
|
762
777
|
[⛳️tag]: https://github.com/ruby-oauth/auth-sanitizer/releases
|
|
@@ -797,7 +812,7 @@ Thanks for RTFM. ☺️
|
|
|
797
812
|
[📜src-gl]: https://gitlab.com/ruby-oauth/auth-sanitizer
|
|
798
813
|
[📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
|
|
799
814
|
[📜src-cb]: https://codeberg.org/ruby-oauth/auth-sanitizer
|
|
800
|
-
[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=
|
|
815
|
+
[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
|
|
801
816
|
[📜src-gh]: https://github.com/ruby-oauth/auth-sanitizer
|
|
802
817
|
[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
|
|
803
818
|
[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
|
|
@@ -805,9 +820,9 @@ Thanks for RTFM. ☺️
|
|
|
805
820
|
[📜gh-wiki]: https://github.com/ruby-oauth/auth-sanitizer/wiki
|
|
806
821
|
[📜gl-wiki-img]: https://img.shields.io/badge/wiki-gitlab-943CD2.svg?style=for-the-badge&logo=gitlab&logoColor=white
|
|
807
822
|
[📜gh-wiki-img]: https://img.shields.io/badge/wiki-github-943CD2.svg?style=for-the-badge&logo=github&logoColor=white
|
|
808
|
-
[👽dl-rank]: https://
|
|
809
|
-
[👽dl-ranki]: https://img.shields.io/gem/
|
|
810
|
-
[👽version]: https://
|
|
823
|
+
[👽dl-rank]: https://clickgems.clickhouse.com/dashboard/auth-sanitizer
|
|
824
|
+
[👽dl-ranki]: https://img.shields.io/gem/dt/auth-sanitizer.svg
|
|
825
|
+
[👽version]: https://clickgems.clickhouse.com/dashboard/auth-sanitizer
|
|
811
826
|
[👽versioni]: https://img.shields.io/gem/v/auth-sanitizer.svg
|
|
812
827
|
[🏀qlty-mnt]: https://qlty.sh/gh/ruby-oauth/projects/auth-sanitizer
|
|
813
828
|
[🏀qlty-mnti]: https://qlty.sh/gh/ruby-oauth/projects/auth-sanitizer/maintainability.svg
|
|
@@ -829,11 +844,12 @@ Thanks for RTFM. ☺️
|
|
|
829
844
|
[🚎jruby-9.2-wf]: https://github.com/ruby-oauth/auth-sanitizer/actions/workflows/jruby-9.2.yml
|
|
830
845
|
[🚎jruby-9.3-wf]: https://github.com/ruby-oauth/auth-sanitizer/actions/workflows/jruby-9.3.yml
|
|
831
846
|
[🚎jruby-9.4-wf]: https://github.com/ruby-oauth/auth-sanitizer/actions/workflows/jruby-9.4.yml
|
|
847
|
+
[🚎jruby-10.0-wf]: https://github.com/ruby-oauth/auth-sanitizer/actions/workflows/jruby-10.0.yml
|
|
832
848
|
[🚎truby-22.3-wf]: https://github.com/ruby-oauth/auth-sanitizer/actions/workflows/truffleruby-22.3.yml
|
|
833
|
-
[🚎truby-23.0-wf]: https://github.com/ruby-oauth/auth-sanitizer/actions/workflows/truffleruby-23.0.yml
|
|
834
849
|
[🚎truby-23.1-wf]: https://github.com/ruby-oauth/auth-sanitizer/actions/workflows/truffleruby-23.1.yml
|
|
835
850
|
[🚎truby-24.2-wf]: https://github.com/ruby-oauth/auth-sanitizer/actions/workflows/truffleruby-24.2.yml
|
|
836
851
|
[🚎truby-25.0-wf]: https://github.com/ruby-oauth/auth-sanitizer/actions/workflows/truffleruby-25.0.yml
|
|
852
|
+
[🚎truby-33.0-wf]: https://github.com/ruby-oauth/auth-sanitizer/actions/workflows/truffleruby-33.0.yml
|
|
837
853
|
[🚎2-cov-wf]: https://github.com/ruby-oauth/auth-sanitizer/actions/workflows/coverage.yml
|
|
838
854
|
[🚎2-cov-wfi]: https://github.com/ruby-oauth/auth-sanitizer/actions/workflows/coverage.yml/badge.svg
|
|
839
855
|
[🚎3-hd-wf]: https://github.com/ruby-oauth/auth-sanitizer/actions/workflows/heads.yml
|
|
@@ -865,18 +881,18 @@ Thanks for RTFM. ☺️
|
|
|
865
881
|
[💎ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
866
882
|
[💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
867
883
|
[💎ruby-3.4i]: https://img.shields.io/badge/Ruby-3.4-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
868
|
-
[💎ruby-4.0i]: https://img.shields.io/badge/Ruby-4.0-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
869
884
|
[💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
|
|
870
885
|
[💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
|
|
871
886
|
[💎truby-22.3i]: https://img.shields.io/badge/Truffle_Ruby-22.3-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
872
|
-
[💎truby-23.0i]: https://img.shields.io/badge/Truffle_Ruby-23.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
873
887
|
[💎truby-23.1i]: https://img.shields.io/badge/Truffle_Ruby-23.1-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
874
888
|
[💎truby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
875
889
|
[💎truby-25.0i]: https://img.shields.io/badge/Truffle_Ruby-25.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
890
|
+
[💎truby-33.0i]: https://img.shields.io/badge/Truffle_Ruby-33.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
876
891
|
[💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
|
|
877
892
|
[💎jruby-9.2i]: https://img.shields.io/badge/JRuby-9.2-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
878
893
|
[💎jruby-9.3i]: https://img.shields.io/badge/JRuby-9.3-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
879
894
|
[💎jruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
895
|
+
[💎jruby-10.0i]: https://img.shields.io/badge/JRuby-10.0-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
880
896
|
[💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
|
|
881
897
|
[💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
|
|
882
898
|
[🤝gh-issues]: https://github.com/ruby-oauth/auth-sanitizer/issues
|
|
@@ -905,15 +921,15 @@ Thanks for RTFM. ☺️
|
|
|
905
921
|
[📌gitmoji]: https://gitmoji.dev
|
|
906
922
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
907
923
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
908
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.
|
|
924
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.172-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
909
925
|
[🔐security]: https://github.com/ruby-oauth/auth-sanitizer/blob/main/SECURITY.md
|
|
910
926
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
911
927
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
912
928
|
[📄license]: LICENSE.md
|
|
913
|
-
[📄license-ref]: MIT.md
|
|
929
|
+
[📄license-ref]: https://github.com/ruby-oauth/auth-sanitizer/blob/main/MIT.md
|
|
914
930
|
[📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
|
|
915
931
|
[📄license-compat]: https://www.apache.org/legal/resolved.html#category-a
|
|
916
|
-
[📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A
|
|
932
|
+
[📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-%E2%9C%93-259D6C.svg?style=flat&logo=Apache
|
|
917
933
|
|
|
918
934
|
[📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
|
|
919
935
|
[📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
|
|
@@ -931,9 +947,9 @@ Thanks for RTFM. ☺️
|
|
|
931
947
|
| Field | Value |
|
|
932
948
|
|---|---|
|
|
933
949
|
| Package | auth-sanitizer |
|
|
934
|
-
| Description |
|
|
950
|
+
| Description | 🧼 Configurable KV output redaction. Sanitize/filter your secrets. |
|
|
935
951
|
| Homepage | https://github.com/ruby-oauth/auth-sanitizer |
|
|
936
|
-
| Source | https://github.com/ruby-oauth/auth-sanitizer
|
|
952
|
+
| Source | https://github.com/ruby-oauth/auth-sanitizer |
|
|
937
953
|
| License | `MIT` |
|
|
938
|
-
| Funding | https://github.com/sponsors/pboling, https://
|
|
954
|
+
| 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://tidelift.com/funding/github/rubygems/auth-sanitizer, https://www.buymeacoffee.com/pboling |
|
|
939
955
|
<!-- kettle-jem:metadata:end -->
|
data/lib/auth/sanitizer/core.rb
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Auth::Sanitizer::Version.class_eval do
|
|
6
|
-
extend VersionGem::Basic
|
|
7
|
-
end
|
|
8
|
-
|
|
3
|
+
# Top-level namespace for authentication-adjacent helpers.
|
|
9
4
|
module Auth
|
|
5
|
+
# Credential redaction for inspect output and debug logging.
|
|
10
6
|
module Sanitizer
|
|
7
|
+
# Error raised for auth-sanitizer failures.
|
|
11
8
|
class Error < StandardError; end
|
|
12
9
|
|
|
13
10
|
# Default keys filtered from debug log output.
|
|
@@ -42,16 +39,13 @@ module Auth
|
|
|
42
39
|
|
|
43
40
|
# Install a custom provider for the filtered label.
|
|
44
41
|
#
|
|
45
|
-
# The provider is
|
|
46
|
-
# {SanitizedLogger}-bearing object is initialized, allowing the label to
|
|
47
|
-
#
|
|
48
|
-
# object instance.
|
|
42
|
+
# The provider callable is invoked each time a new {FilteredAttributes}- or
|
|
43
|
+
# {SanitizedLogger}-bearing object is initialized, allowing the label to track a host gem's
|
|
44
|
+
# live configuration while still being snapshotted per object instance.
|
|
49
45
|
#
|
|
46
|
+
# @return [void]
|
|
50
47
|
# @example Delegate to a host gem's config
|
|
51
48
|
# Auth::Sanitizer.filtered_label_provider = -> { MyGem.config[:filtered_label] }
|
|
52
|
-
#
|
|
53
|
-
# @param [#call] provider A callable that returns the label string
|
|
54
|
-
# @return [void]
|
|
55
49
|
define_singleton_method(:filtered_label_provider=) do |provider|
|
|
56
50
|
filtered_label_provider_mutex.synchronize do
|
|
57
51
|
filtered_label_provider = provider
|
|
@@ -4,13 +4,11 @@ module Auth
|
|
|
4
4
|
module Sanitizer
|
|
5
5
|
# Mixin that redacts sensitive instance variables in `#inspect` output.
|
|
6
6
|
#
|
|
7
|
-
# Classes include this module and declare
|
|
8
|
-
#
|
|
9
|
-
# delegated to {ThingFilter}, which is initialized once per object.
|
|
7
|
+
# Classes include this module and declare attribute names to filter via {.filtered_attributes}.
|
|
8
|
+
# Matching and replacement behavior is delegated to {ThingFilter}, initialized once per object.
|
|
10
9
|
#
|
|
11
|
-
# This means existing objects keep the filter configuration that was present
|
|
12
|
-
#
|
|
13
|
-
# declarations change later.
|
|
10
|
+
# This means existing objects keep the filter configuration that was present when they were
|
|
11
|
+
# initialized, even if global config or class-level filter declarations change later.
|
|
14
12
|
#
|
|
15
13
|
# The label used for redaction is resolved from {Auth::Sanitizer.filtered_label}
|
|
16
14
|
# at object initialization time. Host gems may customize this by installing a
|
|
@@ -20,7 +18,7 @@ module Auth
|
|
|
20
18
|
# Hook invoked when the module is included. Extends the including class with
|
|
21
19
|
# class-level helpers and prepends the initializer hook.
|
|
22
20
|
#
|
|
23
|
-
# @param [Class]
|
|
21
|
+
# @param base [Class] The including class
|
|
24
22
|
# @return [void]
|
|
25
23
|
def included(base)
|
|
26
24
|
base.extend(ClassMethods)
|
|
@@ -47,7 +45,8 @@ module Auth
|
|
|
47
45
|
class << self
|
|
48
46
|
# Declare attributes that should be redacted in inspect output.
|
|
49
47
|
#
|
|
50
|
-
# @param [
|
|
48
|
+
# @param base [Class] The class the attributes are declared on
|
|
49
|
+
# @param attributes [Array<Symbol, String>] One or more attribute names
|
|
51
50
|
# @return [void]
|
|
52
51
|
def filtered_attributes(base, *attributes)
|
|
53
52
|
base.instance_variable_set(:@filtered_attribute_names, attributes.map(&:to_sym))
|
|
@@ -55,7 +54,7 @@ module Auth
|
|
|
55
54
|
|
|
56
55
|
# The configured attribute names to filter.
|
|
57
56
|
#
|
|
58
|
-
# @param [Class]
|
|
57
|
+
# @param base [Class] The class to get filtered attributes for
|
|
59
58
|
# @return [Array<Symbol>]
|
|
60
59
|
def filtered_attribute_names(base)
|
|
61
60
|
return [] unless base.instance_variable_defined?(:@filtered_attribute_names)
|
|
@@ -66,7 +65,7 @@ module Auth
|
|
|
66
65
|
|
|
67
66
|
# Declare attributes that should be redacted in inspect output.
|
|
68
67
|
#
|
|
69
|
-
# @param [Array<Symbol, String>]
|
|
68
|
+
# @param attributes [Array<Symbol, String>] One or more attribute names
|
|
70
69
|
# @return [void]
|
|
71
70
|
def filtered_attributes(*attributes)
|
|
72
71
|
ClassMethods.filtered_attributes(self, *attributes)
|
|
@@ -101,7 +100,9 @@ module Auth
|
|
|
101
100
|
|
|
102
101
|
private
|
|
103
102
|
|
|
103
|
+
# Matches a quoted string literal inside `#inspect` output.
|
|
104
104
|
INSPECTED_STRING_VALUE = /"(?:(?:\\.)|[^"\\])*"/
|
|
105
|
+
# Matches redactable key/value pairs inside `#inspect` output.
|
|
105
106
|
INSPECTED_REDACTABLE_VALUE = /
|
|
106
107
|
(?:
|
|
107
108
|
(@([A-Za-z_]\w*[!?=]?)=) |
|
|
@@ -113,6 +114,10 @@ module Auth
|
|
|
113
114
|
/x
|
|
114
115
|
private_constant :INSPECTED_STRING_VALUE, :INSPECTED_REDACTABLE_VALUE
|
|
115
116
|
|
|
117
|
+
# Redact filtered values from `#inspect` output text.
|
|
118
|
+
#
|
|
119
|
+
# @param inspected [String] The `#inspect` output to redact
|
|
120
|
+
# @return [String] The redacted inspect output
|
|
116
121
|
def redact_inspected_values(inspected)
|
|
117
122
|
inspected.gsub(INSPECTED_REDACTABLE_VALUE) do |match|
|
|
118
123
|
captures = Regexp.last_match.captures
|