passkeys-rails 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|