sorcery-jwt 0.2.1 → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0bda8036589ded6b4a9870c7b0bcae86e6e7a4a2c7a33e4541aba3ed0e6b13c5
4
- data.tar.gz: cd0e7e47c7bd2b4a3a74e035c0e78a478beaf28d9b40d2d6dba353ae68fc0e9c
3
+ metadata.gz: f3291049e9e9a71c2160d00cbc1d83d574e2fcf17d37e93f915f7dd1a71f0d1e
4
+ data.tar.gz: d89a4edc63c58948f8b8382827f9e9a96e5644df46c5740909197ab70dee456e
5
5
  SHA512:
6
- metadata.gz: 7ae9d70d53abf1cc192b2c1d37d91e62c70b0c0f7c83ce1618ab794d85978295e1a48be02ecff17a49653649c1c3b98ec6ecec375d29c2fc639d5dd0eef5f7fd
7
- data.tar.gz: d4ef75f3664bcf002ebf684e0ea5d78637de18856fad4996275592a23d19d189dc2bde5c82498ebc9082c8733b819ec13de530eba927d0d6ad5e841a6581f24d
6
+ metadata.gz: d8e54c1b75b564bf861734cc3cd289237a92288e1adbe9190de1b7349ef180d9592c659aa6cd443ac4fa2f342a0a8e6011e37f0a3b1cff99c3e5842ba394fcaa
7
+ data.tar.gz: 2b7ad9a0a38719960a50602520e7bb5d109980d2bf520577d6620688b99b7389e444df2e9c3630ae060fa8badbb3cf5a8d8b743fdceb6b644252e408d4cacea2
@@ -13,11 +13,11 @@ jobs:
13
13
  ruby: ["3.2", "3.3", "3.4"]
14
14
  sorcery: ["0.16.5", "0.17.0", "0.18.0"]
15
15
  env:
16
- BUNDLE_GEMFILE: gemfiles/sorcery_${{ matrix.sorcery }}.gemfile
16
+ BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/sorcery_${{ matrix.sorcery }}.gemfile
17
17
  steps:
18
- - uses: actions/checkout@v4
18
+ - uses: actions/checkout@v6
19
19
  - uses: ruby/setup-ruby@v1
20
20
  with:
21
21
  ruby-version: ${{ matrix.ruby }}
22
- bundler-cache: true
22
+ - run: bundle install
23
23
  - run: bundle exec rspec
data/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.0.0 (2026-09-03)
4
+
5
+ First stable release. The public API is identical to 0.1.x — tokens issued
6
+ by earlier versions remain valid; no forced re-login.
7
+
8
+ ### Added
9
+
10
+ - `exp_leeway` config: optional clock-skew tolerance (seconds) applied when
11
+ verifying `exp`. Default nil (previous behavior).
12
+ - `iat` claim on issued tokens.
13
+ - Integration spec exercising the real sorcery include path
14
+ (`authenticates_with_sorcery!`) — the path where failures were previously
15
+ swallowed silently by sorcery's `rescue NameError`.
16
+ - Yard documentation for the public API; README rewritten (claim contract,
17
+ security notes, upgrade guide, tested matrix).
18
+
3
19
  ## 0.2.1 (2026-09-03)
4
20
 
5
21
  ### Changed
data/Gemfile.lock CHANGED
@@ -1,13 +1,35 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sorcery-jwt (0.2.1)
4
+ sorcery-jwt (1.0.0)
5
5
  jwt (>= 1.0, < 3.0)
6
6
  sorcery (>= 0.16.5, < 0.19)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
