devise-webauthn 0.0.0 → 0.1.0

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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +75 -0
  3. data/.gitignore +14 -0
  4. data/.rspec +0 -1
  5. data/.rubocop.yml +38 -0
  6. data/.ruby-version +1 -0
  7. data/Appraisals +25 -0
  8. data/CHANGELOG.md +7 -0
  9. data/Gemfile +19 -1
  10. data/Gemfile.lock +363 -0
  11. data/LICENSE.txt +1 -1
  12. data/README.md +121 -7
  13. data/Rakefile +3 -1
  14. data/app/controllers/devise/passkeys_controller.rb +57 -0
  15. data/app/views/devise/passkeys/new.html.erb +5 -0
  16. data/app/views/devise/sessions/new.html.erb +28 -0
  17. data/bin/console +1 -0
  18. data/bin/rails +15 -0
  19. data/config/locales/en.yml +8 -0
  20. data/config.ru +10 -0
  21. data/devise-webauthn.gemspec +10 -10
  22. data/gemfiles/rails_7_1.gemfile +23 -0
  23. data/gemfiles/rails_7_2.gemfile +21 -0
  24. data/gemfiles/rails_8_0.gemfile +21 -0
  25. data/gemfiles/rails_edge.gemfile +21 -0
  26. data/lib/devise/models/passkey_authenticatable.rb +22 -0
  27. data/lib/devise/strategies/passkey_authenticatable.rb +45 -0
  28. data/lib/devise/webauthn/engine.rb +30 -0
  29. data/lib/devise/webauthn/helpers/credentials_helper.rb +77 -0
  30. data/lib/devise/webauthn/routes.rb +13 -0
  31. data/lib/devise/webauthn/test/authenticator_helpers.rb +17 -0
  32. data/lib/devise/webauthn/url_helpers.rb +44 -0
  33. data/lib/devise/webauthn/version.rb +3 -1
  34. data/lib/devise/webauthn.rb +13 -3
  35. data/lib/generators/devise/webauthn/controllers_generator.rb +29 -0
  36. data/lib/generators/devise/webauthn/install/install_generator.rb +39 -0
  37. data/lib/generators/devise/webauthn/install/templates/webauthn.rb +37 -0
  38. data/lib/generators/devise/webauthn/stimulus/stimulus_generator.rb +24 -0
  39. data/lib/generators/devise/webauthn/stimulus/templates/webauthn_credentials_controller.js +31 -0
  40. data/lib/generators/devise/webauthn/templates/controllers/README +14 -0
  41. data/lib/generators/devise/webauthn/templates/controllers/passkeys_controller.rb.tt +31 -0
  42. data/lib/generators/devise/webauthn/views_generator.rb +44 -0
  43. data/lib/generators/devise/webauthn/webauthn_credential_model/webauthn_credential_model_generator.rb +54 -0
  44. data/lib/generators/devise/webauthn/webauthn_id/webauthn_id_generator.rb +41 -0
  45. metadata +47 -34
  46. data/.travis.yml +0 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0de4e30c6896e907afd300144cd6276eb2fd557b039689a81fcf0eb395dc593e
4
- data.tar.gz: 25b5f3dd34e77ef51a344dd0809d29a162a36c69771c5ccbbdf591cd79eefe47
3
+ metadata.gz: 05eae23abbecd24f8a7baed2ae277525706623f23ad0966c3123d804cddaf41d
4
+ data.tar.gz: be7b3304bb4da5197cd132f040d68f0e274b3525bfc8a7647cb52a6f61e85884
5
5
  SHA512:
