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 +4 -4
- data/CHANGELOG.md +38 -33
- data/README.md +23 -17
- data/app/controllers/passkeys_rails/passkeys_controller.rb +9 -3
- data/lib/passkeys_rails/version.rb +1 -1
- metadata +104 -48
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8aeb76eb5817dbc1b1fac8a6205b5154772bd04d91f45596952b9b10e319f997
|
4
|
+
data.tar.gz: 0f3eb68558500c17ea980a1a1e0b00db8ddf13dfead9ef8568fb8a8d295f96ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f136f27de81f280d9d8e55e96b2f7c4729ded92a7b9c0339f0c766d0b8604732de430dd5f6e082ed700dca9422cc3c1af975dfae74aa267757d955b3bc15733
|
7
|
+
data.tar.gz: 92587364bdb4f41aa35dfaeef432bab42e77d6dd4a8e49b6797b12bd2a42f4ef0ecd9ed6dca5575abf3e068c0005c998d863f3eb7b1443eb4d01ac2271f73205
|
data/CHANGELOG.md
CHANGED
@@ -1,60 +1,65 @@
|
|
1
|
-
### 0.3.
|
1
|
+
### 0.3.2 (2024/10/01)
|
2
2
|
|
3
|
-
|
4
|
-
|
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.
|
6
|
+
### 0.3.1 (2023/11/30)
|
9
7
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
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.
|
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
|
-
|
26
|
+
- Added passkeys/debug_login functionality.
|
22
27
|
|
23
|
-
### 0.1.7
|
28
|
+
### 0.1.7 (2023/07/26)
|
24
29
|
|
25
|
-
|
26
|
-
|
27
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
44
|
+
- Changed namespace from Passkeys::Rails to PasskeysRails
|
40
45
|
|
41
|
-
### 0.1.3
|
46
|
+
### 0.1.3 (2023/07/23)
|
42
47
|
|
43
|
-
|
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
|
-
|
53
|
+
- Restructured lib directory.
|
49
54
|
|
50
|
-
|
55
|
+
- Fixed naming convention for gem/gemspec.
|
51
56
|
|
52
|
-
|
57
|
+
- Fixed exception handling.
|
53
58
|
|
54
|
-
### 0.1.1
|
59
|
+
### 0.1.1 (2023/07/23)
|
55
60
|
|
56
|
-
|
61
|
+
- Fixed dependency
|
57
62
|
|
58
|
-
### 0.1.0
|
63
|
+
### 0.1.0 (2023/07/23)
|
59
64
|
|
60
|
-
|
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
|
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,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.
|
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:
|
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.
|
19
|
+
version: '7.2'
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 7.
|
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.
|
29
|
+
version: '7.2'
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 7.
|
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.
|
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.
|
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.
|
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.
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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:
|
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:
|
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:
|
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:
|
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.
|
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.
|
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:
|
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:
|
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.
|
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.
|
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.
|
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.
|
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-
|
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.
|
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.
|
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.
|
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
|