+ action_text-trix (2.1.19)
12
+ railties
13
+ actioncable (8.1.3.1)
14
+ actionpack (= 8.1.3.1)
15
+ activesupport (= 8.1.3.1)
16
+ nio4r (~> 2.0)
17
+ websocket-driver (>= 0.6.1)
18
+ zeitwerk (~> 2.6)
19
+ actionmailbox (8.1.3.1)
20
+ actionpack (= 8.1.3.1)
21
+ activejob (= 8.1.3.1)
22
+ activerecord (= 8.1.3.1)
23
+ activestorage (= 8.1.3.1)
24
+ activesupport (= 8.1.3.1)
25
+ mail (>= 2.8.0)
26
+ actionmailer (8.1.3.1)
27
+ actionpack (= 8.1.3.1)
28
+ actionview (= 8.1.3.1)
29
+ activejob (= 8.1.3.1)
30
+ activesupport (= 8.1.3.1)
31
+ mail (>= 2.8.0)
32
+ rails-dom-testing (~> 2.2)
11
33
  actionpack (8.1.3.1)
12
34
  actionview (= 8.1.3.1)
13
35
  activesupport (= 8.1.3.1)
@@ -18,12 +40,35 @@ GEM
18
40
  rails-dom-testing (~> 2.2)
19
41
  rails-html-sanitizer (~> 1.6)
20
42
  useragent (~> 0.16)
43
+ actiontext (8.1.3.1)
44
+ action_text-trix (~> 2.1.15)
45
+ actionpack (= 8.1.3.1)
46
+ activerecord (= 8.1.3.1)
47
+ activestorage (= 8.1.3.1)
48
+ activesupport (= 8.1.3.1)
49
+ globalid (>= 0.6.0)
50
+ nokogiri (>= 1.8.5)
21
51
  actionview (8.1.3.1)
22
52
  activesupport (= 8.1.3.1)
23
53
  builder (~> 3.1)
24
54
  erubi (~> 1.11)
25
55
  rails-dom-testing (~> 2.2)
26
56
  rails-html-sanitizer (~> 1.6)
57
+ activejob (8.1.3.1)
58
+ activesupport (= 8.1.3.1)
59
+ globalid (>= 0.3.6)
60
+ activemodel (8.1.3.1)
61
+ activesupport (= 8.1.3.1)
62
+ activerecord (8.1.3.1)
63
+ activemodel (= 8.1.3.1)
64
+ activesupport (= 8.1.3.1)
65
+ timeout (>= 0.4.0)
66
+ activestorage (8.1.3.1)
67
+ actionpack (= 8.1.3.1)
68
+ activejob (= 8.1.3.1)
69
+ activerecord (= 8.1.3.1)
70
+ activesupport (= 8.1.3.1)
71
+ marcel (~> 1.0)
27
72
  activesupport (8.1.3.1)
28
73
  base64
29
74
  bigdecimal
@@ -48,6 +93,7 @@ GEM
48
93
  concurrent-ruby (1.3.8)
49
94
  connection_pool (3.0.2)
50
95
  crass (1.0.7)
96
+ date (3.5.1)
51
97
  diff-lcs (1.6.2)
52
98
  drb (2.2.3)
53
99
  erb (6.0.7)
@@ -58,6 +104,8 @@ GEM
58
104
  logger
59
105
  faraday-net_http (3.4.4)
60
106
  net-http (~> 0.5)
107
+ globalid (1.4.0)
108
+ activesupport (>= 6.1)
61
109
  hashie (5.1.0)
62
110
  logger
63
111
  i18n (1.15.2)
@@ -75,6 +123,14 @@ GEM
75
123
  loofah (2.25.2)
76
124
  crass (~> 1.0.2)
77
125
  nokogiri (>= 1.12.0)
126
+ mail (2.9.1)
127
+ logger
128
+ mini_mime (>= 0.1.1)
129
+ net-imap
130
+ net-pop
131
+ net-smtp
132
+ marcel (1.2.1)
133
+ mini_mime (1.1.5)
78
134
  minitest (6.0.6)
79
135
  drb (~> 2.0)
80
136
  prism (~> 1.5)
@@ -82,6 +138,16 @@ GEM
82
138
  bigdecimal (>= 3.1, < 5)
83
139
  net-http (0.9.1)
84
140
  uri (>= 0.11.1)