6
- metadata.gz: 662667438231289a60110f18e167840e86735f9f71cdaa8d19d0b30341f0a70aedcbe1e26f6e544e78459ffdb4a151ec71dc6df77a674a8ccc7f5fb1848dbd5a
7
- data.tar.gz: '09c8568b2f10c6650af93abec30b0aacfc48fa8c16bdeb39a3a24dc4af5989447758786dc90822e5dad7ec2490a6ce4863a79aecd23c5f2893f329dd7f0c9141'
6
+ metadata.gz: aa6fc6a8b595229e5d2a0be46607e910443b8b2a33d3faa0728f86cc9b312f5e6bcb936ac1d7457499ed66266c3377dbf153c4bd21e43e9b2a491d89f02cbbdb
7
+ data.tar.gz: 58f6f8c077d4186413234971bef5613d20d0021986a6968fa4c4cfe5e9d4f63869dec28f9be5fae2a15e0218e053a8fd9e4a017bc6cbe13d730f438404eefbd4
@@ -0,0 +1,75 @@
1
+ name: Ruby
2
+
3
+ on: push
4
+
5
+ jobs:
6
+ lint:
7
+ runs-on: ubuntu-latest
8
+
9
+ steps:
10
+ - name: Check out repository code
11
+ uses: actions/checkout@v5
12
+
13
+ - name: Set up Ruby
14
+ uses: ruby/setup-ruby@v1
15
+ with:
16
+ bundler-cache: true
17
+
18
+ - name: Lint code for consistent style
19
+ run: bundle exec rubocop -f github
20
+
21
+ test:
22
+ runs-on: ubuntu-latest
23
+ strategy:
24
+ fail-fast: false
25
+ matrix:
26
+ ruby:
27
+ - 3.4
28
+ - 3.3
29
+ - 3.2
30
+ - 3.1
31
+ - '3.0'
32
+ - 2.7
33
+ gemfile:
34
+ - rails_edge
35
+ - rails_8_0
36
+ - rails_7_2
37
+ - rails_7_1
38
+
39
+ exclude:
40
+ - ruby: 3.1
41
+ gemfile: rails_edge
42
+ - ruby: 3.1
43
+ gemfile: rails_8_0
44
+
45
+ - ruby: 3.0
46
+ gemfile: rails_edge
47
+ - ruby: 3.0
48
+ gemfile: rails_8_0
49
+ - ruby: 3.0
50
+ gemfile: rails_7_2
51
+
52
+ - ruby: 2.7
53
+ gemfile: rails_edge
54
+ - ruby: 2.7
55
+ gemfile: rails_8_0
56
+ - ruby: 2.7
57
+ gemfile: rails_7_2
58
+
59
+
60
+ env:
61
+ BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}.gemfile
62
+
63
+ steps:
64
+ - name: Check out repository code
65
+ uses: actions/checkout@v5
66
+
67
+ - name: Set up Ruby
68
+ uses: ruby/setup-ruby@v1
69
+ with:
70
+ ruby-version: ${{ matrix.ruby }}
71
+ bundler-cache: true
72
+
73
+ - name: Run tests
74
+ run: |
75
+ bundle exec rspec
data/.gitignore CHANGED
@@ -6,6 +6,20 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ /log/*.log
10
+
11
+ /spec/tmp/
12
+ .byebug_history
9
13
 
10
14
  # rspec failure tracking
11
15
  .rspec_status
16
+
17
+ # combustion files
18
+ /spec/internal/db/*.sqlite
19
+ /spec/internal/db/*.sqlite-*
20
+ /spec/internal/log/*.log
21
+ /spec/internal/storage/
22
+ /spec/internal/tmp/
23
+ /spec/internal/.byebug_history
24
+
25
+ /gemfiles/*.gemfile.lock
data/.rspec CHANGED
@@ -1,3 +1,2 @@
1
- --format documentation
2
1
  --color
3
2
  --require spec_helper
data/.rubocop.yml ADDED
@@ -0,0 +1,38 @@
1
+ plugins:
2
+ - rubocop-rspec
3
+ - rubocop-rails
4
+
5
+ AllCops:
6
+ TargetRubyVersion: 2.7
7
+ NewCops: enable
8
+ Exclude:
9
+ - "spec/internal/**/*"
10
+ - "vendor/**/*"
11
+ - "gemfiles/**/*"
12
+
13
+ Style/Documentation:
14
+ Enabled: false
15
+
16
+ Style/StringLiterals:
17
+ EnforcedStyle: double_quotes
18
+
19
+ Metrics/MethodLength:
20
+ Max: 20
21
+
22
+ Gemspec/DevelopmentDependencies:
23
+ Enabled: false
24
+
25
+ RSpec/MultipleExpectations:
26
+ Max: 3
27
+
28
+ RSpec/ExampleLength:
29
+ Max: 20
30
+
31
+ RSpec/MultipleMemoizedHelpers:
32
+ Enabled: false
33
+
34
+ RSpec/VerifiedDoubles:
35
+ Enabled: false
36
+
37
+ Rspec/NestedGroups:
38
+ Max: 4
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.4.4
data/Appraisals ADDED
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ appraise "rails-edge" do
4
+ gem "rails", github: "rails/rails", branch: "main"
5
+ end
6
+
7
+ appraise "rails-8_0" do
8
+ gem "rails", "~> 8.0"
9
+ end
10
+
11
+ appraise "rails-7_2" do
12
+ gem "rails", "~> 7.2"
13
+ end
14
+
15
+ appraise "rails-7_1" do
16
+ gem "rails", "~> 7.1"
17
+
18
+ gem "capybara", "~> 3.39"
19
+ gem "importmap-rails", "~> 2.0"
20
+ gem "pry-byebug", "~> 3.10"
21
+ gem "psych", "~> 4.0"
22
+ gem "rack", "~> 2.2"
23
+ gem "rspec-rails", "~> 7.1"
24
+ gem "sqlite3", "~> 1.7"
25
+ end
data/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ # Changelog
2
+
3
+ ## [v0.1.0](https://github.com/cedarcode/devise-webauthn/compare/v0.0.0...v0.1.0/) - 2025-11-12
4
+
5
+ ### Initial release
6
+
7
+ - Provides passkey authentication for apps using Devise.
data/Gemfile CHANGED
@@ -1,6 +1,24 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source "https://rubygems.org"
2
4
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
5
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
6
 
