passkeys-rails 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a137b9b4f2ab7aac24fef0747ff112588215d496034f0542983df3790bc32de7
4
- data.tar.gz: 412185131a984a883a11af7fae1bbbb69806819a978871a08e0929921c766fe4
3
+ metadata.gz: 8aeb76eb5817dbc1b1fac8a6205b5154772bd04d91f45596952b9b10e319f997
4
+ data.tar.gz: 0f3eb68558500c17ea980a1a1e0b00db8ddf13dfead9ef8568fb8a8d295f96ae
5
5
  SHA512:
6
- metadata.gz: bdf2974d31cb561bbeabaf599a29d99bb9cda2e4050cff913cbe5104a747c4eba2eb11a53936fcef013861ede39051208a2edbc3062a6b25a34476678388eba9
7
- data.tar.gz: 149c795d0b56a7569170160426b466ff42abc75bcb2f46fc5adae3b35ad3eb9d6d465ce05f0834cbbfaf3bc30944d809b776c1112913c0e490175c316784e859
6
+ metadata.gz: 2f136f27de81f280d9d8e55e96b2f7c4729ded92a7b9c0339f0c766d0b8604732de430dd5f6e082ed700dca9422cc3c1af975dfae74aa267757d955b3bc15733
7
+ data.tar.gz: 92587364bdb4f41aa35dfaeef432bab42e77d6dd4a8e49b6797b12bd2a42f4ef0ecd9ed6dca5575abf3e068c0005c998d863f3eb7b1443eb4d01ac2271f73205
data/CHANGELOG.md CHANGED
@@ -1,60 +1,65 @@
1
- ### 0.3.1
1
+ ### 0.3.2 (2024/10/01)
2
2
 
3
- * Fixed a bug in reading session/cookie variables
4
- * Added webauthn configuration parameters to this gem's configuration
5
- * Moved configuration to its own class
6
- * Added more info to the README
3
+ - Changed from unsigned cookies to short lived signed cookies
4
+ - Added RELEASING.md
7
5
 
8
- ### 0.3.0
6
+ ### 0.3.1 (2023/11/30)
9
7
 
10
- * Added debug_register endpoint.
11
- * Fixed authenticatable_params for register enpoint.
12
- * Added notifications to certain controller actions.
13
- * Improved spec error helper.
8
+ - Fixed a bug in reading session/cookie variables
9
+ - Added webauthn configuration parameters to this gem's configuration
10
+ - Moved configuration to its own class
11
+ - Added more info to the README
14
12
 
15
- ### 0.2.1
13
+ ### 0.3.0 (2023/08/01)
14
+
15
+ - Added debug_register endpoint.
16
+ - Fixed authenticatable_params for register enpoint.
17
+ - Added notifications to certain controller actions.
18
+ - Improved spec error helper.
19
+
20
+ ### 0.2.1 (2023/07/29)
16
21
 
17
22
  Added ability to pass either the auth token string or a request with one in the header to authenticate methods.
18
23
 
19
- ### 0.2.0
24
+ ### 0.2.0 (2023/07/28)
20
25
 
21
- * Added passkeys/debug_login functionality.
26
+ - Added passkeys/debug_login functionality.
22
27
 
23
- ### 0.1.7
28
+ ### 0.1.7 (2023/07/26)
24
29
 
25
- * Added IntegrationHelpers to support client testing.
26
- * Updated methods for interfacing with Rails client app.
27
- * Changed route path added by the generator.
30
+ - Added IntegrationHelpers to support client testing.
31
+ - Updated methods for interfacing with Rails client app.
32
+ - Changed route path added by the generator.
28
33
 
29
- ### 0.1.6
34
+ ### 0.1.6 (2023/07/26)
30
35
 
31
- * Added default_class and class_whitelist config parameters.
36
+ - Added default_class and class_whitelist config parameters.
32
37
 
33
- ### 0.1.5
38
+ ### 0.1.5 (2023/07/24)
34
39
 
35
- * Updated validation to ensure the agent has completed registration to be considered valid.
40
+ - Updated validation to ensure the agent has completed registration to be considered valid.
36
41
 
37
- ### 0.1.4
42
+ ### 0.1.4 (2023/07/23)
38
43
 
39
- * Changed namespace from Passkeys::Rails to PasskeysRails
44
+ - Changed namespace from Passkeys::Rails to PasskeysRails
40
45
 
41
- ### 0.1.3
46
+ ### 0.1.3 (2023/07/23)
42
47
 
43
- * More restructuring and fixed issue where autoloading failed
48
+ - More restructuring and fixed issue where autoloading failed
44
49
  during client app initialization.
45
50
 
46
- ### 0.1.2
51
+ ### 0.1.2 (2023/07/23)
47
52
 
48
- * Restructured lib directory.
53
+ - Restructured lib directory.
49
54
 
50
- * Fixed naming convention for gem/gemspec.
55
+ - Fixed naming convention for gem/gemspec.
51
56
 
52
- * Fixed exception handling.
57
+ - Fixed exception handling.
53
58
 
54
- ### 0.1.1
59
+ ### 0.1.1 (2023/07/23)
55
60
 
56
- * Fixed dependency
61
+ - Fixed dependency
57
62
 
58
- ### 0.1.0
63
+ ### 0.1.0 (2023/07/23)
59
64
 
60
- * Initial release - looking for feedback
65
+ - Initial release - looking for feedback
data/README.md CHANGED
@@ -188,7 +188,7 @@ end
188
188
  - When `.code` is `:expired_token`, `.message` is **The token has expired**, which means that the token is valid, but expired, thuis it's not considered authentic.
189
189
  - When `.code` is `:token_error`, `.message` is a description of the error. This is a catch-all in the event we are unable to decode the token.
190
190
 
191
- In the future, the intention is to have the `.code` value stay consistent even if the `.message` changes. This also allows you to localize the messages as need using the code.
191
+ In the future, the intention is to have the `.code` value stay consistent even if the `.message` changes. This also allows you to localize the messages as needed using the code.
192
192
 
193
193
  ## Testing
194
194
 
@@ -239,11 +239,11 @@ For iOS, you need to associate your app with your server. This amounts to setti
239
239
 
240
240
  ### Mobile API Endpoints
241
241
 
242
- There are 3 groups of API endpoints that your mobile application may consume.
242
+ There are 3 groups of API endpoints that your mobile application might consume.
243
243
 
244
244
  1. Unauthenticated (public) endpoints
245
245
  1. Authenticated (private) endpoints
246
- 1. Passey endpoints (for supporting authentication)
246
+ 1. Passkey endpoints (for supporting authentication)
247
247
 
248
248
  **Unauthenticated endpoints** can be consumed without any authentication.
249
249
 
@@ -253,7 +253,7 @@ There are 3 groups of API endpoints that your mobile application may consume.
253
253
 
254
254
  This gem supports the Passkey endpoints.
255
255
 
256
- ### Endpoints
256
+ ### Passkey Endpoints
257
257
 
258
258
  * [POST /passkeys/challenge](post-passkeys-challenge)
259
259
  * [POST /passkeys/register](post-passkeys-register)
@@ -291,12 +291,18 @@ Some endpoints return an `AuthResponse`, which has this JSON structure:
291
291
 
292
292
  Submit this to begin registration or authentication.
293
293
 
294
- Supply a `{ "username": "unique username" } ` to register a new credential.
294
+ #### Registration (register)
295
+
296
+ To begin registration of a new credential, supply a `{ "username": "unique username" }`.
295
297
  If all goes well, the JSON response will be the `options_for_create` from webauthn.
296
298
  If the username is already in use, or anything else goes wrong, an error with code `validation_errors` will be returned.
297
299
 
298
- Omit the `username` when authenticating (logging in).
299
- The JSON response will be the `options_for_get` from webauthn.
300
+ After receiving a successful response, follow up with a POST to `/passkeys/register`, below.
301
+
302
+ #### Authentication (login)
303
+ To begin authenticating an existing credential, omit the `username`. The JSON response will be the `options_for_get` from webauthn.
304
+
305
+ After receiving a successful response, follow up with a POST to `/passkeys/authenticate`, below.
300
306
 
