passkeys-rails 0.3.1 → 0.3.2

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: 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