passkeys-rails 0.3.1 → 0.3.3

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: 4e61d5a7a298fa14ddb50a83501d81e6bb8a26484d75502ebbc738817ce30683
4
+ data.tar.gz: 80dcbda69e419843dd65f90c585260f3aaf03c8ec409036615b8257fb5d4134a
5
5
  SHA512:
6
- metadata.gz: bdf2974d31cb561bbeabaf599a29d99bb9cda2e4050cff913cbe5104a747c4eba2eb11a53936fcef013861ede39051208a2edbc3062a6b25a34476678388eba9
7
- data.tar.gz: 149c795d0b56a7569170160426b466ff42abc75bcb2f46fc5adae3b35ad3eb9d6d465ce05f0834cbbfaf3bc30944d809b776c1112913c0e490175c316784e859
6
+ metadata.gz: 49b56d3d37c4d2d8e78cbc6e67bbfb3df72c17f7cb00d8398ee684cfb5d5f81b94b2ef68eb7d16f69e0aac23584f77937a98cc94ba9d89dda70dd021021100ab
7
+ data.tar.gz: 763ffc7c99aff21990d9a51416e21aaa8e840a67ddd5eaa0c05761a8704d63f0a5be5c81ee140d54e3b3c15d8fb367bf5344551dc011268bdfe9327869461f41
data/CHANGELOG.md CHANGED
@@ -1,60 +1,70 @@
1
- ### 0.3.1
1
+ ### 0.3.3 (2025/01/13)
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
+ - Avoid double encoding the auth challenge
4
+ - Relax rails version constraint
7
5
 
8
- ### 0.3.0
6
+ ### 0.3.2 (2024/10/01)
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
+ - Changed from unsigned cookies to short lived signed cookies
9
+ - Added RELEASING.md
14
10
 
15
- ### 0.2.1
11
+ ### 0.3.1 (2023/11/30)
12
+
13
+ - Fixed a bug in reading session/cookie variables
14
+ - Added webauthn configuration parameters to this gem's configuration
15
+ - Moved configuration to its own class
16
+ - Added more info to the README
17
+
18
+ ### 0.3.0 (2023/08/01)
19
+
20
+ - Added debug_register endpoint.
21
+ - Fixed authenticatable_params for register enpoint.
22
+ - Added notifications to certain controller actions.
23
+ - Improved spec error helper.
24
+
25
+ ### 0.2.1 (2023/07/29)
16
26
 
17
27
  Added ability to pass either the auth token string or a request with one in the header to authenticate methods.
18
28
 
19
- ### 0.2.0
29
+ ### 0.2.0 (2023/07/28)
20
30
 
21
- * Added passkeys/debug_login functionality.
31
+ - Added passkeys/debug_login functionality.
22
32
 
23
- ### 0.1.7
33
+ ### 0.1.7 (2023/07/26)
24
34
 
25
- * Added IntegrationHelpers to support client testing.
26
- * Updated methods for interfacing with Rails client app.
27
- * Changed route path added by the generator.
35
+ - Added IntegrationHelpers to support client testing.
36
+ - Updated methods for interfacing with Rails client app.
37
+ - Changed route path added by the generator.
28
38
 
29
- ### 0.1.6
39
+ ### 0.1.6 (2023/07/26)
30
40
 
31
- * Added default_class and class_whitelist config parameters.
41
+ - Added default_class and class_whitelist config parameters.
32
42
 
33
- ### 0.1.5
43
+ ### 0.1.5 (2023/07/24)
34
44
 
35
- * Updated validation to ensure the agent has completed registration to be considered valid.
45
+ - Updated validation to ensure the agent has completed registration to be considered valid.
36
46
 
37
- ### 0.1.4
47
+ ### 0.1.4 (2023/07/23)
38
48
 
39
- * Changed namespace from Passkeys::Rails to PasskeysRails
49
+ - Changed namespace from Passkeys::Rails to PasskeysRails
40
50
 
41
- ### 0.1.3
51
+ ### 0.1.3 (2023/07/23)
42
52
 
43
- * More restructuring and fixed issue where autoloading failed
53
+ - More restructuring and fixed issue where autoloading failed
44
54
  during client app initialization.
45
55
 
46
- ### 0.1.2
56
+ ### 0.1.2 (2023/07/23)
47
57
 
48
- * Restructured lib directory.
58
+ - Restructured lib directory.
49
59
 
50
- * Fixed naming convention for gem/gemspec.
60
+ - Fixed naming convention for gem/gemspec.
51
61
 
52
- * Fixed exception handling.
62
+ - Fixed exception handling.
53
63
 
54
- ### 0.1.1
64
+ ### 0.1.1 (2023/07/23)
55
65
 
56
- * Fixed dependency
66
+ - Fixed dependency
57
67
 
58
- ### 0.1.0
68
+ ### 0.1.0 (2023/07/23)
59
69
 
60
- * Initial release - looking for feedback
70
+ - 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
 
@@ -28,7 +28,7 @@ module PasskeysRails
28
28
  def cookie_data(options)
29
29
  {
30
30
  username:,
31
- challenge: WebAuthn.standard_encoder.encode(options.challenge)
31
+ challenge: options.challenge
32
32
  }
33
33
  end
34
34
  end
@@ -1,3 +1,3 @@
1
1
  module PasskeysRails
2
- VERSION = "0.3.1".freeze
2
+ VERSION = "0.3.3".freeze
3
3
  end
metadata CHANGED
@@ -1,35 +1,29 @@
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.3
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: 2025-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '7.0'
20
17
  - - ">="
21
18
  - !ruby/object:Gem::Version
22
- version: 7.0.5
19
+ version: '7.2'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
- - - "~>"
28
- - !ruby/object:Gem::Version
29
- version: '7.0'
30
24
  - - ">="
31
25
  - !ruby/object:Gem::Version
32
- version: 7.0.5
26
+ version: '7.2'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: interactor
35
29
  requirement: !ruby/object:Gem::Requirement
@@ -50,266 +44,280 @@ dependencies:
50
44
  requirements:
51
45
  - - "~>"
52
46
  - !ruby/object:Gem::Version
53
- version: 2.7.1
47
+ version: 2.9.1
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
51
  requirements:
58
52
  - - "~>"
59
53
  - !ruby/object:Gem::Version
60
- version: 2.7.1
54
+ version: 2.9.1
61
55
  - !ruby/object:Gem::Dependency
62
56
  name: webauthn
63
57
  requirement: !ruby/object:Gem::Requirement
64
58
  requirements:
65
59
  - - "~>"
66
60
  - !ruby/object:Gem::Version
67
- version: 3.0.0
61
+ version: 3.1.0
68
62
  type: :runtime
69
63
  prerelease: false
70
64
  version_requirements: !ruby/object:Gem::Requirement
71
65
  requirements:
72
66
  - - "~>"
73
67
  - !ruby/object:Gem::Version
74
- version: 3.0.0
68
+ version: 3.1.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: cbor
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.5.9.8
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.5.9.8
75
83
  - !ruby/object:Gem::Dependency
76
84
  name: dotenv
77
85
  requirement: !ruby/object:Gem::Requirement
78
86
  requirements:
79
87
  - - "~>"
80
88
  - !ruby/object:Gem::Version
81
- version: 2.8.1
89
+ version: 3.1.4
82
90
  type: :development
83
91
  prerelease: false
84
92
  version_requirements: !ruby/object:Gem::Requirement
85
93
  requirements:
86
94
  - - "~>"
87
95
  - !ruby/object:Gem::Version
88
- version: 2.8.1
96
+ version: 3.1.4
89
97
  - !ruby/object:Gem::Dependency
90
98
  name: puma
91
99
  requirement: !ruby/object:Gem::Requirement
92
100
  requirements:
93
101
  - - "~>"
94
102
  - !ruby/object:Gem::Version
95
- version: 5.6.5
103
+ version: 6.4.3
96
104
  type: :development
97
105
  prerelease: false
98
106
  version_requirements: !ruby/object:Gem::Requirement
99
107
  requirements:
100
108
  - - "~>"
101
109
  - !ruby/object:Gem::Version