301
307
  ### POST /passkeys/register
302
308
 
@@ -391,17 +397,17 @@ Possible **failure codes** (using the `ErrorResponse` structure) are:
391
397
 
392
398
  As it may not be possible to acess Passkey functionality in mobile simulators, this endpoint may be called to register a username while bypassing the normal challenge/response sequence.
393
399
 
394
- This endpoint only responds if DEBUG_LOGIN_REGEX is set in the server environment. It is **very insecure to set this variable in a production environment** as it bypasses all Passkey checks. It is only intended to be used during mobile application development.
400
+ This endpoint only responds if `DEBUG_LOGIN_REGEX` is set in the server environment. It is **very insecure to set this variable in a production environment** as it bypasses all Passkey checks. It is only intended to be used during mobile application development.
395
401
 
396
402
  To use this endpoint:
397
403
 
398
- 1. Set DEBUG_LOGIN_REGEX to a regex that matches any username you want to use during development - for example `^test(-\d+)?$` will match `test`, `test-1`, `test-123`, etc.
404
+ 1. Set `DEBUG_LOGIN_REGEX` to a regex that matches any username you want to use during development - for example `^test(-\d+)?$` will match `test`, `test-1`, `test-123`, etc.
399
405
 
400
- 1. In the mobile application, call this endpoint in stead of the /passkeys/challenge and /passkeys/register. The response is identicial to that of /passkeys/register.
406
+ 1. In the mobile application, call this endpoint in stead of the `/passkeys/challenge` and `/passkeys/register`. The response is identicial to that of `/passkeys/register`.
401
407
 
402
- 1. Use the response as if it was from /passkeys/register.
408
+ 1. Use the response as if it was from `/passkeys/register`.
403
409
 
404
- If you supply a username that doesn't match the DEBUG_LOGIN_REGEX, the endpoint will respond with an error.
410
+ If you supply a username that doesn't match the `DEBUG_LOGIN_REGEX`, the endpoint will respond with an error.
405
411
 
406
412
  Supply the following JSON structure:
407
413
 
@@ -425,19 +431,19 @@ Possible **failure codes** (using the `ErrorResponse` structure) are:
425
431
 
426
432
  As it may not be possible to acess Passkey functionality in mobile simulators, this endpoint may be called to login (authenticate) a username while bypassing the normal challenge/response sequence.
427
433
 
428
- This endpoint only responds if DEBUG_LOGIN_REGEX is set in the server environment. It is **very insecure to set this variable in a production environment** as it bypasses all Passkey checks. It is only intended to be used during mobile application development.
434
+ This endpoint only responds if `DEBUG_LOGIN_REGEX` is set in the server environment. It is **very insecure to set this variable in a production environment** as it bypasses all Passkey checks. It is only intended to be used during mobile application development.
429
435
 
430
436
  To use this endpoint:
431
437
 
432
438
  1. Manually create one or more PasskeysRails::Agent records in the database. A unique username is required for each.
433
439
 
434
- 1. Set DEBUG_LOGIN_REGEX to a regex that matches any username you want to use during development - for example `^test(-\d+)?$` will match `test`, `test-1`, `test-123`, etc.
440
+ 1. Set `DEBUG_LOGIN_REGEX` to a regex that matches any username you want to use during development - for example `^test(-\d+)?$` will match `test`, `test-1`, `test-123`, etc.
435
441
 
436
- 1. In the mobile application, call this endpoint in stead of the /passkeys/challenge and /passkeys/authenticate. The response is identicial to that of /passkeys/authenticate.
442
+ 1. In the mobile application, call this endpoint in stead of the `/passkeys/challenge` and `/passkeys/authenticate`. The response is identicial to that of `/passkeys/authenticate`.
437
443
 
438
- 1. Use the response as if it was from /passkeys/authenticate.
444
+ 1. Use the response as if it was from `/passkeys/authenticate`.
439
445
 
440
- If you supply a username that doesn't match the DEBUG_LOGIN_REGEX, the endpoint will respond with an error.
446
+ If you supply a username that doesn't match the `DEBUG_LOGIN_REGEX`, the endpoint will respond with an error.
441
447
 
442
448
  Supply the following JSON structure:
443
449
 
@@ -7,13 +7,19 @@ module PasskeysRails
7
7
  result = PasskeysRails::BeginChallenge.call!(username: challenge_params[:username])
8
8
 
9
9
  # Store the challenge so we can verify the future register or authentication request
10
- cookies[:passkeys_rails] = result.cookie_data
10
+ cookies.signed[:passkeys_rails] = {
11
+ value: result.cookie_data.to_json,
12
+ expire: Time.now.utc + (result.response.timeout / 1000),
13
+ secure: true,
14
+ httponly: true,
15
+ same_site: :strict
16
+ }
11
17
 
12
18
  render json: result.response.as_json
13
19
  end
14
20
 
15
21
  def register
16
- cookie_data = cookies["passkeys_rails"] || {}
22
+ cookie_data = JSON.parse(cookies.signed["passkeys_rails"] || "{}")
17
23
  result = PasskeysRails::FinishRegistration.call!(credential: attestation_credential_params.to_h,
18
24
  authenticatable_info: authenticatable_params&.to_h,
19
25
  username: cookie_data["username"],
@@ -25,7 +31,7 @@ module PasskeysRails
25
31
  end
26
32
 
27
33
  def authenticate
28
- cookie_data = cookies["passkeys_rails"] || {}
34
+ cookie_data = JSON.parse(cookies.signed["passkeys_rails"] || "{}")
29
35
  result = PasskeysRails::FinishAuthentication.call!(credential: authentication_params.to_h,
30
36
  challenge: cookie_data["challenge"])
31
37
 
@@ -1,3 +1,3 @@
1
1
  module PasskeysRails
2
- VERSION = "0.3.1".freeze
2
+ VERSION = "0.3.2".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: passkeys-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Troy Anderson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-30 00:00:00.000000000 Z
11
+ date: 2024-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,20 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '7.0'
19
+ version: '7.2'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 7.0.5
22
+ version: 7.2.1
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '7.0'
29
+ version: '7.2'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 7.0.5
32
+ version: 7.2.1
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: interactor
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -50,266 +50,280 @@ dependencies:
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: 2.7.1
53
+ version: 2.9.1
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: 2.7.1
60
+ version: 2.9.1
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: webauthn
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: 3.0.0
67
+ version: 3.1.0
68
68
  type: :runtime
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: 3.0.0
74
+ version: 3.1.0
75
+ - !ruby/object:Gem::Dependency
76
+ name: cbor
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: 0.5.9.8
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: 0.5.9.8
75
89
  - !ruby/object:Gem::Dependency
76
90
  name: dotenv
77
91
  requirement: !ruby/object:Gem::Requirement
78
92
  requirements:
79
93
  - - "~>"
80
94
  - !ruby/object:Gem::Version
81
- version: 2.8.1
95
+ version: 3.1.4
82
96
  type: :development
83
97
  prerelease: false
84
98
  version_requirements: !ruby/object:Gem::Requirement
85
99
  requirements:
86
100
  - - "~>"
87
101
  - !ruby/object:Gem::Version
88
- version: 2.8.1
102
+ version: 3.1.4
89
103
  - !ruby/object:Gem::Dependency
90
104
  name: puma
91
105
  requirement: !ruby/object:Gem::Requirement
92
106
  requirements:
93
107
  - - "~>"
94
108
  - !ruby/object:Gem::Version
95
- version: 5.6.5
109
+ version: 6.4.3
96
110
  type: :development
97
111
  prerelease: false
98
112
  version_requirements: !ruby/object:Gem::Requirement
99
113
  requirements:
100
114
  - - "~>"
101
115
  - !ruby/object:Gem::Version
102
- version: 5.6.5
116
+ version: 6.4.3
103
117
  - !ruby/object:Gem::Dependency
104
118
  name: rake
105
119
  requirement: !ruby/object:Gem::Requirement
106
120
  requirements:
107
121
  - - "~>"
108
122
  - !ruby/object:Gem::Version
109
- version: '13.0'
123
+ version: 13.2.1
110
124
  type: :development
111
125
  prerelease: false
112
126
  version_requirements: !ruby/object:Gem::Requirement
113
127
  requirements:
114
128
  - - "~>"
115
129
  - !ruby/object:Gem::Version
116
- version: '13.0'
130
+ version: 13.2.1
117
131
  - !ruby/object:Gem::Dependency
118
132
  name: sprockets-rails
119
133
  requirement: !ruby/object:Gem::Requirement
120
134
  requirements:
121
135
  - - "~>"
122
136
  - !ruby/object:Gem::Version
123
- version: 3.4.2
137
+ version: 3.5.2
124
138
  type: :development
125
139
  prerelease: false
126
140
  version_requirements: !ruby/object:Gem::Requirement
127
141
  requirements:
128
142
  - - "~>"
129
143
  - !ruby/object:Gem::Version
130
- version: 3.4.2
144
+ version: 3.5.2
131
145
  - !ruby/object:Gem::Dependency
132
146
  name: sqlite3
133
147
  requirement: !ruby/object:Gem::Requirement
134
148
  requirements:
135
149
  - - "~>"
136
150
  - !ruby/object:Gem::Version
137
- version: 1.6.3
151
+ version: 2.1.0
138
152
  type: :development
139
153
  prerelease: false
140
154
  version_requirements: !ruby/object:Gem::Requirement
141
155
  requirements:
142
156
  - - "~>"
143
157
  - !ruby/object:Gem::Version
144
- version: 1.6.3
158
+ version: 2.1.0
145
159
  - !ruby/object:Gem::Dependency
146
160
  name: codecov
147
161
  requirement: !ruby/object:Gem::Requirement
148
162
  requirements:
149
163
  - - "~>"
150
164
  - !ruby/object:Gem::Version
151
- version: 0.2.12
165
+ version: 0.6.0
152
166
  type: :development
153
167
  prerelease: false
154
168
  version_requirements: !ruby/object:Gem::Requirement
155
169
  requirements:
156
170
  - - "~>"
157
171
  - !ruby/object:Gem::Version
158
- version: 0.2.12
172
+ version: 0.6.0
159
173
  - !ruby/object:Gem::Dependency
160
174
  name: debug
161
175
  requirement: !ruby/object:Gem::Requirement
162
176
  requirements:
163
177
  - - "~>"
164
178
  - !ruby/object:Gem::Version
165
- version: 1.8.0
179
+ version: 1.9.2
166
180
  type: :development
167
181
  prerelease: false
168
182
  version_requirements: !ruby/object:Gem::Requirement
169
183
  requirements:
170
184
  - - "~>"
171
185
  - !ruby/object:Gem::Version
172
- version: 1.8.0
186
+ version: 1.9.2
173
187
  - !ruby/object:Gem::Dependency
174
188
  name: simplecov
175
189
  requirement: !ruby/object:Gem::Requirement
176
190
  requirements:
177
191
  - - "~>"
178
192
  - !ruby/object:Gem::Version
179
- version: 0.22.0
193
+ version: 0.21.2
180
194
  type: :development
181
195
  prerelease: false
182
196
  version_requirements: !ruby/object:Gem::Requirement
183
197
  requirements:
184
198
  - - "~>"
185
199
  - !ruby/object:Gem::Version
186
- version: 0.22.0
200
+ version: 0.21.2
187
201
  - !ruby/object:Gem::Dependency
188
202
  name: reek
189
203
  requirement: !ruby/object:Gem::Requirement
190
204
  requirements:
191
205
  - - "~>"
192
206
  - !ruby/object:Gem::Version
193
- version: 6.1.4
207
+ version: 6.3.0
194
208
  type: :development
195
209
  prerelease: false
196
210
  version_requirements: !ruby/object:Gem::Requirement
197
211
  requirements:
198
212
  - - "~>"
199
213
  - !ruby/object:Gem::Version
200
- version: 6.1.4
214
+ version: 6.3.0
201
215
  - !ruby/object:Gem::Dependency
202
216
  name: factory_bot_rails
203
217
  requirement: !ruby/object:Gem::Requirement
204
218
  requirements:
205
219
  - - "~>"
206
220
  - !ruby/object:Gem::Version
207
- version: 6.2.0
221
+ version: 6.4.3
208
222
  type: :development
209
223
  prerelease: false
210
224
  version_requirements: !ruby/object:Gem::Requirement
211
225
  requirements:
212
226
  - - "~>"
213
227
  - !ruby/object:Gem::Version
214
- version: 6.2.0
228
+ version: 6.4.3
215
229
  - !ruby/object:Gem::Dependency
216
230
  name: generator_spec
217
231
  requirement: !ruby/object:Gem::Requirement
218
232
  requirements:
219
233
  - - "~>"
220
234
  - !ruby/object:Gem::Version
221
- version: 0.9.4
235
+ version: 0.10.0
222
236
  type: :development
223
237
  prerelease: false
224
238
  version_requirements: !ruby/object:Gem::Requirement
225
239
  requirements:
226
240
  - - "~>"
227
241
  - !ruby/object:Gem::Version
228
- version: 0.9.4
242
+ version: 0.10.0
229
243
  - !ruby/object:Gem::Dependency
230
244
  name: rspec
231
245
  requirement: !ruby/object:Gem::Requirement
232
246
  requirements:
233
247
  - - "~>"
234
248
  - !ruby/object:Gem::Version
235
- version: '3.0'
249
+ version: 3.13.0
236
250
  type: :development
237
251
  prerelease: false
238
252
  version_requirements: !ruby/object:Gem::Requirement
239
253
  requirements:
240
254
  - - "~>"
241
255
  - !ruby/object:Gem::Version
242
- version: '3.0'
256
+ version: 3.13.0
243
257
  - !ruby/object:Gem::Dependency
244
258
  name: rspec-rails
245
259
  requirement: !ruby/object:Gem::Requirement
246
260
  requirements:
247
261
  - - "~>"
248
262
  - !ruby/object:Gem::Version
249
- version: 6.0.3
263
+ version: 7.0.1
250
264
  type: :development
251
265
  prerelease: false
252
266
  version_requirements: !ruby/object:Gem::Requirement
253
267
  requirements:
254
268
  - - "~>"
255
269
  - !ruby/object:Gem::Version
256
- version: 6.0.3
270
+ version: 7.0.1
257
271
  - !ruby/object:Gem::Dependency
258
272
  name: timecop
259
273
  requirement: !ruby/object:Gem::Requirement
260
274
  requirements:
261
275
  - - "~>"
262
276
  - !ruby/object:Gem::Version
263
- version: 0.9.6
277
+ version: 0.9.10
264
278
  type: :development
265
279
  prerelease: false
266
280
  version_requirements: !ruby/object:Gem::Requirement
267
281
  requirements:
268
282
  - - "~>"
269
283
  - !ruby/object:Gem::Version
270
- version: 0.9.6
284
+ version: 0.9.10
271
285
  - !ruby/object:Gem::Dependency
272
286
  name: rubocop
273
287
  requirement: !ruby/object:Gem::Requirement
274
288
  requirements:
275
289
  - - "~>"
276
290
  - !ruby/object:Gem::Version
277
- version: '1.21'
291
+ version: 1.66.1
278
292
  type: :development
279
293
  prerelease: false
280
294
  version_requirements: !ruby/object:Gem::Requirement
281
295
  requirements:
282
296
  - - "~>"
283
297
  - !ruby/object:Gem::Version
284
- version: '1.21'
298
+ version: 1.66.1
285
299
  - !ruby/object:Gem::Dependency
286
300
  name: rubocop-performance
287
301
  requirement: !ruby/object:Gem::Requirement
288
302
  requirements:
289
303
  - - "~>"
290
304
  - !ruby/object:Gem::Version
291
- version: 1.18.0
305
+ version: 1.22.1
292
306
  type: :development
293
307
  prerelease: false
294
308
  version_requirements: !ruby/object:Gem::Requirement
295
309
  requirements:
296
310
  - - "~>"
297
311
  - !ruby/object:Gem::Version
298
- version: 1.18.0
312
+ version: 1.22.1
299
313
  - !ruby/object:Gem::Dependency
300
314
  name: rubocop-rails
301
315
  requirement: !ruby/object:Gem::Requirement
302
316
  requirements:
303
317
  - - "~>"
304
318
  - !ruby/object:Gem::Version
305
- version: 2.20.2
319
+ version: 2.26.2
306
320
  type: :development
307
321
  prerelease: false
308
322
  version_requirements: !ruby/object:Gem::Requirement
309
323
  requirements:
310
324
  - - "~>"
311
325
  - !ruby/object:Gem::Version
312
- version: 2.20.2
326
+ version: 2.26.2
313
327
  - !ruby/object:Gem::Dependency
314
328
  name: rubocop-rake
315
329
  requirement: !ruby/object:Gem::Requirement
@@ -325,19 +339,61 @@ dependencies:
325
339
  - !ruby/object:Gem::Version
326
340
  version: 0.6.0
327
341
  - !ruby/object:Gem::Dependency
328
- name: rubocop-rspec
342
+ name: rubocop-rspec_rails
343
+ requirement: !ruby/object:Gem::Requirement
344
+ requirements:
345
+ - - "~>"
346
+ - !ruby/object:Gem::Version
347
+ version: 2.30.0
348
+ type: :development
349
+ prerelease: false
350
+ version_requirements: !ruby/object:Gem::Requirement
351
+ requirements:
352
+ - - "~>"
353
+ - !ruby/object:Gem::Version
354
+ version: 2.30.0
355
+ - !ruby/object:Gem::Dependency
356
+ name: rubocop-factory_bot
357
+ requirement: !ruby/object:Gem::Requirement
358
+ requirements:
359
+ - - "~>"
360
+ - !ruby/object:Gem::Version
361
+ version: 2.26.1
362
+ type: :development
363
+ prerelease: false
364
+ version_requirements: !ruby/object:Gem::Requirement
365
+ requirements:
366
+ - - "~>"
367
+ - !ruby/object:Gem::Version
368
+ version: 2.26.1
369
+ - !ruby/object:Gem::Dependency
370
+ name: danger-changelog
371
+ requirement: !ruby/object:Gem::Requirement
372
+ requirements:
373
+ - - "~>"
374
+ - !ruby/object:Gem::Version
375
+ version: 0.7.0
376
+ type: :development
377
+ prerelease: false
378
+ version_requirements: !ruby/object:Gem::Requirement
379
+ requirements:
380
+ - - "~>"
381
+ - !ruby/object:Gem::Version
382
+ version: 0.7.0
383
+ - !ruby/object:Gem::Dependency
384
+ name: danger-toc
329
385
  requirement: !ruby/object:Gem::Requirement
330
386
  requirements:
331
387
  - - "~>"
332
388
  - !ruby/object:Gem::Version
333
- version: 2.22.0
389
+ version: 0.2.0
334
390
  type: :development
335
391
  prerelease: false
336
392
  version_requirements: !ruby/object:Gem::Requirement
337
393
  requirements:
338
394
  - - "~>"
339
395
  - !ruby/object:Gem::Version
340
- version: 2.22.0
396
+ version: 0.2.0
341
397
  description: Devise is awesome, but we don't need all that UI/UX for PassKeys. This
342
398
  gem is to make it easy to provide a back end that authenticates a mobile front end
343
399
  with PassKeys.
@@ -409,7 +465,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
409
465
  - !ruby/object:Gem::Version
410
466
  version: '0'
411
467
  requirements: []
412
- rubygems_version: 3.4.17
468
+ rubygems_version: 3.4.21
413
469
  signing_key:
414
470
  specification_version: 4
415
471
  summary: PassKey authentication back end with simple API