omniauth-identity 3.1.4 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +152 -4
- data/CITATION.cff +20 -0
- data/CODE_OF_CONDUCT.md +3 -4
- data/CONTRIBUTING.md +177 -116
- data/FUNDING.md +74 -0
- data/LICENSE.md +10 -0
- data/README.md +349 -195
- data/RUBOCOP.md +71 -0
- data/SECURITY.md +7 -31
- data/certs/pboling.pem +27 -0
- data/lib/omniauth/identity/model.rb +51 -11
- data/lib/omniauth/identity/models/active_record.rb +55 -9
- data/lib/omniauth/identity/models/couch_potato.rb +75 -19
- data/lib/omniauth/identity/models/mongoid.rb +63 -14
- data/lib/omniauth/identity/models/nobrainer.rb +63 -15
- data/lib/omniauth/identity/models/rom.rb +164 -0
- data/lib/omniauth/identity/models/sequel.rb +104 -40
- data/lib/omniauth/identity/secure_password.rb +41 -6
- data/lib/omniauth/identity/version.rb +10 -2
- data/lib/omniauth/identity.rb +41 -0
- data/lib/omniauth/strategies/identity.rb +127 -6
- data/sig/omniauth/identity/version.rbs +8 -0
- data.tar.gz.sig +0 -0
- metadata +202 -49
- metadata.gz.sig +0 -0
- data/LICENSE.txt +0 -24
data/README.md
CHANGED
|
@@ -1,22 +1,25 @@
|
|
|
1
|
-
<
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
<a href="https://www.ruby-lang.org/" target="_blank" rel="noopener">
|
|
9
|
-
<img width="124px" src="https://github.com/galtzo-floss/shields-badge/raw/main/docs/images/logo/ruby-logo-198px.svg?raw=true" alt="Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5">
|
|
10
|
-
</a>
|
|
11
|
-
</p>
|
|
12
|
-
|
|
13
|
-
# 🫵 OmniAuth::Identity
|
|
14
|
-
|
|
15
|
-
[![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] [![CodeCov Test Coverage][🔑codecovi♻️]][🔑codecov] [![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 JRuby][🚎10-j-wfi]][🚎10-j-wf] [![Deps Locked][🚎13-🔒️-wfi]][🚎13-🔒️-wf] [![Deps Unlocked][🚎14-🔓️-wfi]][🚎14-🔓️-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 Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf]
|
|
1
|
+
<a href="https://github.com/omniauth"><img alt="omniauth Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/omniauth/avatar-128px.svg" width="14%" align="right"/></a>
|
|
2
|
+
|
|
3
|
+
# 🫵 Omniauth::Identity
|
|
4
|
+
|
|
5
|
+
[![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![CodeCov Test Coverage][🏀codecovi]][🏀codecov] [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls] [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov] [![QLTY Maintainability][🏀qlty-mnti]][🏀qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-wf] [![CI Current][🚎11-c-wfi]][🚎11-c-wf] [![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf] [![CI JRuby][🚎10-j-wfi]][🚎10-j-wf] [![Deps Locked][🚎13-🔒️-wfi]][🚎13-🔒️-wf] [![Deps Unlocked][🚎14-🔓️-wfi]][🚎14-🔓️-wf] [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf] [![Apache SkyWalking Eyes License Compatibility Check][🚎15-🪪-wfi]][🚎15-🪪-wf]
|
|
6
|
+
|
|
7
|
+
`if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know][✉️discord-invite], as I may have missed the [discord notification][✉️discord-invite].
|
|
16
8
|
|
|
17
9
|
---
|
|
18
10
|
|
|
19
|
-
|
|
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
|
+
|
|
13
|
+
[![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate at ko-fi.com][🖇kofi-img]][🖇kofi]
|
|
14
|
+
|
|
15
|
+
<details>
|
|
16
|
+
<summary>👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️</summary>
|
|
17
|
+
|
|
18
|
+
I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo).
|
|
19
|
+
|
|
20
|
+
</details>
|
|
21
|
+
|
|
22
|
+
## 🌻 Synopsis <a href="https://discord.gg/3qme4XHNKN"><img alt="Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/galtzo-floss/avatar-128px.svg" width="8%" align="right"/></a> <a href="https://ruby-toolbox.com"><img alt="ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5" src="https://logos.galtzo.com/assets/images/ruby-lang/avatar-128px.svg" width="8%" align="right"/></a>
|
|
20
23
|
|
|
21
24
|
The `omniauth-identity` gem provides a way for applications to utilize a
|
|
22
25
|
traditional username/password based authentication system without the need
|
|
@@ -26,61 +29,87 @@ basic construct for user management and then gets out of the way.
|
|
|
26
29
|
|
|
27
30
|
## 💡 Info you can shake a stick at
|
|
28
31
|
|
|
29
|
-
| Tokens to Remember
|
|
30
|
-
|
|
31
|
-
| Works with JRuby
|
|
32
|
-
| Works with
|
|
33
|
-
| Works with MRI Ruby
|
|
34
|
-
|
|
|
35
|
-
|
|
|
36
|
-
|
|
|
37
|
-
|
|
|
38
|
-
|
|
|
39
|
-
|
|
|
40
|
-
|
|
|
41
|
-
|
|
|
32
|
+
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|
|
33
|
+
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
34
|
+
| 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]|
|
|
35
|
+
| Works with Truffle Ruby | [![Truffle Ruby 22.3 Compat][💎truby-22.3i]][🚎truby-22.3-wf] [![Truffle Ruby 23.0 Compat][💎truby-23.0i]][🚎truby-23.0-wf] [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎truby-23.1-wf] <br/> [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf]|
|
|
36
|
+
| Works with MRI Ruby 4 | [![Ruby 4.0 Compat][💎ruby-4.0i]][🚎11-c-wf] [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
|
|
37
|
+
| 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]|
|
|
38
|
+
| Works with MRI Ruby 2 | [![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]|
|
|
39
|
+
| 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] |
|
|
40
|
+
| 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] |
|
|
41
|
+
| 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] |
|
|
42
|
+
| 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] |
|
|
43
|
+
| 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] |
|
|
44
|
+
| Maintainer 🎖️ | [![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 Maintainer][🚂maint-contact-img]][🚂maint-contact] [![My technical writing][💖💁🏼♂️devto-img]][💖💁🏼♂️devto] |
|
|
45
|
+
| `...` 💖 | [![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] |
|
|
42
46
|
|
|
43
|
-
|
|
47
|
+
### Compatibility
|
|
44
48
|
|
|
45
|
-
|
|
49
|
+
Compatible with MRI Ruby 2.4+, and concordant releases of JRuby, and TruffleRuby.
|
|
50
|
+
CI workflows and Appraisals are generated for MRI Ruby 2.4+.
|
|
51
|
+
This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
|
|
52
|
+
may be higher than the gem's runtime compatibility floor when legacy Rubies are
|
|
53
|
+
not practical for the current toolchain.
|
|
46
54
|
|
|
47
|
-
|
|
55
|
+
| 🚚 _Amazing_ test matrix was brought to you by | 🔎 appraisal2 🔎 and the color 💚 green 💚 |
|
|
56
|
+
|------------------------------------------------|--------------------------------------------------------|
|
|
57
|
+
| 👟 Check it out! | ✨ [github.com/appraisal-rb/appraisal2][💎appraisal2] ✨ |
|
|
48
58
|
|
|
49
|
-
|
|
59
|
+
### Federated DVCS
|
|
50
60
|
|
|
51
|
-
|
|
61
|
+
<details markdown="1">
|
|
62
|
+
<summary>Find this repo on federated forges (Coming soon!)</summary>
|
|
52
63
|
|
|
53
|
-
|
|
64
|
+
| Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
|
|
65
|
+
|-------------------------------------------------|-----------------------------------------------------------------------|---------------------------|--------------------------|---------------------------|--------------------------|------------------------------|
|
|
66
|
+
| 🧪 [omniauth/omniauth-identity on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix | ➖ |
|
|
67
|
+
| 🧊 [omniauth/omniauth-identity on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |
|
|
68
|
+
| 🐙 [omniauth/omniauth-identity on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix | [💚][gh-discussions] |
|
|
69
|
+
| 🎮️ [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] |
|
|
54
70
|
|
|
55
|
-
|
|
56
|
-
[stone_checksums][💎stone_checksums]. Be sure the gem you install hasn’t been tampered with
|
|
57
|
-
by following the instructions below.
|
|
71
|
+
</details>
|
|
58
72
|
|
|
59
|
-
|
|
73
|
+
[gh-discussions]: https://github.com/omniauth/omniauth-identity/discussions
|
|
60
74
|
|
|
61
|
-
|
|
62
|
-
gem cert --add <(curl -Ls https://raw.github.com/omniauth/omniauth-identity/main/certs/pboling.pem)
|
|
63
|
-
```
|
|
75
|
+
### Enterprise Support [](https://tidelift.com/subscription/pkg/rubygems-omniauth-identity?utm_source=rubygems-omniauth-identity&utm_medium=referral&utm_campaign=readme)
|
|
64
76
|
|
|
65
|
-
|
|
77
|
+
Available as part of the Tidelift Subscription.
|
|
66
78
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
79
|
+
<details markdown="1">
|
|
80
|
+
<summary>Need enterprise-level guarantees?</summary>
|
|
81
|
+
|
|
82
|
+
The maintainers of this and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source packages you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact packages you use.
|
|
70
83
|
|
|
71
|
-
|
|
84
|
+
[![Get help from me on Tidelift][🏙️entsup-tidelift-img]][🏙️entsup-tidelift]
|
|
72
85
|
|
|
73
|
-
|
|
86
|
+
- 💡Subscribe for support guarantees covering _all_ your FLOSS dependencies
|
|
87
|
+
- 💡Tidelift is part of [Sonar][🏙️entsup-tidelift-sonar]
|
|
88
|
+
- 💡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
|
|
74
89
|
|
|
75
|
-
|
|
90
|
+
Alternatively:
|
|
91
|
+
|
|
92
|
+
- [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
|
|
93
|
+
- [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork]
|
|
94
|
+
- [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor]
|
|
95
|
+
|
|
96
|
+
</details>
|
|
97
|
+
|
|
98
|
+
## ✨ Installation
|
|
99
|
+
|
|
100
|
+
Install the gem and add to the application's Gemfile by executing:
|
|
76
101
|
|
|
77
102
|
```console
|
|
78
|
-
bundle
|
|
103
|
+
bundle add omniauth-identity
|
|
79
104
|
```
|
|
80
105
|
|
|
81
|
-
|
|
106
|
+
If bundler is not being used to manage dependencies, install the gem by executing:
|
|
107
|
+
|
|
108
|
+
```console
|
|
109
|
+
gem install omniauth-identity
|
|
110
|
+
```
|
|
82
111
|
|
|
83
|
-
##
|
|
112
|
+
## ⚙️ Configuration
|
|
84
113
|
|
|
85
114
|
This gem is compatible with a wide range of Ruby versions and Ruby ORMs, as of May 2025, version 3.1.
|
|
86
115
|
|
|
@@ -94,14 +123,16 @@ This gem is compatible with a wide range of Ruby versions and Ruby ORMs, as of M
|
|
|
94
123
|
* mongoid 7.3, 7.4, 8.1, 9.0
|
|
95
124
|
* bson 4.12, 4.15, 5.0, HEAD
|
|
96
125
|
* sequel 5.86+
|
|
97
|
-
*
|
|
126
|
+
* rom-sql (Ruby Object Mapper) 3.7+
|
|
127
|
+
* At least 6 different database ORM adapters, which connect to 15 different database clients!
|
|
98
128
|
|
|
99
129
|
| Databases | Adapter Libraries |
|
|
100
|
-
|
|
130
|
+
|-----------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------|
|
|
101
131
|
| MySQL, MariaDB, PostgreSQL, SQLite | [ActiveRecord](https://guides.rubyonrails.org/active_record_basics.html) |
|
|
102
132
|
| CouchDB | [CouchPotato](https://github.com/langalex/couch_potato) |
|
|
103
133
|
| MongoDB | [Mongoid](https://github.com/mongodb/mongoid) |
|
|
104
134
|
| RethinkDB | [NoBrainer](http://nobrainer.io/) |
|
|
135
|
+
| ADO, Amalgalite, IBM_DB, JDBC, MySQL, MariaDB, ODBC, Oracle, PostgreSQL, SQLAnywhere, SQLite, and TinyTDS | [rom-sql](https://rom-rb.org/) |
|
|
105
136
|
| ADO, Amalgalite, IBM_DB, JDBC, MySQL, MariaDB, ODBC, Oracle, PostgreSQL, SQLAnywhere, SQLite, and TinyTDS | [Sequel](http://sequel.jeremyevans.net) |
|
|
106
137
|
|
|
107
138
|
## 🔧 Basic Usage
|
|
@@ -163,6 +194,7 @@ whatever else you will need.
|
|
|
163
194
|
```ruby
|
|
164
195
|
class SequelTestIdentity < Sequel::Model(:identities)
|
|
165
196
|
include ::OmniAuth::Identity::Models::Sequel
|
|
197
|
+
|
|
166
198
|
auth_key :email
|
|
167
199
|
# whatever else you want!
|
|
168
200
|
end
|
|
@@ -198,8 +230,10 @@ class Identity
|
|
|
198
230
|
property :email
|
|
199
231
|
property :password_digest
|
|
200
232
|
|
|
201
|
-
|
|
202
|
-
|
|
233
|
+
class << self
|
|
234
|
+
def where(search_hash)
|
|
235
|
+
CouchPotato.database.view(Identity.by_email(key: search_hash))
|
|
236
|
+
end
|
|
203
237
|
end
|
|
204
238
|
|
|
205
239
|
view :by_email, key: :email
|
|
@@ -224,9 +258,25 @@ end
|
|
|
224
258
|
|
|
225
259
|
### Ruby Object Mapper
|
|
226
260
|
|
|
227
|
-
|
|
261
|
+
[ROM](https://rom-rb.org/) is an ORM for pretty much every database.
|
|
262
|
+
|
|
263
|
+
Include the `OmniAuth::Identity::Models::Rom` mixin and specify
|
|
264
|
+
the `rom_container`, everything else is optional.
|
|
265
|
+
|
|
266
|
+
```ruby
|
|
267
|
+
class Identity
|
|
268
|
+
include OmniAuth::Identity::Models::Rom
|
|
269
|
+
|
|
270
|
+
# Configure the ROM container and relation
|
|
271
|
+
rom_container -> { MyDatabase.rom } # See spec/omniauth/identity/models/rom_spec.rb for example
|
|
272
|
+
rom_relation_name :identities # optional, defaults to :idneitities
|
|
273
|
+
owner_relation_name :owners # optional, for loading associated owner
|
|
274
|
+
auth_key :email # optional, defaults to :email
|
|
275
|
+
password_field :password_digest # optional, defaults to :password_digest
|
|
276
|
+
end
|
|
277
|
+
```
|
|
228
278
|
|
|
229
|
-
|
|
279
|
+
### Custom Auth Model
|
|
230
280
|
|
|
231
281
|
To use a class other than the default, specify the <tt>:model</tt> option to a
|
|
232
282
|
different class.
|
|
@@ -307,7 +357,7 @@ end
|
|
|
307
357
|
`locate_conditions` takes a `Proc` object, and must return a `Hash` object, which will be used
|
|
308
358
|
as the argument to the locate method for your ORM. The proc is evaluated in the
|
|
309
359
|
callback context, and has access to your `Identity` model (using `model`) and receives the request
|
|
310
|
-
object as a parameter. Note
|
|
360
|
+
object as a parameter. Note that `model.auth_key` defaults to `email`, but is also configurable.
|
|
311
361
|
|
|
312
362
|
Note: Be careful when customizing `locate_conditions`. The best way to modify the conditions is
|
|
313
363
|
to copy the default value, and then add to the hash. Removing the default condition will almost
|
|
@@ -334,6 +384,63 @@ option :locate_conditions, ->(req) { {model.auth_key => req.params["auth_key"]}
|
|
|
334
384
|
|
|
335
385
|
Please contribute some documentation if you have the gumption! The maintainer's time is limited, and sometimes the authors of PRs with new options don't update the _this_ readme. 😭
|
|
336
386
|
|
|
387
|
+
## 🦷 FLOSS Funding
|
|
388
|
+
|
|
389
|
+
While omniauth tools are free software and will always be, the project would benefit immensely from some funding.
|
|
390
|
+
Raising a monthly budget of... "dollars" would make the project more sustainable.
|
|
391
|
+
|
|
392
|
+
We welcome both individual and corporate sponsors! We also offer a
|
|
393
|
+
wide array of funding channels to account for your preferences.
|
|
394
|
+
Currently, [Open Collective][🖇osc] is our preferred funding platform.
|
|
395
|
+
|
|
396
|
+
**If you're working in a company that's making significant use of omniauth tools we'd
|
|
397
|
+
appreciate it if you suggest to your company to become a omniauth sponsor.**
|
|
398
|
+
|
|
399
|
+
You can support the development of omniauth tools via
|
|
400
|
+
[GitHub Sponsors][🖇sponsor],
|
|
401
|
+
[Liberapay][⛳liberapay],
|
|
402
|
+
[PayPal][🖇paypal],
|
|
403
|
+
[Open Collective][🖇osc]
|
|
404
|
+
and [Tidelift][🏙️entsup-tidelift].
|
|
405
|
+
|
|
406
|
+
| 📍 NOTE |
|
|
407
|
+
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
408
|
+
| If doing a sponsorship in the form of donation is problematic for your company <br/> from an accounting standpoint, we'd recommend the use of Tidelift, <br/> where you can get a support-like subscription instead. |
|
|
409
|
+
|
|
410
|
+
### Open Collective for Individuals
|
|
411
|
+
|
|
412
|
+
Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/omniauth#backer)]
|
|
413
|
+
|
|
414
|
+
NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
|
|
415
|
+
|
|
416
|
+
<!-- OPENCOLLECTIVE-INDIVIDUALS:START -->
|
|
417
|
+
No backers yet. Be the first!
|
|
418
|
+
<!-- OPENCOLLECTIVE-INDIVIDUALS:END -->
|
|
419
|
+
|
|
420
|
+
### Open Collective for Organizations
|
|
421
|
+
|
|
422
|
+
Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/omniauth#sponsor)]
|
|
423
|
+
|
|
424
|
+
NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
|
|
425
|
+
|
|
426
|
+
<!-- OPENCOLLECTIVE-ORGANIZATIONS:START -->
|
|
427
|
+
No sponsors yet. Be the first!
|
|
428
|
+
<!-- OPENCOLLECTIVE-ORGANIZATIONS:END -->
|
|
429
|
+
|
|
430
|
+
[kettle-readme-backers]: https://github.com/omniauth/omniauth-identity/blob/main/exe/kettle-readme-backers
|
|
431
|
+
|
|
432
|
+
### Another way to support open-source
|
|
433
|
+
|
|
434
|
+
I’m driven by a passion to foster a thriving open-source community – a space where people can tackle complex problems, no matter how small. Revitalizing libraries that have fallen into disrepair, and building new libraries focused on solving real-world challenges, are my passions. I was recently affected by layoffs, and the tech jobs market is unwelcoming. I’m reaching out here because your support would significantly aid my efforts to provide for my family, and my farm (11 🐔 chickens, 2 🐶 dogs, 3 🐰 rabbits, 8 🐈 cats).
|
|
435
|
+
|
|
436
|
+
If you work at a company that uses my work, please encourage them to support me as a corporate sponsor. My work on gems you use might show up in `bundle fund`.
|
|
437
|
+
|
|
438
|
+
I’m developing a new library, [floss_funding][🖇floss-funding-gem], designed to empower open-source developers like myself to get paid for the work we do, in a sustainable way. Please give it a look.
|
|
439
|
+
|
|
440
|
+
**[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
|
|
441
|
+
|
|
442
|
+
[![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate to my FLOSS efforts at ko-fi.com][🖇kofi-img]][🖇kofi] [![Donate to my FLOSS efforts using Patreon][🖇patreon-img]][🖇patreon]
|
|
443
|
+
|
|
337
444
|
## 🔐 Security
|
|
338
445
|
|
|
339
446
|
See [SECURITY.md][🔐security].
|
|
@@ -341,7 +448,7 @@ See [SECURITY.md][🔐security].
|
|
|
341
448
|
## 🤝 Contributing
|
|
342
449
|
|
|
343
450
|
If you need some ideas of where to help, you could work on adding more code coverage,
|
|
344
|
-
or if it is already 💯 (see [below](#code-coverage)) check [issues][🤝gh-issues]
|
|
451
|
+
or if it is already 💯 (see [below](#code-coverage)) check [issues][🤝gh-issues] or [PRs][🤝gh-pulls],
|
|
345
452
|
or use the gem and think about how it could be better.
|
|
346
453
|
|
|
347
454
|
We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
|
|
@@ -354,9 +461,16 @@ See [CONTRIBUTING.md][🤝contributing].
|
|
|
354
461
|
|
|
355
462
|
### Code Coverage
|
|
356
463
|
|
|
357
|
-
|
|
464
|
+
<details markdown="1">
|
|
465
|
+
<summary>Coverage service badges</summary>
|
|
466
|
+
|
|
467
|
+
[![Coverage Graph][🏀codecov-g]][🏀codecov]
|
|
468
|
+
|
|
469
|
+
[![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls]
|
|
470
|
+
|
|
471
|
+
[![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov]
|
|
358
472
|
|
|
359
|
-
|
|
473
|
+
</details>
|
|
360
474
|
|
|
361
475
|
### 🪇 Code of Conduct
|
|
362
476
|
|
|
@@ -369,130 +483,141 @@ chat rooms and mailing lists agrees to follow the [![Contributor Covenant 2.1][
|
|
|
369
483
|
|
|
370
484
|
Made with [contributors-img][🖐contrib-rocks].
|
|
371
485
|
|
|
372
|
-
|
|
486
|
+
Also see GitLab Contributors: [https://gitlab.com/omniauth/omniauth-identity/-/graphs/main][🚎contributors-gl]
|
|
373
487
|
|
|
374
|
-
<
|
|
488
|
+
<details>
|
|
489
|
+
<summary>⭐️ Star History</summary>
|
|
490
|
+
|
|
491
|
+
<a href="https://star-history.com/omniauth/omniauth-identity&Date">
|
|
375
492
|
<picture>
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
srcset="https://api.star-history.com/svg?repos=omniauth/omniauth-identity&type=Date"/>
|
|
380
|
-
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=omniauth/omniauth-identity&type=Date" />
|
|
493
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=omniauth/omniauth-identity&type=Date&theme=dark" />
|
|
494
|
+
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=omniauth/omniauth-identity&type=Date" />
|
|
495
|
+
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=omniauth/omniauth-identity&type=Date" />
|
|
381
496
|
</picture>
|
|
382
497
|
</a>
|
|
383
498
|
|
|
384
|
-
|
|
499
|
+
</details>
|
|
385
500
|
|
|
386
|
-
|
|
387
|
-
Violations of this scheme should be reported as bugs.
|
|
388
|
-
Specifically, if a minor or patch version is released that breaks backward compatibility,
|
|
389
|
-
a new version should be immediately released that restores compatibility.
|
|
390
|
-
Breaking changes to the public API will only be introduced with new major versions.
|
|
501
|
+
## 📌 Versioning
|
|
391
502
|
|
|
392
|
-
|
|
503
|
+
This library follows [![Semantic Versioning 2.0.0][📌semver-img]][📌semver] for its public API where practical.
|
|
504
|
+
For most applications, prefer the [Pessimistic Version Constraint][📌pvc] with two digits of precision.
|
|
393
505
|
|
|
394
|
-
|
|
506
|
+
For example:
|
|
395
507
|
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
508
|
+
```ruby
|
|
509
|
+
spec.add_dependency("omniauth-identity", "~> 3.0")
|
|
510
|
+
```
|
|
399
511
|
|
|
400
|
-
>
|
|
512
|
+
<details markdown="1">
|
|
513
|
+
<summary>📌 Is "Platform Support" part of the public API? More details inside.</summary>
|
|
401
514
|
|
|
402
|
-
|
|
515
|
+
Dropping support for a platform can be a breaking change for affected users.
|
|
516
|
+
If a release changes supported platforms, it should be called out clearly in the changelog and versioned with that impact in mind.
|
|
403
517
|
|
|
404
518
|
To get a better understanding of how SemVer is intended to work over a project's lifetime,
|
|
405
519
|
read this article from the creator of SemVer:
|
|
406
520
|
|
|
407
521
|
- ["Major Version Numbers are Not Sacred"][📌major-versions-not-sacred]
|
|
408
522
|
|
|
409
|
-
|
|
410
|
-
you can (and should) specify a dependency on these libraries using
|
|
411
|
-
the [Pessimistic Version Constraint][📌pvc] with two digits of precision.
|
|
412
|
-
|
|
413
|
-
For example:
|
|
414
|
-
|
|
415
|
-
```ruby
|
|
416
|
-
spec.add_dependency("omniauth-identity", "~> 3.1")
|
|
417
|
-
```
|
|
523
|
+
</details>
|
|
418
524
|
|
|
419
525
|
See [CHANGELOG.md][📌changelog] for a list of releases.
|
|
420
526
|
|
|
421
527
|
## 📄 License
|
|
422
528
|
|
|
423
529
|
The gem is available as open source under the terms of
|
|
424
|
-
the [MIT
|
|
425
|
-
See [LICENSE.txt][📄license] for the official [Copyright Notice][📄copyright-notice-explainer].
|
|
530
|
+
the [MIT](MIT.md) [![License: MIT][📄license-img]][📄license-ref].
|
|
426
531
|
|
|
427
532
|
### © Copyright
|
|
428
533
|
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
[
|
|
462
|
-
|
|
463
|
-
[⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay
|
|
534
|
+
See [LICENSE.md][📄license] for the official copyright notice.
|
|
535
|
+
|
|
536
|
+
<details markdown="1">
|
|
537
|
+
<summary>Copyright holders</summary>
|
|
538
|
+
|
|
539
|
+
- Copyright (c) 2025-2026 |7eter l-|. l3oling
|
|
540
|
+
|
|
541
|
+
</details>
|
|
542
|
+
|
|
543
|
+
## 🤑 A request for help
|
|
544
|
+
|
|
545
|
+
Maintainers have teeth and need to pay their dentists.
|
|
546
|
+
After getting laid off in an RIF in March, and encountering difficulty finding a new one,
|
|
547
|
+
I began spending most of my time building open source tools.
|
|
548
|
+
I'm hoping to be able to pay for my kids' health insurance this month,
|
|
549
|
+
so if you value the work I am doing, I need your support.
|
|
550
|
+
Please consider sponsoring me or the project.
|
|
551
|
+
|
|
552
|
+
To join the community or get help 👇️ Join the Discord.
|
|
553
|
+
|
|
554
|
+
[![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
|
|
555
|
+
|
|
556
|
+
To say "thanks!" ☝️ Join the Discord or 👇️ send money.
|
|
557
|
+
|
|
558
|
+
[![Sponsor omniauth/omniauth-identity 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]
|
|
559
|
+
|
|
560
|
+
### Please give the project a star ⭐ ♥.
|
|
561
|
+
|
|
562
|
+
Many parts of this project are actively managed by a [kettle-jem](https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/kettle-jem) smart template utilizing [StructuredMerge.org](https://structuredmerge.org) merge contracts.
|
|
563
|
+
|
|
564
|
+
Thanks for RTFM. ☺️
|
|
565
|
+
|
|
566
|
+
[⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
|
|
567
|
+
[⛳liberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611
|
|
464
568
|
[⛳liberapay]: https://liberapay.com/pboling/donate
|
|
569
|
+
[🖇osc-all-img]: https://img.shields.io/opencollective/all/omniauth
|
|
570
|
+
[🖇osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/omniauth
|
|
571
|
+
[🖇osc-backers-img]: https://img.shields.io/opencollective/backers/omniauth
|
|
572
|
+
[🖇osc-backers]: https://opencollective.com/omniauth#backer
|
|
573
|
+
[🖇osc-backers-i]: https://opencollective.com/omniauth/backers/badge.svg?style=flat
|
|
574
|
+
[🖇osc-sponsors]: https://opencollective.com/omniauth#sponsor
|
|
575
|
+
[🖇osc-sponsors-i]: https://opencollective.com/omniauth/sponsors/badge.svg?style=flat
|
|
576
|
+
[🖇osc-all-bottom-img]: https://img.shields.io/opencollective/all/omniauth?style=for-the-badge
|
|
577
|
+
[🖇osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/omniauth?style=for-the-badge
|
|
578
|
+
[🖇osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/omniauth?style=for-the-badge
|
|
579
|
+
[🖇osc]: https://opencollective.com/omniauth
|
|
465
580
|
[🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
|
|
581
|
+
[🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
|
|
466
582
|
[🖇sponsor]: https://github.com/sponsors/pboling
|
|
467
|
-
[🖇polar-img]: https://img.shields.io/badge/polar-donate-
|
|
583
|
+
[🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
|
|
468
584
|
[🖇polar]: https://polar.sh/pboling
|
|
469
|
-
[🖇kofi-img]: https://img.shields.io/badge/
|
|
470
|
-
[🖇kofi]: https://ko-fi.com/
|
|
471
|
-
[🖇patreon-img]: https://img.shields.io/badge/patreon-donate-
|
|
585
|
+
[🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
|
|
586
|
+
[🖇kofi]: https://ko-fi.com/pboling
|
|
587
|
+
[🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
|
|
472
588
|
[🖇patreon]: https://patreon.com/galtzo
|
|
473
|
-
[🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee
|
|
589
|
+
[🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
|
|
474
590
|
[🖇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
|
|
475
591
|
[🖇buyme]: https://www.buymeacoffee.com/pboling
|
|
592
|
+
[🖇paypal-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat&logo=paypal
|
|
593
|
+
[🖇paypal-bottom-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=for-the-badge&logo=paypal&color=0A0A0A
|
|
594
|
+
[🖇paypal]: https://www.paypal.com/paypalme/peterboling
|
|
595
|
+
[🖇floss-funding.dev]: https://floss-funding.dev
|
|
596
|
+
[🖇floss-funding-gem]: https://github.com/galtzo-floss/floss_funding
|
|
476
597
|
[✉️discord-invite]: https://discord.gg/3qme4XHNKN
|
|
477
|
-
[✉️discord-invite-img]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge
|
|
598
|
+
[✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
|
|
599
|
+
[✉️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
|
|
600
|
+
[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
|
|
478
601
|
|
|
479
602
|
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
|
|
480
603
|
[⛳️gem-namespace]: https://github.com/omniauth/omniauth-identity
|
|
481
|
-
[⛳️namespace-img]: https://img.shields.io/badge/namespace-
|
|
482
|
-
[⛳️gem-name]: https://
|
|
483
|
-
[⛳️name-img]: https://img.shields.io/badge/name-omniauth--identity-
|
|
484
|
-
[
|
|
485
|
-
[
|
|
486
|
-
[🚂
|
|
487
|
-
[🚂
|
|
604
|
+
[⛳️namespace-img]: https://img.shields.io/badge/namespace-Omniauth::Identity-3C2D2D.svg?style=square&logo=ruby&logoColor=white
|
|
605
|
+
[⛳️gem-name]: https://bestgems.org/gems/omniauth-identity
|
|
606
|
+
[⛳️name-img]: https://img.shields.io/badge/name-omniauth--identity-3C2D2D.svg?style=square&logo=rubygems&logoColor=red
|
|
607
|
+
[⛳️tag-img]: https://img.shields.io/github/tag/omniauth/omniauth-identity.svg
|
|
608
|
+
[⛳️tag]: https://github.com/omniauth/omniauth-identity/releases
|
|
609
|
+
[🚂maint-blog]: http://www.railsbling.com/tags/omniauth-identity
|
|
610
|
+
[🚂maint-blog-img]: https://img.shields.io/badge/blog-railsbling-0093D0.svg?style=for-the-badge&logo=rubyonrails&logoColor=orange
|
|
611
|
+
[🚂maint-contact]: http://www.railsbling.com/contact
|
|
612
|
+
[🚂maint-contact-img]: https://img.shields.io/badge/Contact-Maintainer-0093D0.svg?style=flat&logo=rubyonrails&logoColor=red
|
|
488
613
|
[💖🖇linkedin]: http://www.linkedin.com/in/peterboling
|
|
489
|
-
[💖🖇linkedin-img]: https://img.shields.io/badge/
|
|
490
|
-
[💖✌️wellfound]: https://
|
|
614
|
+
[💖🖇linkedin-img]: https://img.shields.io/badge/LinkedIn-Profile-0B66C2?style=flat&logo=newjapanprowrestling
|
|
615
|
+
[💖✌️wellfound]: https://wellfound.com/u/peter-boling
|
|
491
616
|
[💖✌️wellfound-img]: https://img.shields.io/badge/peter--boling-orange?style=flat&logo=wellfound
|
|
492
617
|
[💖💲crunchbase]: https://www.crunchbase.com/person/peter-boling
|
|
493
618
|
[💖💲crunchbase-img]: https://img.shields.io/badge/peter--boling-purple?style=flat&logo=crunchbase
|
|
494
619
|
[💖🐘ruby-mast]: https://ruby.social/@galtzo
|
|
495
|
-
[💖🐘ruby-mast-img]: https://img.shields.io/mastodon/follow/109447111526622197?domain=https
|
|
620
|
+
[💖🐘ruby-mast-img]: https://img.shields.io/mastodon/follow/109447111526622197?domain=https://ruby.social&style=flat&logo=mastodon&label=Ruby%20@galtzo
|
|
496
621
|
[💖🦋bluesky]: https://bsky.app/profile/galtzo.com
|
|
497
622
|
[💖🦋bluesky-img]: https://img.shields.io/badge/@galtzo.com-0285FF?style=flat&logo=bluesky&logoColor=white
|
|
498
623
|
[💖🌳linktree]: https://linktr.ee/galtzo
|
|
@@ -509,68 +634,72 @@ P.S. If you need help️, or want to say thanks, 👇 Join the Discord.
|
|
|
509
634
|
[👨🏼🏫expsup-upwork-img]: https://img.shields.io/badge/UpWork-13544E?style=for-the-badge&logo=Upwork&logoColor=white
|
|
510
635
|
[👨🏼🏫expsup-codementor]: https://www.codementor.io/peterboling?utm_source=github&utm_medium=button&utm_term=peterboling&utm_campaign=github
|
|
511
636
|
[👨🏼🏫expsup-codementor-img]: https://img.shields.io/badge/CodeMentor-Get_Help-1abc9c?style=for-the-badge&logo=CodeMentor&logoColor=white
|
|
512
|
-
[🏙️entsup-tidelift]: https://tidelift.com/subscription
|
|
637
|
+
[🏙️entsup-tidelift]: https://tidelift.com/subscription/pkg/rubygems-omniauth-identity?utm_source=rubygems-omniauth-identity&utm_medium=referral&utm_campaign=readme
|
|
513
638
|
[🏙️entsup-tidelift-img]: https://img.shields.io/badge/Tidelift_and_Sonar-Enterprise_Support-FD3456?style=for-the-badge&logo=sonar&logoColor=white
|
|
514
639
|
[🏙️entsup-tidelift-sonar]: https://blog.tidelift.com/tidelift-joins-sonar
|
|
515
640
|
[💁🏼♂️peterboling]: http://www.peterboling.com
|
|
516
641
|
[🚂railsbling]: http://www.railsbling.com
|
|
517
642
|
[📜src-gl-img]: https://img.shields.io/badge/GitLab-FBA326?style=for-the-badge&logo=Gitlab&logoColor=orange
|
|
518
|
-
[📜src-gl]: https://gitlab.com/omniauth/omniauth-identity
|
|
643
|
+
[📜src-gl]: https://gitlab.com/omniauth/omniauth-identity
|
|
519
644
|
[📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
|
|
520
645
|
[📜src-cb]: https://codeberg.org/omniauth/omniauth-identity
|
|
521
646
|
[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
|
|
522
647
|
[📜src-gh]: https://github.com/omniauth/omniauth-identity
|
|
523
648
|
[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
|
|
524
649
|
[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
|
|
525
|
-
[📜wiki]: https://
|
|
526
|
-
[📜wiki
|
|
527
|
-
[
|
|
650
|
+
[📜gl-wiki]: https://gitlab.com/omniauth/omniauth-identity/-/wikis/home
|
|
651
|
+
[📜gh-wiki]: https://github.com/omniauth/omniauth-identity/wiki
|
|
652
|
+
[📜gl-wiki-img]: https://img.shields.io/badge/wiki-gitlab-943CD2.svg?style=for-the-badge&logo=gitlab&logoColor=white
|
|
653
|
+
[📜gh-wiki-img]: https://img.shields.io/badge/wiki-github-943CD2.svg?style=for-the-badge&logo=github&logoColor=white
|
|
654
|
+
[👽dl-rank]: https://bestgems.org/gems/omniauth-identity
|
|
528
655
|
[👽dl-ranki]: https://img.shields.io/gem/rd/omniauth-identity.svg
|
|
529
|
-
[👽
|
|
530
|
-
[👽oss-helpi]: https://www.codetriage.com/omniauth/omniauth-identity/badges/users.svg
|
|
531
|
-
[👽version]: https://rubygems.org/gems/omniauth-identity
|
|
656
|
+
[👽version]: https://bestgems.org/gems/omniauth-identity
|
|
532
657
|
[👽versioni]: https://img.shields.io/gem/v/omniauth-identity.svg
|
|
533
|
-
[
|
|
534
|
-
[
|
|
535
|
-
[
|
|
536
|
-
[
|
|
537
|
-
[
|
|
538
|
-
[
|
|
539
|
-
[
|
|
540
|
-
[
|
|
541
|
-
[
|
|
542
|
-
[
|
|
543
|
-
[
|
|
544
|
-
[
|
|
545
|
-
[🚎
|
|
546
|
-
[🚎1-
|
|
658
|
+
[🏀qlty-mnt]: https://qlty.sh/gh/omniauth/projects/omniauth-identity
|
|
659
|
+
[🏀qlty-mnti]: https://qlty.sh/gh/omniauth/projects/omniauth-identity/maintainability.svg
|
|
660
|
+
[🏀qlty-cov]: https://qlty.sh/gh/omniauth/projects/omniauth-identity/metrics/code?sort=coverageRating
|
|
661
|
+
[🏀qlty-covi]: https://qlty.sh/gh/omniauth/projects/omniauth-identity/coverage.svg
|
|
662
|
+
[🏀codecov]: https://codecov.io/gh/omniauth/omniauth-identity
|
|
663
|
+
[🏀codecovi]: https://codecov.io/gh/omniauth/omniauth-identity/graph/badge.svg
|
|
664
|
+
[🏀coveralls]: https://coveralls.io/github/omniauth/omniauth-identity?branch=main
|
|
665
|
+
[🏀coveralls-img]: https://coveralls.io/repos/github/omniauth/omniauth-identity/badge.svg?branch=main
|
|
666
|
+
[🚎ruby-2.4-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/ruby-2.4.yml
|
|
667
|
+
[🚎ruby-2.5-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/ruby-2.5.yml
|
|
668
|
+
[🚎ruby-2.6-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/ruby-2.6.yml
|
|
669
|
+
[🚎ruby-2.7-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/ruby-2.7.yml
|
|
670
|
+
[🚎ruby-3.0-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/ruby-3.0.yml
|
|
671
|
+
[🚎ruby-3.1-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/ruby-3.1.yml
|
|
672
|
+
[🚎ruby-3.2-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/ruby-3.2.yml
|
|
673
|
+
[🚎ruby-3.3-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/ruby-3.3.yml
|
|
674
|
+
[🚎ruby-3.4-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/ruby-3.4.yml
|
|
675
|
+
[🚎jruby-9.2-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/jruby-9.2.yml
|
|
676
|
+
[🚎jruby-9.3-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/jruby-9.3.yml
|
|
677
|
+
[🚎jruby-9.4-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/jruby-9.4.yml
|
|
678
|
+
[🚎truby-22.3-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/truffleruby-22.3.yml
|
|
679
|
+
[🚎truby-23.0-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/truffleruby-23.0.yml
|
|
680
|
+
[🚎truby-23.1-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/truffleruby-23.1.yml
|
|
681
|
+
[🚎truby-24.2-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/truffleruby-24.2.yml
|
|
682
|
+
[🚎truby-25.0-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/truffleruby-25.0.yml
|
|
547
683
|
[🚎2-cov-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/coverage.yml
|
|
548
684
|
[🚎2-cov-wfi]: https://github.com/omniauth/omniauth-identity/actions/workflows/coverage.yml/badge.svg
|
|
549
685
|
[🚎3-hd-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/heads.yml
|
|
550
686
|
[🚎3-hd-wfi]: https://github.com/omniauth/omniauth-identity/actions/workflows/heads.yml/badge.svg
|
|
551
|
-
[🚎4-lg-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/legacy.yml
|
|
552
|
-
[🚎4-lg-wfi]: https://github.com/omniauth/omniauth-identity/actions/workflows/legacy.yml/badge.svg
|
|
553
687
|
[🚎5-st-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/style.yml
|
|
554
688
|
[🚎5-st-wfi]: https://github.com/omniauth/omniauth-identity/actions/workflows/style.yml/badge.svg
|
|
555
|
-
[🚎6-s-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/supported.yml
|
|
556
|
-
[🚎6-s-wfi]: https://github.com/omniauth/omniauth-identity/actions/workflows/supported.yml/badge.svg
|
|
557
|
-
[🚎7-us-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/unsupported.yml
|
|
558
|
-
[🚎7-us-wfi]: https://github.com/omniauth/omniauth-identity/actions/workflows/unsupported.yml/badge.svg
|
|
559
|
-
[🚎8-ho-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/hoary.yml
|
|
560
|
-
[🚎8-ho-wfi]: https://github.com/omniauth/omniauth-identity/actions/workflows/hoary.yml/badge.svg
|
|
561
689
|
[🚎9-t-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/truffle.yml
|
|
562
690
|
[🚎9-t-wfi]: https://github.com/omniauth/omniauth-identity/actions/workflows/truffle.yml/badge.svg
|
|
563
691
|
[🚎10-j-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/jruby.yml
|
|
564
692
|
[🚎10-j-wfi]: https://github.com/omniauth/omniauth-identity/actions/workflows/jruby.yml/badge.svg
|
|
565
693
|
[🚎11-c-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/current.yml
|
|
566
694
|
[🚎11-c-wfi]: https://github.com/omniauth/omniauth-identity/actions/workflows/current.yml/badge.svg
|
|
567
|
-
[🚎12-crh-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/
|
|
568
|
-
[🚎12-crh-wfi]: https://github.com/omniauth/omniauth-identity/actions/workflows/
|
|
569
|
-
[🚎13-🔒️-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/
|
|
570
|
-
[🚎13-🔒️-wfi]: https://github.com/omniauth/omniauth-identity/actions/workflows/
|
|
571
|
-
[🚎14-🔓️-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/
|
|
572
|
-
[🚎14-🔓️-wfi]: https://github.com/omniauth/omniauth-identity/actions/workflows/
|
|
573
|
-
[
|
|
695
|
+
[🚎12-crh-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/dep-heads.yml
|
|
696
|
+
[🚎12-crh-wfi]: https://github.com/omniauth/omniauth-identity/actions/workflows/dep-heads.yml/badge.svg
|
|
697
|
+
[🚎13-🔒️-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/locked_deps.yml
|
|
698
|
+
[🚎13-🔒️-wfi]: https://github.com/omniauth/omniauth-identity/actions/workflows/locked_deps.yml/badge.svg
|
|
699
|
+
[🚎14-🔓️-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/unlocked_deps.yml
|
|
700
|
+
[🚎14-🔓️-wfi]: https://github.com/omniauth/omniauth-identity/actions/workflows/unlocked_deps.yml/badge.svg
|
|
701
|
+
[🚎15-🪪-wf]: https://github.com/omniauth/omniauth-identity/actions/workflows/license-eye.yml
|
|
702
|
+
[🚎15-🪪-wfi]: https://github.com/omniauth/omniauth-identity/actions/workflows/license-eye.yml/badge.svg
|
|
574
703
|
[💎ruby-2.4i]: https://img.shields.io/badge/Ruby-2.4-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
|
|
575
704
|
[💎ruby-2.5i]: https://img.shields.io/badge/Ruby-2.5-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
|
|
576
705
|
[💎ruby-2.6i]: https://img.shields.io/badge/Ruby-2.6-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
|
|
@@ -579,13 +708,16 @@ P.S. If you need help️, or want to say thanks, 👇 Join the Discord.
|
|
|
579
708
|
[💎ruby-3.1i]: https://img.shields.io/badge/Ruby-3.1-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
580
709
|
[💎ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
581
710
|
[💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
711
|
+
[💎ruby-3.4i]: https://img.shields.io/badge/Ruby-3.4-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
712
|
+
[💎ruby-4.0i]: https://img.shields.io/badge/Ruby-4.0-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
582
713
|
[💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
|
|
583
714
|
[💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
|
|
584
715
|
[💎truby-22.3i]: https://img.shields.io/badge/Truffle_Ruby-22.3-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
585
716
|
[💎truby-23.0i]: https://img.shields.io/badge/Truffle_Ruby-23.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
586
717
|
[💎truby-23.1i]: https://img.shields.io/badge/Truffle_Ruby-23.1-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
718
|
+
[💎truby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
719
|
+
[💎truby-25.0i]: https://img.shields.io/badge/Truffle_Ruby-25.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
587
720
|
[💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
|
|
588
|
-
[💎truby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD-34BCB1?style=for-the-badge&logo=ruby&logoColor=blue
|
|
589
721
|
[💎jruby-9.2i]: https://img.shields.io/badge/JRuby-9.2-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
590
722
|
[💎jruby-9.3i]: https://img.shields.io/badge/JRuby-9.3-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
591
723
|
[💎jruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
@@ -593,37 +725,59 @@ P.S. If you need help️, or want to say thanks, 👇 Join the Discord.
|
|
|
593
725
|
[💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
|
|
594
726
|
[🤝gh-issues]: https://github.com/omniauth/omniauth-identity/issues
|
|
595
727
|
[🤝gh-pulls]: https://github.com/omniauth/omniauth-identity/pulls
|
|
596
|
-
[🤝
|
|
597
|
-
[
|
|
728
|
+
[🤝gl-issues]: https://gitlab.com/omniauth/omniauth-identity/-/issues
|
|
729
|
+
[🤝gl-pulls]: https://gitlab.com/omniauth/omniauth-identity/-/merge_requests
|
|
730
|
+
[🤝cb-issues]: https://codeberg.org/omniauth/omniauth-identity/issues
|
|
731
|
+
[🤝cb-pulls]: https://codeberg.org/omniauth/omniauth-identity/pulls
|
|
732
|
+
[🤝cb-donate]: https://donate.codeberg.org/
|
|
733
|
+
[🤝contributing]: https://github.com/omniauth/omniauth-identity/blob/main/CONTRIBUTING.md
|
|
734
|
+
[🏀codecov-g]: https://codecov.io/gh/omniauth/omniauth-identity/graph/badge.svg
|
|
598
735
|
[🖐contrib-rocks]: https://contrib.rocks
|
|
599
736
|
[🖐contributors]: https://github.com/omniauth/omniauth-identity/graphs/contributors
|
|
600
737
|
[🖐contributors-img]: https://contrib.rocks/image?repo=omniauth/omniauth-identity
|
|
601
738
|
[🚎contributors-gl]: https://gitlab.com/omniauth/omniauth-identity/-/graphs/main
|
|
602
|
-
[🪇conduct]: CODE_OF_CONDUCT.md
|
|
739
|
+
[🪇conduct]: https://github.com/omniauth/omniauth-identity/blob/main/CODE_OF_CONDUCT.md
|
|
603
740
|
[🪇conduct-img]: https://img.shields.io/badge/Contributor_Covenant-2.1-259D6C.svg
|
|
604
741
|
[📌pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
|
|
605
742
|
[📌semver]: https://semver.org/spec/v2.0.0.html
|
|
606
743
|
[📌semver-img]: https://img.shields.io/badge/semver-2.0.0-259D6C.svg?style=flat
|
|
607
744
|
[📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
|
|
608
745
|
[📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
|
|
609
|
-
[📌changelog]: CHANGELOG.md
|
|
746
|
+
[📌changelog]: https://github.com/omniauth/omniauth-identity/blob/main/CHANGELOG.md
|
|
610
747
|
[📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
|
|
611
748
|
[📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat
|
|
612
|
-
[📌gitmoji]:https://gitmoji.dev
|
|
613
|
-
[📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20
|
|
749
|
+
[📌gitmoji]: https://gitmoji.dev
|
|
750
|
+
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
614
751
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
615
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.
|
|
616
|
-
[🔐security]: SECURITY.md
|
|
752
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.397-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
753
|
+
[🔐security]: https://github.com/omniauth/omniauth-identity/blob/main/SECURITY.md
|
|
617
754
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
618
755
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
619
|
-
[📄license]: LICENSE.
|
|
620
|
-
[📄license-ref]:
|
|
756
|
+
[📄license]: LICENSE.md
|
|
757
|
+
[📄license-ref]: MIT.md
|
|
621
758
|
[📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
|
|
759
|
+
[📄license-compat]: https://www.apache.org/legal/resolved.html#category-a
|
|
760
|
+
[📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-✓-259D6C.svg?style=flat&logo=Apache
|
|
761
|
+
|
|
622
762
|
[📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
|
|
623
763
|
[📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
|
|
624
764
|
[🚎yard-current]: http://rubydoc.info/gems/omniauth-identity
|
|
625
765
|
[🚎yard-head]: https://omniauth-identity.galtzo.com
|
|
626
|
-
[💎stone_checksums]: https://github.com/
|
|
627
|
-
[💎SHA_checksums]: https://
|
|
766
|
+
[💎stone_checksums]: https://github.com/galtzo-floss/stone_checksums
|
|
767
|
+
[💎SHA_checksums]: https://gitlab.com/omniauth/omniauth-identity/-/tree/main/checksums
|
|
628
768
|
[💎rlts]: https://github.com/rubocop-lts/rubocop-lts
|
|
629
|
-
[💎rlts-img]: https://img.shields.io/badge/code_style_
|
|
769
|
+
[💎rlts-img]: https://img.shields.io/badge/code_style_&_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white
|
|
770
|
+
[💎appraisal2]: https://github.com/appraisal-rb/appraisal2
|
|
771
|
+
[💎appraisal2-img]: https://img.shields.io/badge/appraised_by-appraisal2-34495e.svg?plastic&logo=ruby&logoColor=white
|
|
772
|
+
[💎d-in-dvcs]: https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/
|
|
773
|
+
|
|
774
|
+
<!-- kettle-jem:metadata:start -->
|
|
775
|
+
| Field | Value |
|
|
776
|
+
|---|---|
|
|
777
|
+
| Package | omniauth-identity |
|
|
778
|
+
| Description | 🫵 Traditional username/password based authentication system for OmniAuth |
|
|
779
|
+
| Homepage | https://github.com/omniauth/omniauth-identity |
|
|
780
|
+
| Source | https://github.com/omniauth/omniauth-identity/tree/v3.1.5 |
|
|
781
|
+
| License | `MIT` |
|
|
782
|
+
| Funding | https://github.com/sponsors/pboling, https://issuehunt.io/u/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/omniauth, https://patreon.com/galtzo, https://polar.sh/pboling, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/omniauth-identity, https://www.buymeacoffee.com/pboling |
|
|
783
|
+
<!-- kettle-jem:metadata:end -->
|