sorcery-jwt 0.1.13 → 0.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
- data/.github/workflows/ci.yml +16 -0
- data/CHANGELOG.md +34 -0
- data/CODE_OF_CONDUCT.md +1 -1
- data/Gemfile.lock +69 -42
- data/LICENSE.txt +1 -1
- data/PLAN.md +94 -0
- data/lib/sorcery/controller/submodules/jwt.rb +4 -3
- data/lib/sorcery/jwt/version.rb +1 -1
- data/lib/sorcery/model/submodules/jwt.rb +4 -3
- data/mise.toml +2 -0
- data/sorcery-jwt.gemspec +8 -14
- metadata +14 -40
- data/.travis.yml +0 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 06d8787815dcfcbf9652ed2a264e817bf5a0b7e9f411069ac8df1d8059826824
|
|
4
|
+
data.tar.gz: 9d51d9a8b2b516bfa0f3953e3fb6ba14947faa4c83405a7d2d02e734dd7efec0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1cf6e7c1459975031eacc72405acc288a1de4396ee6c415862b475ad0bc2ec9fa3f164d17cec139960243c7eab913ad436cf55ecf06959e200d6d59d483d4bce
|
|
7
|
+
data.tar.gz: fe7ec5f7c97409b00d290a595315b5431fb6a1182d06e69053b5a065e1995d213732e4c730175c7a2ab7bf48068129aa05303f1ca700c33150dded768aab5538
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.2.0 (2026-09-03)
|
|
4
|
+
|
|
5
|
+
### Security
|
|
6
|
+
|
|
7
|
+
- **Fix auth bypass**: a validly-signed token without `id`/`email` claims hit
|
|
8
|
+
`find_by({})`, which returns the first user in the table. `login_from_jwt`
|
|
9
|
+
now rejects such tokens outright.
|
|
10
|
+
- `login_from_jwt` now requires the token's `email` claim to match the
|
|
11
|
+
looked-up user's email.
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
|
|
15
|
+
- The model submodule now registers correctly on modern Rubies. The included
|
|
16
|
+
hook called `sorcery_config.class_eval` on a Config *instance*, which was
|
|
17
|
+
never a valid Ruby call; in applications, sorcery's `rescue NameError`
|
|
18
|
+
silently skipped the submodule, leaving `issue_token`/`decode_token`
|
|
19
|
+
undefined at runtime. The hook now uses `singleton_class.class_eval`.
|
|
20
|
+
- Removed an `include InstanceMethods` reference to a module that never
|
|
21
|
+
existed (it resolved to sorcery's core `InstanceMethods` by accident).
|
|
22
|
+
- `token_valid?` no longer depends on ActiveSupport (`.present?`).
|
|
23
|
+
- Failed JWT authentication sets `@current_user` to `nil` (sorcery
|
|
24
|
+
convention) instead of `false`.
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
|
|
28
|
+
- Spec suite covering issuance, decoding, expiry, tamper rejection (wrong
|
|
29
|
+
secret/algorithm), the claim contract, and controller login paths.
|
|
30
|
+
- CI via GitHub Actions.
|
|
31
|
+
|
|
32
|
+
## 0.1.13 (2022-02-02)
|
|
33
|
+
|
|
34
|
+
- Last release of the original series.
|
data/CODE_OF_CONDUCT.md
CHANGED
|
@@ -55,7 +55,7 @@ further defined and clarified by project maintainers.
|
|
|
55
55
|
## Enforcement
|
|
56
56
|
|
|
57
57
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
|
58
|
-
reported by contacting the project team at
|
|
58
|
+
reported by contacting the project team at . All
|
|
59
59
|
complaints will be reviewed and investigated and will result in a response that
|
|
60
60
|
is deemed necessary and appropriate to the circumstances. The project team is
|
|
61
61
|
obligated to maintain confidentiality with regard to the reporter of an incident.
|
data/Gemfile.lock
CHANGED
|
@@ -1,64 +1,91 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
sorcery-jwt (0.
|
|
4
|
+
sorcery-jwt (0.2.0)
|
|
5
5
|
jwt (>= 1.0, < 3.0)
|
|
6
|
-
sorcery (>= 0.13, < 0.
|
|
6
|
+
sorcery (>= 0.13, < 0.17)
|
|
7
7
|
|
|
8
8
|
GEM
|
|
9
9
|
remote: https://rubygems.org/
|
|
10
10
|
specs:
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
11
|
+
anonymous_loader (0.1.3)
|
|
12
|
+
version_gem (~> 1.1, >= 1.1.14)
|
|
13
|
+
auth-sanitizer (0.2.3)
|
|
14
|
+
version_gem (~> 1.1, >= 1.1.14)
|
|
15
|
+
base64 (0.3.0)
|
|
16
|
+
bcrypt (3.1.22)
|
|
17
|
+
bigdecimal (4.1.2)
|
|
18
|
+
diff-lcs (1.6.2)
|
|
19
|
+
faraday (2.14.3)
|
|
20
|
+
faraday-net_http (>= 2.0, < 3.5)
|
|
21
|
+
json
|
|
22
|
+
logger
|
|
23
|
+
faraday-net_http (3.4.4)
|
|
24
|
+
net-http (~> 0.5)
|
|
25
|
+
hashie (5.1.0)
|
|
26
|
+
logger
|
|
27
|
+
json (2.21.2)
|
|
28
|
+
jwt (2.10.3)
|
|
29
|
+
base64
|
|
30
|
+
logger (1.7.0)
|
|
31
|
+
multi_xml (0.9.1)
|
|
32
|
+
bigdecimal (>= 3.1, < 5)
|
|
33
|
+
net-http (0.9.1)
|
|
34
|
+
uri (>= 0.11.1)
|
|
35
|
+
oauth (1.1.8)
|
|
36
|
+
anonymous_loader (~> 0.1, >= 0.1.3)
|
|
37
|
+
auth-sanitizer (~> 0.2, >= 0.2.3)
|
|
38
|
+
base64 (~> 0.1)
|
|
39
|
+
oauth-tty (~> 1.0, >= 1.0.13)
|
|
40
|
+
snaky_hash (~> 2.0, >= 2.0.7)
|
|
41
|
+
version_gem (~> 1.1, >= 1.1.14)
|
|
42
|
+
oauth-tty (1.0.13)
|
|
43
|
+
anonymous_loader (~> 0.1, >= 0.1.3)
|
|
44
|
+
auth-sanitizer (~> 0.2, >= 0.2.3)
|
|
45
|
+
version_gem (~> 1.1, >= 1.1.14)
|
|
46
|
+
oauth2 (2.0.25)
|
|
47
|
+
anonymous_loader (~> 0.1, >= 0.1.3)
|
|
48
|
+
auth-sanitizer (~> 0.2, >= 0.2.3)
|
|
49
|
+
faraday (>= 0.17.3, < 4.0)
|
|
50
|
+
jwt (>= 1.0, < 4.0)
|
|
51
|
+
logger (~> 1.2)
|
|
26
52
|
multi_xml (~> 0.5)
|
|
27
|
-
rack (>= 1.2, <
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
rspec-
|
|
36
|
-
|
|
37
|
-
rspec-
|
|
38
|
-
rspec-
|
|
39
|
-
rspec-support (~> 3.8.0)
|
|
40
|
-
rspec-expectations (3.8.2)
|
|
53
|
+
rack (>= 1.2, < 4)
|
|
54
|
+
snaky_hash (~> 2.0, >= 2.0.7)
|
|
55
|
+
version_gem (~> 1.1, >= 1.1.14)
|
|
56
|
+
rack (3.2.7)
|
|
57
|
+
rake (13.4.2)
|
|
58
|
+
rspec (3.13.2)
|
|
59
|
+
rspec-core (~> 3.13.0)
|
|
60
|
+
rspec-expectations (~> 3.13.0)
|
|
61
|
+
rspec-mocks (~> 3.13.0)
|
|
62
|
+
rspec-core (3.13.6)
|
|
63
|
+
rspec-support (~> 3.13.0)
|
|
64
|
+
rspec-expectations (3.13.5)
|
|
41
65
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
42
|
-
rspec-support (~> 3.
|
|
43
|
-
rspec-mocks (3.8
|
|
66
|
+
rspec-support (~> 3.13.0)
|
|
67
|
+
rspec-mocks (3.13.8)
|
|
44
68
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
45
|
-
rspec-support (~> 3.
|
|
46
|
-
rspec-support (3.
|
|
47
|
-
|
|
48
|
-
|
|
69
|
+
rspec-support (~> 3.13.0)
|
|
70
|
+
rspec-support (3.13.7)
|
|
71
|
+
snaky_hash (2.0.7)
|
|
72
|
+
hashie (>= 0.1.0, < 6)
|
|
73
|
+
version_gem (~> 1.1, >= 1.1.14)
|
|
74
|
+
sorcery (0.16.5)
|
|
49
75
|
bcrypt (~> 3.1)
|
|
50
|
-
oauth (
|
|
51
|
-
oauth2 (~>
|
|
76
|
+
oauth (>= 0.6)
|
|
77
|
+
oauth2 (~> 2.0)
|
|
78
|
+
uri (1.1.1)
|
|
79
|
+
version_gem (1.1.15)
|
|
52
80
|
|
|
53
81
|
PLATFORMS
|
|
54
82
|
ruby
|
|
83
|
+
x86_64-linux
|
|
55
84
|
|
|
56
85
|
DEPENDENCIES
|
|
57
|
-
bundler (~> 1.16)
|
|
58
|
-
pry (~> 0.10.0)
|
|
59
86
|
rake (~> 13.0)
|
|
60
87
|
rspec (~> 3.0)
|
|
61
88
|
sorcery-jwt!
|
|
62
89
|
|
|
63
90
|
BUNDLED WITH
|
|
64
|
-
|
|
91
|
+
2.6.9
|
data/LICENSE.txt
CHANGED
data/PLAN.md
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Sorcery::Jwt — Completion plan (1.0.0, no rewrite)
|
|
2
|
+
|
|
3
|
+
Goal: ship 1.0.0 = the **existing API**, bug-fixed, tested, CI'd, compatible
|
|
4
|
+
with current sorcery. No architectural changes. Everything that would break
|
|
5
|
+
the public API is deferred (§5).
|
|
6
|
+
|
|
7
|
+
Public API frozen as-is (from `0.1.13`):
|
|
8
|
+
`issue_token(payload)` · `decode_token(token)` · `token_valid?(token)` ·
|
|
9
|
+
`login_from_jwt` (login source) · `login_and_issue_token(*credentials)` ·
|
|
10
|
+
token claims `id` + `email` · config: `jwt_secret`, `jwt_algorithm`,
|
|
11
|
+
`session_expiry`.
|
|
12
|
+
|
|
13
|
+
Current version `0.1.13`. Target `1.0.0`. Est. **~3 days**.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Phase 0 — Environment & packaging *(~0.5 day)*
|
|
18
|
+
|
|
19
|
+
- [ ] Install Ruby 3.2+ (none on this machine).
|
|
20
|
+
- [ ] Refresh `Gemfile.lock` on modern Bundler; drop `spec.add_development_dependency "bundler"`.
|
|
21
|
+
- [ ] Fill gemspec: `authors`, `email`, `description`, `metadata[...]`
|
|
22
|
+
(`homepage_uri`, `source_code_uri`, `changelog_uri`).
|
|
23
|
+
- [ ] Dependency check: gemspec allows `sorcery (>= 0.13, < 0.17)` and
|
|
24
|
+
`jwt (>= 1.0, < 3.0)`. Latest sorcery is **0.18.0** (Dec 2025, needs
|
|
25
|
+
Ruby ≥ 3.2). Plan: test 0.16.5 / 0.17 / 0.18, widen the range to what
|
|
26
|
+
CI proves. Keep `jwt < 3.0` unless 3.x is proven stable.
|
|
27
|
+
|
|
28
|
+
## Phase 1 — Bug fixes, API unchanged *(~0.5 day)*
|
|
29
|
+
|
|
30
|
+
All fixes are in-place; no caller-visible changes except corrected behavior.
|
|
31
|
+
|
|
32
|
+
- [ ] **Auth bypass** (`login_from_jwt`): `decoded_token.first.slice("id",
|
|
33
|
+
"email")` can be `{}` for a validly-signed token → `find_by({})`
|
|
34
|
+
returns the first user in the table. Fix: reject empty slice before
|
|
35
|
+
lookup (~2 lines). This is the only security-critical item.
|
|
36
|
+
- [ ] `token_valid?`: `.present?` is an undeclared ActiveSupport dependency.
|
|
37
|
+
Replace with a plain truthy check; add spec proving it works without
|
|
38
|
+
ActiveSupport loaded.
|
|
39
|
+
- [ ] Failed JWT login sets `@current_user = false` → `nil` (sorcery
|
|
40
|
+
convention).
|
|
41
|
+
- [ ] Keep the `JWT::ExpiredSignature` rescue clause (redundant on jwt 2.x,
|
|
42
|
+
correct on 1.x — harmless either way).
|
|
43
|
+
|
|
44
|
+
## Phase 2 — Test suite *(~1 day, the long pole)*
|
|
45
|
+
|
|
46
|
+
- [ ] PORO test doubles, not a dummy Rails app: stub `User#find_by` /
|
|
47
|
+
`authenticate`, fake controller with stubbed `request.headers`.
|
|
48
|
+
Time-box **half a day**; if sorcery's Model included-hook fights a
|
|
49
|
+
PORO, mirror sorcery's own spec helper pattern instead.
|
|
50
|
+
- [ ] Specs (all public methods + failure modes):
|
|
51
|
+
- issue → decode round-trip; `exp` set and enforced
|
|
52
|
+
- wrong secret / wrong algorithm → rejected
|
|
53
|
+
- **missing claims → no login** (bypass regression test)
|
|
54
|
+
- valid sig, user not in DB → no login
|
|
55
|
+
- `token_valid?` without ActiveSupport
|
|
56
|
+
- `login_and_issue_token` bad credentials → nil, no `current_user`
|
|
57
|
+
- missing/malformed Authorization header → no login, no exception
|
|
58
|
+
- [ ] **Ship `0.2.0`** here: tested + security fix for the existing user base
|
|
59
|
+
(95K downloads on 0.1.13), zero API break. Don't hold it for 1.0.
|
|
60
|
+
|
|
61
|
+
## Phase 3 — Compat verification + CI *(~0.5 day)*
|
|
62
|
+
|
|
63
|
+
- [ ] Replace `.travis.yml` with GitHub Actions: `bundle exec rspec` on
|
|
64
|
+
Ruby 3.2 / 3.3 / 3.4 × sorcery 0.16.5 / 0.17 / 0.18 (or appraisal).
|
|
65
|
+
- [ ] Fix whatever breaks on sorcery 0.17/0.18 (candidate:
|
|
66
|
+
`Config.login_sources` internals, `Time.now` usage).
|
|
67
|
+
- [ ] Set final dependency ranges from what CI proves green.
|
|
68
|
+
|
|
69
|
+
## Phase 4 — Docs + release *(~0.5 day)*
|
|
70
|
+
|
|
71
|
+
- [ ] README: claim contract (`id` + `email` required in payload), config
|
|
72
|
+
reference, security notes (no built-in revocation — link
|
|
73
|
+
waiting-for-dev revocation strategies), upstream note (sorcery v1
|
|
74
|
+
plans an official JWT plugin).
|
|
75
|
+
- [ ] `CHANGELOG.md` 0.1.13 → 1.0.0: framing = same API, bugs fixed, suite +
|
|
76
|
+
CI added, current sorcery supported. No breaking changes from 0.1.13.
|
|
77
|
+
- [ ] `bundle exec rake build`, install locally, smoke test.
|
|
78
|
+
- [ ] Tag `v1.0.0`, `gem push` (hayfever owns the rubygems slot).
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 5. Explicitly deferred (API-breaking — out of scope for 1.0)
|
|
83
|
+
|
|
84
|
+
From the earlier review; revisit only if upstream v1 stalls indefinitely:
|
|
85
|
+
|
|
86
|
+
- `token_version` revocation (logout / password-change invalidation)
|
|
87
|
+
- Refresh tokens with rotation + reuse detection
|
|
88
|
+
- `sub` / `iat` / `jti` claims, `exp` leeway, email decoupling
|
|
89
|
+
- `authenticate_from_token` encapsulation (decode contract stays as-is)
|
|
90
|
+
|
|
91
|
+
Endgame note: upstream sorcery is active (commits through mid-2026, V1
|
|
92
|
+
roadmap on main) and plans an official `sorcery-jwt` plugin for v1 — same
|
|
93
|
+
gem name we own. After 1.0, talk to maintainers (history in
|
|
94
|
+
sorcery-rework#9) about handover vs. parallel.
|
|
@@ -11,13 +11,14 @@ module Sorcery
|
|
|
11
11
|
protected
|
|
12
12
|
|
|
13
13
|
def login_from_jwt
|
|
14
|
-
|
|
14
|
+
claims = decoded_token.first.slice("id", "email")
|
|
15
|
+
return @current_user = nil if claims.empty?
|
|
15
16
|
|
|
16
|
-
@current_user = user_class.find_by(
|
|
17
|
+
@current_user = user_class.find_by(claims)
|
|
17
18
|
auto_login(@current_user) if @current_user
|
|
18
19
|
@current_user
|
|
19
20
|
rescue JWT::DecodeError, JWT::ExpiredSignature
|
|
20
|
-
@current_user =
|
|
21
|
+
@current_user = nil
|
|
21
22
|
end
|
|
22
23
|
|
|
23
24
|
def login_and_issue_token(*credentials)
|
data/lib/sorcery/jwt/version.rb
CHANGED
|
@@ -6,7 +6,9 @@ module Sorcery
|
|
|
6
6
|
module Submodules
|
|
7
7
|
module Jwt
|
|
8
8
|
def self.included(base)
|
|
9
|
-
|
|
9
|
+
# Define the jwt accessors on the config instance's singleton class;
|
|
10
|
+
# Config#class_eval is not a valid Ruby call.
|
|
11
|
+
base.sorcery_config.singleton_class.class_eval do
|
|
10
12
|
# Secret used to encode JWTs. Should correspond to the type needed by the algorithm used.
|
|
11
13
|
attr_accessor :jwt_secret
|
|
12
14
|
# Type of the algorithm used to encode JWTs. Corresponds to the options available in jwt/ruby-jwt.
|
|
@@ -25,7 +27,6 @@ module Sorcery
|
|
|
25
27
|
base.sorcery_config.after_config << :validate_secret_defined
|
|
26
28
|
|
|
27
29
|
base.extend(ClassMethods)
|
|
28
|
-
base.send(:include, InstanceMethods)
|
|
29
30
|
end
|
|
30
31
|
|
|
31
32
|
module ClassMethods
|
|
@@ -39,7 +40,7 @@ module Sorcery
|
|
|
39
40
|
end
|
|
40
41
|
|
|
41
42
|
def token_valid?(token)
|
|
42
|
-
decode_token(token)
|
|
43
|
+
!!decode_token(token)
|
|
43
44
|
rescue JWT::DecodeError, JWT::ExpiredSignature
|
|
44
45
|
false
|
|
45
46
|
end
|
data/mise.toml
ADDED
data/sorcery-jwt.gemspec
CHANGED
|
@@ -6,22 +6,18 @@ Gem::Specification.new do |spec|
|
|
|
6
6
|
spec.name = "sorcery-jwt"
|
|
7
7
|
spec.version = Sorcery::Jwt::VERSION
|
|
8
8
|
spec.authors = ["Hayden Luckenbach"]
|
|
9
|
-
spec.email = ["hluckenb@gmail.com"]
|
|
10
9
|
|
|
11
10
|
spec.summary = "Jwt extension for the Sorcery authentication library"
|
|
12
|
-
spec.description = ""
|
|
11
|
+
spec.description = "Adds JWT issuance and authentication to the Sorcery " \
|
|
12
|
+
"authentication library, for API-only Rails apps."
|
|
13
13
|
spec.homepage = "https://github.com/hayfever/sorcery-jwt"
|
|
14
14
|
spec.license = "MIT"
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
# else
|
|
22
|
-
# raise "RubyGems 2.0 or newer is required to protect against " \
|
|
23
|
-
# "public gem pushes."
|
|
24
|
-
# end
|
|
16
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
|
17
|
+
spec.metadata["source_code_uri"] = spec.homepage
|
|
18
|
+
spec.metadata["changelog_uri"] = "#{spec.homepage}/CHANGELOG.md"
|
|
19
|
+
|
|
20
|
+
spec.required_ruby_version = ">= 3.0"
|
|
25
21
|
|
|
26
22
|
# Specify which files should be added to the gem when it is released.
|
|
27
23
|
# The `git ls-files -z` loads the files in the RubyGem that have been
|
|
@@ -36,11 +32,9 @@ Gem::Specification.new do |spec|
|
|
|
36
32
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
37
33
|
spec.require_paths = ["lib"]
|
|
38
34
|
|
|
39
|
-
spec.add_development_dependency "bundler", ">= 2.1.0"
|
|
40
|
-
spec.add_development_dependency "pry", "~> 0.10.0"
|
|
41
35
|
spec.add_development_dependency "rake", "~> 13.0"
|
|
42
36
|
spec.add_development_dependency "rspec", "~> 3.0"
|
|
43
37
|
|
|
44
38
|
spec.add_runtime_dependency "jwt", ">= 1.0", "< 3.0"
|
|
45
39
|
spec.add_runtime_dependency "sorcery", ">= 0.13", "< 0.17"
|
|
46
|
-
end
|
|
40
|
+
end
|
metadata
CHANGED
|
@@ -1,43 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sorcery-jwt
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Hayden Luckenbach
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
|
-
- !ruby/object:Gem::Dependency
|
|
14
|
-
name: bundler
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - ">="
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: 2.1.0
|
|
20
|
-
type: :development
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - ">="
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: 2.1.0
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: pry
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - "~>"
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: 0.10.0
|
|
34
|
-
type: :development
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - "~>"
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: 0.10.0
|
|
41
12
|
- !ruby/object:Gem::Dependency
|
|
42
13
|
name: rake
|
|
43
14
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -106,20 +77,21 @@ dependencies:
|
|
|
106
77
|
- - "<"
|
|
107
78
|
- !ruby/object:Gem::Version
|
|
108
79
|
version: '0.17'
|
|
109
|
-
description:
|
|
110
|
-
|
|
111
|
-
- hluckenb@gmail.com
|
|
80
|
+
description: Adds JWT issuance and authentication to the Sorcery authentication library,
|
|
81
|
+
for API-only Rails apps.
|
|
112
82
|
executables: []
|
|
113
83
|
extensions: []
|
|
114
84
|
extra_rdoc_files: []
|
|
115
85
|
files:
|
|
86
|
+
- ".github/workflows/ci.yml"
|
|
116
87
|
- ".gitignore"
|
|
117
88
|
- ".rspec"
|
|
118
|
-
-
|
|
89
|
+
- CHANGELOG.md
|
|
119
90
|
- CODE_OF_CONDUCT.md
|
|
120
91
|
- Gemfile
|
|
121
92
|
- Gemfile.lock
|
|
122
93
|
- LICENSE.txt
|
|
94
|
+
- PLAN.md
|
|
123
95
|
- README.md
|
|
124
96
|
- Rakefile
|
|
125
97
|
- bin/console
|
|
@@ -128,12 +100,15 @@ files:
|
|
|
128
100
|
- lib/sorcery/jwt.rb
|
|
129
101
|
- lib/sorcery/jwt/version.rb
|
|
130
102
|
- lib/sorcery/model/submodules/jwt.rb
|
|
103
|
+
- mise.toml
|
|
131
104
|
- sorcery-jwt.gemspec
|
|
132
105
|
homepage: https://github.com/hayfever/sorcery-jwt
|
|
133
106
|
licenses:
|
|
134
107
|
- MIT
|
|
135
|
-
metadata:
|
|
136
|
-
|
|
108
|
+
metadata:
|
|
109
|
+
homepage_uri: https://github.com/hayfever/sorcery-jwt
|
|
110
|
+
source_code_uri: https://github.com/hayfever/sorcery-jwt
|
|
111
|
+
changelog_uri: https://github.com/hayfever/sorcery-jwt/CHANGELOG.md
|
|
137
112
|
rdoc_options: []
|
|
138
113
|
require_paths:
|
|
139
114
|
- lib
|
|
@@ -141,15 +116,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
141
116
|
requirements:
|
|
142
117
|
- - ">="
|
|
143
118
|
- !ruby/object:Gem::Version
|
|
144
|
-
version: '0'
|
|
119
|
+
version: '3.0'
|
|
145
120
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
146
121
|
requirements:
|
|
147
122
|
- - ">="
|
|
148
123
|
- !ruby/object:Gem::Version
|
|
149
124
|
version: '0'
|
|
150
125
|
requirements: []
|
|
151
|
-
rubygems_version: 3.
|
|
152
|
-
signing_key:
|
|
126
|
+
rubygems_version: 3.6.9
|
|
153
127
|
specification_version: 4
|
|
154
128
|
summary: Jwt extension for the Sorcery authentication library
|
|
155
129
|
test_files: []
|