5
7
  # Specify your gem's dependencies in devise-webauthn.gemspec
6
8
  gemspec
9
+
10
+ gem "appraisal", "~> 2.5"
11
+ gem "capybara", "~> 3.40"
12
+ gem "combustion", "~> 1.3"
13
+ gem "importmap-rails", "~> 2.2"
14
+ gem "propshaft", "~> 1.2"
15
+ gem "pry-byebug", "~> 3.11"
16
+ gem "puma", "~> 6.6"
17
+ gem "rails", "~> 8.0"
18
+ gem "rspec-rails", "~> 8.0"
19
+ gem "rubocop", "~> 1.79"
20
+ gem "rubocop-rails", "~> 2.32"
21
+ gem "rubocop-rspec", "~> 3.6"
22
+ gem "selenium-webdriver"
23
+ gem "sqlite3", "~> 2.7"
24
+ gem "stimulus-rails", "~> 1.3"
data/Gemfile.lock ADDED
@@ -0,0 +1,363 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ devise-webauthn (0.1.0)
5
+ devise (~> 4.9)
6
+ webauthn (~> 3.0)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ actioncable (8.0.2.1)
12
+ actionpack (= 8.0.2.1)
13
+ activesupport (= 8.0.2.1)
14
+ nio4r (~> 2.0)
15
+ websocket-driver (>= 0.6.1)
16
+ zeitwerk (~> 2.6)
17
+ actionmailbox (8.0.2.1)
18
+ actionpack (= 8.0.2.1)
19
+ activejob (= 8.0.2.1)
20
+ activerecord (= 8.0.2.1)
21
+ activestorage (= 8.0.2.1)
22
+ activesupport (= 8.0.2.1)
23
+ mail (>= 2.8.0)
24
+ actionmailer (8.0.2.1)
25
+ actionpack (= 8.0.2.1)
26
+ actionview (= 8.0.2.1)
27
+ activejob (= 8.0.2.1)
28
+ activesupport (= 8.0.2.1)
29
+ mail (>= 2.8.0)
30
+ rails-dom-testing (~> 2.2)
31
+ actionpack (8.0.2.1)
32
+ actionview (= 8.0.2.1)
33
+ activesupport (= 8.0.2.1)
34
+ nokogiri (>= 1.8.5)
35
+ rack (>= 2.2.4)
36
+ rack-session (>= 1.0.1)
37
+ rack-test (>= 0.6.3)
38
+ rails-dom-testing (~> 2.2)
39
+ rails-html-sanitizer (~> 1.6)
40
+ useragent (~> 0.16)
41
+ actiontext (8.0.2.1)
42
+ actionpack (= 8.0.2.1)
43
+ activerecord (= 8.0.2.1)
44
+ activestorage (= 8.0.2.1)
45
+ activesupport (= 8.0.2.1)
46
+ globalid (>= 0.6.0)
47
+ nokogiri (>= 1.8.5)
48
+ actionview (8.0.2.1)
49
+ activesupport (= 8.0.2.1)
50
+ builder (~> 3.1)
51
+ erubi (~> 1.11)
52
+ rails-dom-testing (~> 2.2)
53
+ rails-html-sanitizer (~> 1.6)
54
+ activejob (8.0.2.1)
55
+ activesupport (= 8.0.2.1)
56
+ globalid (>= 0.3.6)
57
+ activemodel (8.0.2.1)
58
+ activesupport (= 8.0.2.1)
59
+ activerecord (8.0.2.1)
60
+ activemodel (= 8.0.2.1)
61
+ activesupport (= 8.0.2.1)
62
+ timeout (>= 0.4.0)
63
+ activestorage (8.0.2.1)
64
+ actionpack (= 8.0.2.1)
65
+ activejob (= 8.0.2.1)
66
+ activerecord (= 8.0.2.1)
67
+ activesupport (= 8.0.2.1)
68
+ marcel (~> 1.0)
69
+ activesupport (8.0.2.1)
70
+ base64
71
+ benchmark (>= 0.3)
72
+ bigdecimal
73
+ concurrent-ruby (~> 1.0, >= 1.3.1)
74
+ connection_pool (>= 2.2.5)
75
+ drb
76
+ i18n (>= 1.6, < 2)
77
+ logger (>= 1.4.2)
78
+ minitest (>= 5.1)
79
+ securerandom (>= 0.3)
80
+ tzinfo (~> 2.0, >= 2.0.5)
81
+ uri (>= 0.13.1)
82
+ addressable (2.8.7)
83
+ public_suffix (>= 2.0.2, < 7.0)
84
+ android_key_attestation (0.3.0)
85
+ appraisal (2.5.0)
86
+ bundler
87
+ rake
88
+ thor (>= 0.14.0)
89
+ ast (2.4.3)
90
+ base64 (0.3.0)
91
+ bcrypt (3.1.20)
92
+ benchmark (0.4.1)
93
+ bigdecimal (3.2.2)
94
+ bindata (2.5.1)
95
+ builder (3.3.0)
96
+ byebug (12.0.0)
97
+ capybara (3.40.0)
98
+ addressable
99
+ matrix
100
+ mini_mime (>= 0.1.3)
101
+ nokogiri (~> 1.11)
102
+ rack (>= 1.6.0)
103
+ rack-test (>= 0.6.3)
104
+ regexp_parser (>= 1.5, < 3.0)
105
+ xpath (~> 3.2)
106
+ cbor (0.5.10.1)
107
+ coderay (1.1.3)
108
+ combustion (1.5.0)
109
+ activesupport (>= 3.0.0)
110
+ railties (>= 3.0.0)
111
+ thor (>= 0.14.6)
112
+ concurrent-ruby (1.3.5)
113
+ connection_pool (2.5.3)
114
+ cose (1.3.1)
115
+ cbor (~> 0.5.9)
116
+ openssl-signature_algorithm (~> 1.0)
117
+ crass (1.0.6)
118
+ date (3.4.1)
119
+ devise (4.9.4)
120
+ bcrypt (~> 3.0)
121
+ orm_adapter (~> 0.1)
122
+ railties (>= 4.1.0)
123
+ responders
124
+ warden (~> 1.2.3)
125
+ diff-lcs (1.6.2)
126
+ drb (2.2.3)
127
+ erb (5.0.2)
128
+ erubi (1.13.1)
129
+ globalid (1.2.1)
130
+ activesupport (>= 6.1)
131
+ i18n (1.14.7)
132
+ concurrent-ruby (~> 1.0)
133
+ importmap-rails (2.2.2)
134
+ actionpack (>= 6.0.0)
135
+ activesupport (>= 6.0.0)
136
+ railties (>= 6.0.0)
137
+ io-console (0.8.1)
138
+ irb (1.15.2)
139
+ pp (>= 0.6.0)
140
+ rdoc (>= 4.0.0)
141
+ reline (>= 0.4.2)
142
+ json (2.13.2)
143
+ jwt (2.10.2)
144
+ base64
145
+ language_server-protocol (3.17.0.5)
146
+ lint_roller (1.1.0)
147
+ logger (1.7.0)
148
+ loofah (2.24.1)
149
+ crass (~> 1.0.2)
150
+ nokogiri (>= 1.12.0)
151
+ mail (2.8.1)
152
+ mini_mime (>= 0.1.1)
153
+ net-imap
154
+ net-pop
155
+ net-smtp
156
+ marcel (1.0.4)
157
+ matrix (0.4.3)
158
+ method_source (1.1.0)
159
+ mini_mime (1.1.5)
160
+ mini_portile2 (2.8.9)
161
+ minitest (5.25.5)
162
+ net-imap (0.5.9)
163
+ date
164
+ net-protocol
165
+ net-pop (0.1.2)
166
+ net-protocol
167
+ net-protocol (0.2.2)
168
+ timeout
169
+ net-smtp (0.5.1)
170
+ net-protocol
171
+ nio4r (2.7.4)
172
+ nokogiri (1.18.9)
173
+ mini_portile2 (~> 2.8.2)
174
+ racc (~> 1.4)
175
+ openssl (3.3.0)
176
+ openssl-signature_algorithm (1.3.0)
177
+ openssl (> 2.0)
178
+ orm_adapter (0.5.0)
179
+ parallel (1.27.0)
180
+ parser (3.3.9.0)
181
+ ast (~> 2.4.1)
182
+ racc
183
+ pp (0.6.2)
184
+ prettyprint
185
+ prettyprint (0.2.0)
186
+ prism (1.4.0)
187
+ propshaft (1.2.1)
188
+ actionpack (>= 7.0.0)
189
+ activesupport (>= 7.0.0)
190
+ rack
191
+ pry (0.15.2)
192
+ coderay (~> 1.1)
193
+ method_source (~> 1.0)
194
+ pry-byebug (3.11.0)
195
+ byebug (~> 12.0)
196
+ pry (>= 0.13, < 0.16)
197
+ psych (5.2.6)
198
+ date
199
+ stringio
200
+ public_suffix (6.0.2)
201
+ puma (6.6.1)
202
+ nio4r (~> 2.0)
203
+ racc (1.8.1)
204
+ rack (3.2.0)
205
+ rack-session (2.1.1)
206
+ base64 (>= 0.1.0)
207
+ rack (>= 3.0.0)
208
+ rack-test (2.2.0)
209
+ rack (>= 1.3)
210
+ rackup (2.2.1)
211
+ rack (>= 3)
212
+ rails (8.0.2.1)
213
+ actioncable (= 8.0.2.1)
214
+ actionmailbox (= 8.0.2.1)
215
+ actionmailer (= 8.0.2.1)
216
+ actionpack (= 8.0.2.1)
217
+ actiontext (= 8.0.2.1)
218
+ actionview (= 8.0.2.1)
219
+ activejob (= 8.0.2.1)
220
+ activemodel (= 8.0.2.1)
221
+ activerecord (= 8.0.2.1)
222
+ activestorage (= 8.0.2.1)
223
+ activesupport (= 8.0.2.1)
224
+ bundler (>= 1.15.0)
225
+ railties (= 8.0.2.1)
226
+ rails-dom-testing (2.3.0)
227
+ activesupport (>= 5.0.0)
228
+ minitest
229
+ nokogiri (>= 1.6)
230
+ rails-html-sanitizer (1.6.2)
231
+ loofah (~> 2.21)
232
+ nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
233
+ railties (8.0.2.1)
234
+ actionpack (= 8.0.2.1)
235
+ activesupport (= 8.0.2.1)
236
+ irb (~> 1.13)
237
+ rackup (>= 1.0.0)
238
+ rake (>= 12.2)
239
+ thor (~> 1.0, >= 1.2.2)
240
+ zeitwerk (~> 2.6)
241
+ rainbow (3.1.1)
242
+ rake (13.3.0)
243
+ rdoc (6.14.2)
244
+ erb
245
+ psych (>= 4.0.0)
246
+ regexp_parser (2.11.0)
247
+ reline (0.6.2)
248
+ io-console (~> 0.5)
249
+ responders (3.1.1)
250
+ actionpack (>= 5.2)
251
+ railties (>= 5.2)
252
+ rexml (3.4.2)
253
+ rspec-core (3.13.5)
254
+ rspec-support (~> 3.13.0)
255
+ rspec-expectations (3.13.5)
256
+ diff-lcs (>= 1.2.0, < 2.0)
257
+ rspec-support (~> 3.13.0)
258
+ rspec-mocks (3.13.5)
259
+ diff-lcs (>= 1.2.0, < 2.0)
260
+ rspec-support (~> 3.13.0)
261
+ rspec-rails (8.0.2)
262
+ actionpack (>= 7.2)
263
+ activesupport (>= 7.2)
264
+ railties (>= 7.2)
265
+ rspec-core (~> 3.13)
266
+ rspec-expectations (~> 3.13)
267
+ rspec-mocks (~> 3.13)
268
+ rspec-support (~> 3.13)
269
+ rspec-support (3.13.4)
270
+ rubocop (1.79.1)
271
+ json (~> 2.3)
272
+ language_server-protocol (~> 3.17.0.2)
273
+ lint_roller (~> 1.1.0)
274
+ parallel (~> 1.10)
275
+ parser (>= 3.3.0.2)
276
+ rainbow (>= 2.2.2, < 4.0)
277
+ regexp_parser (>= 2.9.3, < 3.0)
278
+ rubocop-ast (>= 1.46.0, < 2.0)
279
+ ruby-progressbar (~> 1.7)
280
+ unicode-display_width (>= 2.4.0, < 4.0)
281
+ rubocop-ast (1.46.0)
282
+ parser (>= 3.3.7.2)
283
+ prism (~> 1.4)
284
+ rubocop-rails (2.32.0)
285
+ activesupport (>= 4.2.0)
286
+ lint_roller (~> 1.1)
287
+ rack (>= 1.1)
288
+ rubocop (>= 1.75.0, < 2.0)
289
+ rubocop-ast (>= 1.44.0, < 2.0)
290
+ rubocop-rspec (3.6.0)
291
+ lint_roller (~> 1.1)
292
+ rubocop (~> 1.72, >= 1.72.1)
293
+ ruby-progressbar (1.13.0)
294
+ rubyzip (3.0.2)
295
+ safety_net_attestation (0.4.0)
296
+ jwt (~> 2.0)
297
+ securerandom (0.4.1)
298
+ selenium-webdriver (4.35.0)
299
+ base64 (~> 0.2)
300
+ logger (~> 1.4)
301
+ rexml (~> 3.2, >= 3.2.5)
302
+ rubyzip (>= 1.2.2, < 4.0)
303
+ websocket (~> 1.0)
304
+ sqlite3 (2.7.3)
305
+ mini_portile2 (~> 2.8.0)
306
+ stimulus-rails (1.3.4)
307
+ railties (>= 6.0.0)
308
+ stringio (3.1.7)
309
+ thor (1.4.0)
310
+ timeout (0.4.3)
311
+ tpm-key_attestation (0.14.1)
312
+ bindata (~> 2.4)
313
+ openssl (> 2.0)
314
+ openssl-signature_algorithm (~> 1.0)
315
+ tzinfo (2.0.6)
316
+ concurrent-ruby (~> 1.0)
317
+ unicode-display_width (3.1.4)
318
+ unicode-emoji (~> 4.0, >= 4.0.4)
319
+ unicode-emoji (4.0.4)
320
+ uri (1.0.3)
321
+ useragent (0.16.11)
322
+ warden (1.2.9)
323
+ rack (>= 2.0.9)
324
+ webauthn (3.4.1)
325
+ android_key_attestation (~> 0.3.0)
326
+ bindata (~> 2.4)
327
+ cbor (~> 0.5.9)
328
+ cose (~> 1.1)
329
+ openssl (>= 2.2)
330
+ safety_net_attestation (~> 0.4.0)
331
+ tpm-key_attestation (~> 0.14.0)
332
+ websocket (1.2.11)
333
+ websocket-driver (0.8.0)
334
+ base64
335
+ websocket-extensions (>= 0.1.0)
336
+ websocket-extensions (0.1.5)
337
+ xpath (3.2.0)
338
+ nokogiri (~> 1.8)
339
+ zeitwerk (2.7.3)
340
+
341
+ PLATFORMS
342
+ ruby
343
+
344
+ DEPENDENCIES
345
+ appraisal (~> 2.5)
346
+ capybara (~> 3.40)
347
+ combustion (~> 1.3)
348
+ devise-webauthn!
349
+ importmap-rails (~> 2.2)
350
+ propshaft (~> 1.2)
351
+ pry-byebug (~> 3.11)
352
+ puma (~> 6.6)
353
+ rails (~> 8.0)
354
+ rspec-rails (~> 8.0)
355
+ rubocop (~> 1.79)
356
+ rubocop-rails (~> 2.32)
357
+ rubocop-rspec (~> 3.6)
358
+ selenium-webdriver
359
+ sqlite3 (~> 2.7)
360
+ stimulus-rails (~> 1.3)
361
+
362
+ BUNDLED WITH
363
+ 2.7.1
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2019 Braulio Martinez
3
+ Copyright (c) Cedarcode
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal