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