102
- version: 5.6.5
110
+ version: 6.4.3
103
111
  - !ruby/object:Gem::Dependency
104
112
  name: rake
105
113
  requirement: !ruby/object:Gem::Requirement
106
114
  requirements:
107
115
  - - "~>"
108
116
  - !ruby/object:Gem::Version
109
- version: '13.0'
117
+ version: 13.2.1
110
118
  type: :development
111
119
  prerelease: false
112
120
  version_requirements: !ruby/object:Gem::Requirement
113
121
  requirements:
114
122
  - - "~>"
115
123
  - !ruby/object:Gem::Version
116
- version: '13.0'
124
+ version: 13.2.1
117
125
  - !ruby/object:Gem::Dependency
118
126
  name: sprockets-rails
119
127
  requirement: !ruby/object:Gem::Requirement
120
128
  requirements:
121
129
  - - "~>"
122
130
  - !ruby/object:Gem::Version
123
- version: 3.4.2
131
+ version: 3.5.2
124
132
  type: :development
125
133
  prerelease: false
126
134
  version_requirements: !ruby/object:Gem::Requirement
127
135
  requirements:
128
136
  - - "~>"
129
137
  - !ruby/object:Gem::Version
130
- version: 3.4.2
138
+ version: 3.5.2
131
139
  - !ruby/object:Gem::Dependency
132
140
  name: sqlite3
133
141
  requirement: !ruby/object:Gem::Requirement
134
142
  requirements:
135
143
  - - "~>"
136
144
  - !ruby/object:Gem::Version
137
- version: 1.6.3
145
+ version: 2.1.0
138
146
  type: :development
139
147
  prerelease: false
140
148
  version_requirements: !ruby/object:Gem::Requirement
141
149
  requirements:
142
150
  - - "~>"
143
151
  - !ruby/object:Gem::Version
144
- version: 1.6.3
152
+ version: 2.1.0
145
153
  - !ruby/object:Gem::Dependency
146
154
  name: codecov
147
155
  requirement: !ruby/object:Gem::Requirement
148
156
  requirements:
149
157
  - - "~>"
150
158
  - !ruby/object:Gem::Version
151
- version: 0.2.12
159
+ version: 0.6.0
152
160
  type: :development
153
161
  prerelease: false
154
162
  version_requirements: !ruby/object:Gem::Requirement
155
163
  requirements:
156
164
  - - "~>"
157
165
  - !ruby/object:Gem::Version
158
- version: 0.2.12
166
+ version: 0.6.0
159
167
  - !ruby/object:Gem::Dependency
160
168
  name: debug
161
169
  requirement: !ruby/object:Gem::Requirement
162
170
  requirements:
163
171
  - - "~>"
164
172
  - !ruby/object:Gem::Version
165
- version: 1.8.0
173
+ version: 1.9.2
166
174
  type: :development
167
175
  prerelease: false
168
176
  version_requirements: !ruby/object:Gem::Requirement
169
177
  requirements:
170
178
  - - "~>"
171
179
  - !ruby/object:Gem::Version
172
- version: 1.8.0
180
+ version: 1.9.2
173
181
  - !ruby/object:Gem::Dependency
174
182
  name: simplecov
175
183
  requirement: !ruby/object:Gem::Requirement
176
184
  requirements:
177
185
  - - "~>"
178
186
  - !ruby/object:Gem::Version
179
- version: 0.22.0
187
+ version: 0.21.2
180
188
  type: :development
181
189
  prerelease: false
182
190
  version_requirements: !ruby/object:Gem::Requirement
183
191
  requirements:
184
192
  - - "~>"
185
193
  - !ruby/object:Gem::Version
186
- version: 0.22.0
194
+ version: 0.21.2
187
195
  - !ruby/object:Gem::Dependency
188
196
  name: reek
189
197
  requirement: !ruby/object:Gem::Requirement
190
198
  requirements:
191
199
  - - "~>"
192
200
  - !ruby/object:Gem::Version
193
- version: 6.1.4
201
+ version: 6.3.0
194
202
  type: :development
195
203
  prerelease: false
196
204
  version_requirements: !ruby/object:Gem::Requirement
197
205
  requirements:
198
206
  - - "~>"
199
207
  - !ruby/object:Gem::Version
200
- version: 6.1.4
208
+ version: 6.3.0
201
209
  - !ruby/object:Gem::Dependency
202
210
  name: factory_bot_rails
203
211
  requirement: !ruby/object:Gem::Requirement
204
212
  requirements:
205
213
  - - "~>"
206
214
  - !ruby/object:Gem::Version
207
- version: 6.2.0
215
+ version: 6.4.3
208
216
  type: :development
209
217
  prerelease: false
210
218
  version_requirements: !ruby/object:Gem::Requirement
211
219
  requirements:
212
220
  - - "~>"
213
221
  - !ruby/object:Gem::Version
214
- version: 6.2.0
222
+ version: 6.4.3
215
223
  - !ruby/object:Gem::Dependency
216
224
  name: generator_spec
217
225
  requirement: !ruby/object:Gem::Requirement
218
226
  requirements:
219
227
  - - "~>"
220
228
  - !ruby/object:Gem::Version
221
- version: 0.9.4
229
+ version: 0.10.0
222
230
  type: :development
223
231
  prerelease: false
224
232
  version_requirements: !ruby/object:Gem::Requirement
225
233
  requirements:
226
234
  - - "~>"
227
235
  - !ruby/object:Gem::Version
228
- version: 0.9.4
236
+ version: 0.10.0
229
237
  - !ruby/object:Gem::Dependency
230
238
  name: rspec
231
239
  requirement: !ruby/object:Gem::Requirement
232
240
  requirements:
233
241
  - - "~>"
234
242
  - !ruby/object:Gem::Version
235
- version: '3.0'
243
+ version: 3.13.0
236
244
  type: :development
237
245
  prerelease: false
238
246
  version_requirements: !ruby/object:Gem::Requirement
239
247
  requirements:
240
248
  - - "~>"
241
249
  - !ruby/object:Gem::Version
242
- version: '3.0'
250
+ version: 3.13.0
243
251
  - !ruby/object:Gem::Dependency
244
252
  name: rspec-rails
245
253
  requirement: !ruby/object:Gem::Requirement
246
254
  requirements:
247
255
  - - "~>"
248
256
  - !ruby/object:Gem::Version
249
- version: 6.0.3
257
+ version: 7.0.1
250
258
  type: :development
251
259
  prerelease: false
252
260
  version_requirements: !ruby/object:Gem::Requirement
253
261
  requirements:
254
262
  - - "~>"
255
263
  - !ruby/object:Gem::Version
256
- version: 6.0.3
264
+ version: 7.0.1
257
265
  - !ruby/object:Gem::Dependency
258
266
  name: timecop
259
267
  requirement: !ruby/object:Gem::Requirement
260
268
  requirements:
261
269
  - - "~>"
262
270
  - !ruby/object:Gem::Version
263
- version: 0.9.6
271
+ version: 0.9.10
264
272
  type: :development
265
273
  prerelease: false
266
274
  version_requirements: !ruby/object:Gem::Requirement
267
275
  requirements:
268
276
  - - "~>"
269
277
  - !ruby/object:Gem::Version
270
- version: 0.9.6
278
+ version: 0.9.10
271
279
  - !ruby/object:Gem::Dependency
272
280
  name: rubocop
273
281
  requirement: !ruby/object:Gem::Requirement
274
282
  requirements:
275
283
  - - "~>"
276
284
  - !ruby/object:Gem::Version
277
- version: '1.21'
285
+ version: 1.66.1
278
286
  type: :development
279
287
  prerelease: false
280
288
  version_requirements: !ruby/object:Gem::Requirement
281
289
  requirements:
282
290
  - - "~>"
283
291
  - !ruby/object:Gem::Version
284
- version: '1.21'
292
+ version: 1.66.1
285
293
  - !ruby/object:Gem::Dependency
286
294
  name: rubocop-performance
287
295
  requirement: !ruby/object:Gem::Requirement
288
296
  requirements:
289
297
  - - "~>"