141
+ net-imap (0.6.6)
142
+ date
143
+ net-protocol
144
+ net-pop (0.1.2)
145
+ net-protocol
146
+ net-protocol (0.3.0)
147
+ timeout
148
+ net-smtp (0.5.1)
149
+ net-protocol
150
+ nio4r (2.7.5)
85
151
  nokogiri (1.19.4-aarch64-linux-gnu)
86
152
  racc (~> 1.4)
87
153
  nokogiri (1.19.4-aarch64-linux-musl)
@@ -132,6 +198,20 @@ GEM
132
198
  rack (>= 1.3)
133
199
  rackup (2.3.1)
134
200
  rack (>= 3)
201
+ rails (8.1.3.1)
202
+ actioncable (= 8.1.3.1)
203
+ actionmailbox (= 8.1.3.1)
204
+ actionmailer (= 8.1.3.1)
205
+ actionpack (= 8.1.3.1)
206
+ actiontext (= 8.1.3.1)
207
+ actionview (= 8.1.3.1)
208
+ activejob (= 8.1.3.1)
209
+ activemodel (= 8.1.3.1)
210
+ activerecord (= 8.1.3.1)
211
+ activestorage (= 8.1.3.1)
212
+ activesupport (= 8.1.3.1)
213
+ bundler (>= 1.15.0)
214
+ railties (= 8.1.3.1)
135
215
  rails-dom-testing (2.3.0)
136
216
  activesupport (>= 5.0.0)
137
217
  minitest
@@ -182,13 +262,26 @@ GEM
182
262
  oauth (>= 0.6)
183
263
  oauth2 (~> 2.0)
184
264
  railties (>= 7.1)
265
+ sqlite3 (2.9.6-aarch64-linux-gnu)
266
+ sqlite3 (2.9.6-aarch64-linux-musl)
267
+ sqlite3 (2.9.6-arm-linux-gnu)
268
+ sqlite3 (2.9.6-arm-linux-musl)
269
+ sqlite3 (2.9.6-arm64-darwin)
270
+ sqlite3 (2.9.6-x86_64-darwin)
271
+ sqlite3 (2.9.6-x86_64-linux-gnu)
272
+ sqlite3 (2.9.6-x86_64-linux-musl)
185
273
  thor (1.5.0)
274
+ timeout (0.6.1)
186
275
  tsort (0.2.0)
187
276
  tzinfo (2.0.6)
188
277
  concurrent-ruby (~> 1.0)
189
278
  uri (1.1.1)
190
279
  useragent (0.16.11)
191
280
  version_gem (1.1.15)
281
+ websocket-driver (0.8.2)
282
+ base64
283
+ websocket-extensions (>= 0.1.0)
284
+ websocket-extensions (0.1.5)
192
285
  zeitwerk (2.8.3)
193
286
 
194
287
  PLATFORMS
@@ -202,9 +295,12 @@ PLATFORMS
202
295
  x86_64-linux-musl
203
296
 
204
297
  DEPENDENCIES
298
+ activerecord (~> 8.0)
299
+ rails (~> 8.0)
205
300
  rake (~> 13.0)
206
301
  rspec (~> 3.0)
207
302
  sorcery-jwt!
303
+ sqlite3 (~> 2.0)
208
304
 
209
305
  BUNDLED WITH
210
306
  2.6.9
data/README.md CHANGED
@@ -1,82 +1,132 @@
1
1
  # Sorcery::Jwt
2
2
 
