passkeys-rails 0.3.1 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +43 -33
- data/README.md +23 -17
- data/app/controllers/passkeys_rails/passkeys_controller.rb +9 -3
- data/app/interactors/passkeys_rails/begin_challenge.rb +1 -1
- data/lib/passkeys_rails/version.rb +1 -1
- metadata +102 -52
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e61d5a7a298fa14ddb50a83501d81e6bb8a26484d75502ebbc738817ce30683
|
4
|
+
data.tar.gz: 80dcbda69e419843dd65f90c585260f3aaf03c8ec409036615b8257fb5d4134a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 49b56d3d37c4d2d8e78cbc6e67bbfb3df72c17f7cb00d8398ee684cfb5d5f81b94b2ef68eb7d16f69e0aac23584f77937a98cc94ba9d89dda70dd021021100ab
|
7
|
+
data.tar.gz: 763ffc7c99aff21990d9a51416e21aaa8e840a67ddd5eaa0c05761a8704d63f0a5be5c81ee140d54e3b3c15d8fb367bf5344551dc011268bdfe9327869461f41
|
data/CHANGELOG.md
CHANGED
@@ -1,60 +1,70 @@
|
|
1
|
-
### 0.3.
|
1
|
+
### 0.3.3 (2025/01/13)
|
2
2
|
|
3
|
-
|
4
|
-
|
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.
|
6
|
+
### 0.3.2 (2024/10/01)
|
9
7
|
|
10
|
-
|
11
|
-
|
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.
|
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
|
-
|
31
|
+
- Added passkeys/debug_login functionality.
|
22
32
|
|
23
|
-
### 0.1.7
|
33
|
+
### 0.1.7 (2023/07/26)
|
24
34
|
|
25
|
-
|
26
|
-
|
27
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
49
|
+
- Changed namespace from Passkeys::Rails to PasskeysRails
|
40
50
|
|
41
|
-
### 0.1.3
|
51
|
+
### 0.1.3 (2023/07/23)
|
42
52
|
|
43
|
-
|
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
|
-
|
58
|
+
- Restructured lib directory.
|
49
59
|
|
50
|
-
|
60
|
+
- Fixed naming convention for gem/gemspec.
|
51
61
|
|
52
|
-
|
62
|
+
- Fixed exception handling.
|
53
63
|
|
54
|
-
### 0.1.1
|
64
|
+
### 0.1.1 (2023/07/23)
|
55
65
|
|
56
|
-
|
66
|
+
- Fixed dependency
|
57
67
|
|
58
|
-
### 0.1.0
|
68
|
+
### 0.1.0 (2023/07/23)
|
59
69
|
|
60
|
-
|
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
|
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
|
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.
|
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
|
-
|
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
|
-
|
299
|
-
|
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
|
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
|
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
|
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
|
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
|
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
|
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] =
|
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
|
|
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.
|
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:
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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:
|
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:
|
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:
|
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:
|
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.
|
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.
|
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:
|
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:
|
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.
|
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.
|
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.
|
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.
|
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-
|
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.
|
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.
|
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.
|
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
|