290
298
  - !ruby/object:Gem::Version
291
- version: 1.18.0
299
+ version: 1.22.1
292
300
  type: :development
293
301
  prerelease: false
294
302
  version_requirements: !ruby/object:Gem::Requirement
295
303
  requirements:
296
304
  - - "~>"
297
305
  - !ruby/object:Gem::Version
298
- version: 1.18.0
306
+ version: 1.22.1
299
307
  - !ruby/object:Gem::Dependency
300
308
  name: rubocop-rails
301
309
  requirement: !ruby/object:Gem::Requirement
302
310
  requirements:
303
311
  - - "~>"
304
312
  - !ruby/object:Gem::Version
305
- version: 2.20.2
313
+ version: 2.26.2
306
314
  type: :development
307
315
  prerelease: false
308
316
  version_requirements: !ruby/object:Gem::Requirement
309
317
  requirements:
310
318
  - - "~>"
311
319
  - !ruby/object:Gem::Version
312
- version: 2.20.2
320
+ version: 2.26.2
313
321
  - !ruby/object:Gem::Dependency
314
322
  name: rubocop-rake
315
323
  requirement: !ruby/object:Gem::Requirement
@@ -325,19 +333,61 @@ dependencies:
325
333
  - !ruby/object:Gem::Version
326
334
  version: 0.6.0
327
335
  - !ruby/object:Gem::Dependency
328
- name: rubocop-rspec
336
+ name: rubocop-rspec_rails
337
+ requirement: !ruby/object:Gem::Requirement
338
+ requirements:
339
+ - - "~>"
340
+ - !ruby/object:Gem::Version
341
+ version: 2.30.0
342
+ type: :development
343
+ prerelease: false
344
+ version_requirements: !ruby/object:Gem::Requirement
345
+ requirements:
346
+ - - "~>"
347
+ - !ruby/object:Gem::Version
348
+ version: 2.30.0
349
+ - !ruby/object:Gem::Dependency
350
+ name: rubocop-factory_bot
351
+ requirement: !ruby/object:Gem::Requirement
352
+ requirements:
353
+ - - "~>"
354
+ - !ruby/object:Gem::Version
355
+ version: 2.26.1
356
+ type: :development
357
+ prerelease: false
358
+ version_requirements: !ruby/object:Gem::Requirement
359
+ requirements:
360
+ - - "~>"
361
+ - !ruby/object:Gem::Version
362
+ version: 2.26.1
363
+ - !ruby/object:Gem::Dependency
364
+ name: danger-changelog
365
+ requirement: !ruby/object:Gem::Requirement
366
+ requirements:
367
+ - - "~>"
368
+ - !ruby/object:Gem::Version
369
+ version: 0.7.0
370
+ type: :development
371
+ prerelease: false
372
+ version_requirements: !ruby/object:Gem::Requirement
373
+ requirements:
374
+ - - "~>"
375
+ - !ruby/object:Gem::Version
376
+ version: 0.7.0
377
+ - !ruby/object:Gem::Dependency
378
+ name: danger-toc
329
379
  requirement: !ruby/object:Gem::Requirement
330
380
  requirements:
331
381
  - - "~>"
332
382
  - !ruby/object:Gem::Version
333
- version: 2.22.0
383
+ version: 0.2.0
334
384
  type: :development
335
385
  prerelease: false
336
386
  version_requirements: !ruby/object:Gem::Requirement
337
387
  requirements:
338
388
  - - "~>"
339
389
  - !ruby/object:Gem::Version
340
- version: 2.22.0
390
+ version: 0.2.0
341
391
  description: Devise is awesome, but we don't need all that UI/UX for PassKeys. This
342
392
  gem is to make it easy to provide a back end that authenticates a mobile front end
343
393
  with PassKeys.
@@ -409,7 +459,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
409
459
  - !ruby/object:Gem::Version
410
460
  version: '0'
411
461
  requirements: []
412
- rubygems_version: 3.4.17
462
+ rubygems_version: 3.4.21
413
463
  signing_key:
414
464
  specification_version: 4
415
465
  summary: PassKey authentication back end with simple API