3
- Jwt extension for the Sorcery authentication library
3
+ [![CI](https://github.com/hayfever/sorcery-jwt/actions/workflows/ci.yml/badge.svg)](https://github.com/hayfever/sorcery-jwt/actions)
4
+ [![Gem Version](https://badge.fury.io/rb/sorcery-jwt.svg)](https://rubygems.org/gems/sorcery-jwt)
4
5
 
5
- # NOTE: Sorcery v1 is being developed and JWT is being implemented as a core plugin. See https://github.com/Sorcery/sorcery-rework/issues/9 for more.
6
+ Jwt extension for the [Sorcery](https://github.com/Sorcery/sorcery) authentication
7
+ library, for API-only Rails apps.
8
+
9
+ > **NOTE:** Sorcery v1 is being developed and JWT is planned as a core plugin.
10
+ > See https://github.com/Sorcery/sorcery-rework/issues/9. This gem targets the
11
+ > current (0.16–0.18) sorcery line.
6
12
 
7
13
  ## Installation
8
14
 
9
15
  Add this line to your application's Gemfile:
10
16
 
11
17
  ```ruby
12
- gem 'sorcery-jwt'
18
+ gem "sorcery-jwt"
13
19
  ```
14
20
 
15
21
  And then execute:
16
22
 
17
23
  $ bundle
18
24
 
19
- Or install it yourself as:
20
-
21
- $ gem install sorcery-jwt
22
-
23
25
  ## Usage
24
26
 
25
27
  First, include the `:jwt` submodule in your list of configured Sorcery submodules:
26
28
 
27
- ```
29
+ ```ruby
28
30
  Rails.application.config.sorcery.submodules = [:jwt, ...]
29
31
  ```
30
32
 
31
- Next, in the Sorcery `user_config`, set the secret and algorithm that will be used to sign your tokens. You can also set length of time in seconds that the token will be valid for. Note that this is configured separately from the `:session_timeout` submodule.
33
+ Next, in the Sorcery `user_config`, set the secret and algorithm used to sign
34
+ tokens, the token lifetime in seconds, and (optionally) clock-skew tolerance:
32
35
 
33
- ```
36
+ ```ruby
34
37
  Rails.application.config.sorcery.configure do |config|
35
38
  # ...
36
39
  config.user_config do |user|
37
- # ...
38
- user.jwt_secret = Rails.application.secrets.secret_key_base
39
- user.jwt_algorithm = "HS256" # HS256 is used by default.
40
- user.session_expiry = 60 * 60 * 24 * 7 * 2 # 2 weeks is used by default.
40
+ user.jwt_secret = Rails.application.secrets.secret_key_base
41
+ user.jwt_algorithm = "HS256" # default; see jwt/ruby-jwt for options
42
+ user.session_expiry = 60 * 60 * 24 * 7 * 2 # default: 2 weeks (seconds)
43
+ user.exp_leeway = 30 # optional; default nil = no leeway
41
44
  end
42
45
  end
43
46
  ```
44
47
 
45
- Available algorithms are listed at https://github.com/jwt/ruby-jwt.
48
+ With the submodule included, each request checks the `Authorization` header
49
+ for a bearer JWT. If the token is validly signed, unexpired, and its claims
50
+ match a user, `current_user` is set. Handling invalid tokens (401s, etc.) is
51
+ up to your application.
46
52
 
47
- You're now ready to start using the library. By including the submodule, each request will check for an authorization header with a JWT as the value. If the JWT is valid, it will set the `current_user` in the controller to the matching user. It is up to you to handle what happens when a token is invalid or JWTs need to be revoked. Some ideas here: http://waiting-for-dev.github.io/blog/2017/01/24/jwt_revocation_strategies.
53
+ To log a user in and issue a token:
48
54
 
49
- To login a user and issue a token, use the `login_and_issue_token` method from a controller. This method takes the same `email` and `password` arguments that the Sorcery `authenticate` method does.
55
+ ```ruby
56
+ class SessionsController < ApplicationController
57
+ def create
58
+ token = login_and_issue_token(params[:email], params[:password])
59
+
60
+ if token
61
+ render json: { token: token }, status: :created
62
+ else
63
+ render json: { error: "invalid credentials" }, status: :unauthorized
64
+ end
65
+ end
66
+ end
67
+ ```
50
68
 
51
- Example:
69
+ ### Claim contract
52
70
 
53
- ```
54
- def login
55
- token = login_and_issue_token(params[:email], params[:password])
71
+ Tokens issued by `login_and_issue_token` carry the user's `id` and `email`,
72
+ plus the standard `exp` and `iat` claims. Authentication via
73
+ `login_from_jwt` requires **all** of the following, evaluated in one place:
56
74
 
57
- render json: {
58
- user: serialize(current_user),
59
- token: token
60
- }
61
- end
75
+ 1. a valid signature under the configured secret and algorithm
76
+ 2. an unexpired `exp` (within `exp_leeway`, if configured)
77
+ 3. `id` and `email` claims are present
78
+ 4. the claims match an existing user
79
+
80
+ A validly-signed token that fails any check authenticates nobody — notably,
81
+ a token missing its identity claims can never fall through to an unfiltered
82
+ lookup.
83
+
84
+ ### Token issuance API
85
+
86
+ You can also issue tokens directly from the user model:
87
+
88
+ ```ruby
89
+ User.issue_token(id: user.id, email: user.email) # => signed JWT string
90
+ User.decode_token(token) # => [payload, header]; raises JWT::DecodeError
91
+ User.token_valid?(token) # => boolean; never raises
62
92
  ```
63
93
 
64
- By using `login_and_issue_token` with valid credentials, you're also setting `current_user` in your controller.
94
+ ## Security notes
65
95
 
66
- ## Development
96
+ - **No revocation is built in.** Tokens are valid until `exp`. If you need
97
+ logout, invalidation on password change, or single-session enforcement, see
98
+ [JWT revocation strategies](https://waiting-for-dev.github.io/blog/2017/01/24/jwt_revocation_strategies/)
99
+ — any denylist/token-version approach can be layered on top by your app.
100
+ - The algorithm is pinned on decode: `alg: none` and key-confusion attacks
101
+ are rejected.
102
+ - The signing secret should be at least as strong as `secret_key_base`
103
+ rotated from your credentials store.
67
104
 
68
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
105
+ ## Upgrading from 0.1.x
69
106
 
70
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
107
+ No API changes: `issue_token`, `decode_token`, `token_valid?`,
108
+ `login_and_issue_token`, and the `login_from_jwt` login source all behave as
109
+ before, and **tokens issued by 0.1.x remain valid** — no forced re-login.
110
+ Behavior fixes in the 0.2+ line:
71
111
 
72
- ## Contributing
112
+ - tokens with no `id`/`email` claims are rejected (previously authenticated
113
+ the first user in the table)
114
+ - the `email` claim must match the looked-up user
115
+ - failed JWT login sets `current_user` to `nil` (sorcery convention)
116
+ - the model submodule actually registers on modern Rubies (see
117
+ [CHANGELOG](CHANGELOG.md) — before 0.2, sorcery's `rescue NameError`
118
+ could silently skip it, leaving `issue_token` undefined at runtime)
73
119
 
74
- Bug reports and pull requests are welcome on GitHub at https://github.com/hayfever/sorcery-jwt. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
120
+ ## Compatibility
75
121
 
76
- ## License
122
+ Tested matrix (CI): Ruby 3.2 / 3.3 / 3.4 × sorcery 0.16.5 / 0.17 / 0.18.
77
123
 
78
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
124
+ ## Contributing
79
125
 
80
- ## Code of Conduct
126
+ Bug reports and pull requests are welcome at
127
+ https://github.com/hayfever/sorcery-jwt.
128
+
129
+ ## License
81
130
 
82
- Everyone interacting in the Sorcery::Jwt project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/hayfever/sorcery-jwt/blob/master/CODE_OF_CONDUCT.md).
131
+ The gem is available as open source under the terms of the
132
+ [MIT License](LICENSE.txt).
@@ -0,0 +1,4 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "sorcery", "= 0.16.5"
4
+ gemspec path: "../"
@@ -0,0 +1,278 @@
1
+ PATH
2
+ remote: ..
3
+ specs:
4
+ sorcery-jwt (0.2.1)
5
+ jwt (>= 1.0, < 3.0)
6
+ sorcery (>= 0.16.5, < 0.19)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ action_text-trix (2.1.19)
12
+ railties
13
+ actioncable (8.1.3.1)
14
+ actionpack (= 8.1.3.1)
15
+ activesupport (= 8.1.3.1)
16
+ nio4r (~> 2.0)
17
+ websocket-driver (>= 0.6.1)
18
+ zeitwerk (~> 2.6)
19
+ actionmailbox (8.1.3.1)
20
+ actionpack (= 8.1.3.1)
21
+ activejob (= 8.1.3.1)
22
+ activerecord (= 8.1.3.1)
23
+ activestorage (= 8.1.3.1)
24
+ activesupport (= 8.1.3.1)
25
+ mail (>= 2.8.0)
26
+ actionmailer (8.1.3.1)
27
+ actionpack (= 8.1.3.1)
28
+ actionview (= 8.1.3.1)
29
+ activejob (= 8.1.3.1)
30
+ activesupport (= 8.1.3.1)
31
+ mail (>= 2.8.0)
32
+ rails-dom-testing (~> 2.2)
33
+ actionpack (8.1.3.1)
34
+ actionview (= 8.1.3.1)
35
+ activesupport (= 8.1.3.1)
36
+ nokogiri (>= 1.8.5)
37
+ rack (>= 2.2.4)
38
+ rack-session (>= 1.0.1)
39
+ rack-test (>= 0.6.3)
40
+ rails-dom-testing (~> 2.2)
41
+ rails-html-sanitizer (~> 1.6)
42
+ useragent (~> 0.16)
43
+ actiontext (8.1.3.1)
44
+ action_text-trix (~> 2.1.15)
45
+ actionpack (= 8.1.3.1)
46
+ activerecord (= 8.1.3.1)
47
+ activestorage (= 8.1.3.1)
48
+ activesupport (= 8.1.3.1)
49
+ globalid (>= 0.6.0)
50
+ nokogiri (>= 1.8.5)
51
+ actionview (8.1.3.1)
52
+ activesupport (= 8.1.3.1)
53
+ builder (~> 3.1)
54
+ erubi (~> 1.11)
55
+ rails-dom-testing (~> 2.2)
56
+ rails-html-sanitizer (~> 1.6)
57
+ activejob (8.1.3.1)
58
+ activesupport (= 8.1.3.1)
59
+ globalid (>= 0.3.6)
60
+ activemodel (8.1.3.1)
61
+ activesupport (= 8.1.3.1)
62
+ activerecord (8.1.3.1)
63
+ activemodel (= 8.1.3.1)
64
+ activesupport (= 8.1.3.1)
65
+ timeout (>= 0.4.0)
66
+ activestorage (8.1.3.1)
67
+ actionpack (= 8.1.3.1)
68
+ activejob (= 8.1.3.1)
69
+ activerecord (= 8.1.3.1)
70
+ activesupport (= 8.1.3.1)
71
+ marcel (~> 1.0)
72
+ activesupport (8.1.3.1)
73
+ base64
74
+ bigdecimal
75
+ concurrent-ruby (~> 1.0, >= 1.3.1)
76
+ connection_pool (>= 2.2.5)
77
+ drb
78
+ i18n (>= 1.6, < 2)
79
+ json
80
+ logger (>= 1.4.2)
81
+ minitest (>= 5.1)
82
+ securerandom (>= 0.3)
83
+ tzinfo (~> 2.0, >= 2.0.5)
84
+ uri (>= 0.13.1)
85
+ anonymous_loader (0.1.3)
86
+ version_gem (~> 1.1, >= 1.1.14)
87
+ auth-sanitizer (0.2.3)
88
+ version_gem (~> 1.1, >= 1.1.14)
89
+ base64 (0.3.0)
90
+ bcrypt (3.1.22)
91
+ bigdecimal (4.1.2)
92
+ builder (3.3.0)
93
+ concurrent-ruby (1.3.8)
94
+ connection_pool (3.0.2)
95
+ crass (1.0.7)
96
+ date (3.5.1)
97
+ diff-lcs (1.6.2)
98
+ drb (2.2.3)
99
+ erb (6.0.7)
100
+ erubi (1.13.1)
101
+ faraday (2.14.3)
102
+ faraday-net_http (>= 2.0, < 3.5)
103
+ json
104
+ logger
105
+ faraday-net_http (3.4.4)
106
+ net-http (~> 0.5)
107
+ globalid (1.4.0)
108
+ activesupport (>= 6.1)
109
+ hashie (5.1.0)
110
+ logger
111
+ i18n (1.15.2)
112
+ concurrent-ruby (~> 1.0)
113
+ io-console (0.9.2)
114
+ irb (1.18.0)
115
+ pp (>= 0.6.0)
116
+ prism (>= 1.3.0)
117
+ rdoc (>= 4.0.0)
118
+ reline (>= 0.4.2)
119
+ json (2.21.2)
120
+ jwt (2.10.3)
121
+ base64
122
+ logger (1.7.0)
123
+ loofah (2.25.2)
124
+ crass (~> 1.0.2)
125
+ nokogiri (>= 1.12.0)
126
+ mail (2.9.1)
127
+ logger
128
+ mini_mime (>= 0.1.1)
129
+ net-imap
130
+ net-pop
131
+ net-smtp
132
+ marcel (1.2.1)
133
+ mini_mime (1.1.5)
134
+ minitest (6.0.6)
135
+ drb (~> 2.0)
136
+ prism (~> 1.5)
137
+ multi_xml (0.9.1)
138
+ bigdecimal (>= 3.1, < 5)
139
+ net-http (0.9.1)
140
+ uri (>= 0.11.1)
141
+ net-imap (0.6.6)
142
+ date
143
+ net-protocol
144
+ net-pop (0.1.2)
145
+ net-protocol
146
+ net-protocol (0.3.0)
147
+ timeout
148
+ net-smtp (0.5.1)
149
+ net-protocol
150
+ nio4r (2.7.5)
151
+ nokogiri (1.19.4-x86_64-linux-gnu)
152
+ racc (~> 1.4)
153
+ oauth (1.1.8)
154
+ anonymous_loader (~> 0.1, >= 0.1.3)
155
+ auth-sanitizer (~> 0.2, >= 0.2.3)
156
+ base64 (~> 0.1)
157
+ oauth-tty (~> 1.0, >= 1.0.13)
158
+ snaky_hash (~> 2.0, >= 2.0.7)
159
+ version_gem (~> 1.1, >= 1.1.14)
160
+ oauth-tty (1.0.13)
161
+ anonymous_loader (~> 0.1, >= 0.1.3)
162
+ auth-sanitizer (~> 0.2, >= 0.2.3)
163
+ version_gem (~> 1.1, >= 1.1.14)
164
+ oauth2 (2.0.25)
165
+ anonymous_loader (~> 0.1, >= 0.1.3)
166
+ auth-sanitizer (~> 0.2, >= 0.2.3)
167
+ faraday (>= 0.17.3, < 4.0)
168
+ jwt (>= 1.0, < 4.0)
169
+ logger (~> 1.2)
170
+ multi_xml (~> 0.5)
171
+ rack (>= 1.2, < 4)
172
+ snaky_hash (~> 2.0, >= 2.0.7)
173
+ version_gem (~> 1.1, >= 1.1.14)
174
+ pp (0.6.4)
175
+ prettyprint
176
+ prettyprint (0.2.0)
177
+ prism (1.9.0)
178
+ racc (1.8.1)
179
+ rack (3.2.7)
180
+ rack-session (2.1.2)
181
+ base64 (>= 0.1.0)
182
+ rack (>= 3.0.0)
183
+ rack-test (2.2.0)
184
+ rack (>= 1.3)
185
+ rackup (2.3.1)
186
+ rack (>= 3)
187
+ rails (8.1.3.1)
188
+ actioncable (= 8.1.3.1)
189
+ actionmailbox (= 8.1.3.1)
190
+ actionmailer (= 8.1.3.1)
191
+ actionpack (= 8.1.3.1)
192
+ actiontext (= 8.1.3.1)
193
+ actionview (= 8.1.3.1)
194
+ activejob (= 8.1.3.1)
195
+ activemodel (= 8.1.3.1)
196
+ activerecord (= 8.1.3.1)
197
+ activestorage (= 8.1.3.1)
198
+ activesupport (= 8.1.3.1)
199
+ bundler (>= 1.15.0)
200
+ railties (= 8.1.3.1)
201
+ rails-dom-testing (2.3.0)
202
+ activesupport (>= 5.0.0)
203
+ minitest
204
+ nokogiri (>= 1.6)
205
+ rails-html-sanitizer (1.7.1)
206
+ loofah (~> 2.25, >= 2.25.2)
207
+ nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
208
+ railties (8.1.3.1)
209
+ actionpack (= 8.1.3.1)
210
+ activesupport (= 8.1.3.1)
211
+ irb (~> 1.13)
212
+ rackup (>= 1.0.0)
213
+ rake (>= 12.2)
214
+ thor (~> 1.0, >= 1.2.2)
215
+ tsort (>= 0.2)
216
+ zeitwerk (~> 2.6)
217
+ rake (13.4.2)
218
+ rbs (4.2.0)
219
+ logger
220
+ prism (>= 1.6.0)
221
+ tsort
222
+ rdoc (8.0.0)
223
+ erb
224
+ prism (>= 1.6.0)
225
+ rbs (>= 4.0.0)
226
+ tsort
227
+ reline (0.7.0)
228
+ io-console (~> 0.5)
229
+ rspec (3.13.2)
230
+ rspec-core (~> 3.13.0)
231
+ rspec-expectations (~> 3.13.0)
232
+ rspec-mocks (~> 3.13.0)
233
+ rspec-core (3.13.6)
234
+ rspec-support (~> 3.13.0)
235
+ rspec-expectations (3.13.5)
236
+ diff-lcs (>= 1.2.0, < 2.0)
237
+ rspec-support (~> 3.13.0)
238
+ rspec-mocks (3.13.8)
239
+ diff-lcs (>= 1.2.0, < 2.0)
240
+ rspec-support (~> 3.13.0)
241
+ rspec-support (3.13.7)
242
+ securerandom (0.4.1)
243
+ snaky_hash (2.0.7)
244
+ hashie (>= 0.1.0, < 6)
245
+ version_gem (~> 1.1, >= 1.1.14)
246
+ sorcery (0.16.5)
247
+ bcrypt (~> 3.1)
248
+ oauth (>= 0.6)
249
+ oauth2 (~> 2.0)
250
+ sqlite3 (2.9.6-x86_64-linux-gnu)
251
+ thor (1.5.0)
252
+ timeout (0.6.1)
253
+ tsort (0.2.0)
254
+ tzinfo (2.0.6)
255
+ concurrent-ruby (~> 1.0)
256
+ uri (1.1.1)
257
+ useragent (0.16.11)
258
+ version_gem (1.1.15)
259
+ websocket-driver (0.8.2)
260
+ base64
261
+ websocket-extensions (>= 0.1.0)
262
+ websocket-extensions (0.1.5)
263
+ zeitwerk (2.8.3)
264
+
265
+ PLATFORMS
266
+ x86_64-linux
267
+
268
+ DEPENDENCIES
269
+ activerecord (~> 8.0)
270
+ rails (~> 8.0)
271
+ rake (~> 13.0)
272
+ rspec (~> 3.0)
273
+ sorcery (= 0.16.5)
274
+ sorcery-jwt!
275
+ sqlite3 (~> 2.0)
276
+
277
+ BUNDLED WITH
278
+ 2.6.9
@@ -0,0 +1,4 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "sorcery", "= 0.17.0"
4
+ gemspec path: "../"