add_auth 0.2.2 → 0.3.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 (122) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +22 -0
  3. data/README.md +38 -14
  4. data/ROADMAP.md +87 -38
  5. data/SECURITY.md +6 -0
  6. data/app/controllers/add_auth/accounts_controller.rb +138 -0
  7. data/app/controllers/add_auth/assets_controller.rb +2 -1
  8. data/app/controllers/add_auth/external_identities_controller.rb +56 -0
  9. data/app/controllers/add_auth/mobile_sessions_controller.rb +120 -0
  10. data/app/controllers/add_auth/provider_sign_ins_controller.rb +248 -0
  11. data/app/helpers/add_auth/sign_ins_helper.rb +2 -1
  12. data/app/jobs/add_auth/account_delivery_job.rb +14 -0
  13. data/app/jobs/add_auth/account_request_job.rb +17 -0
  14. data/app/mailers/add_auth/account_mailer.rb +12 -0
  15. data/app/views/add_auth/account_mailer/link.text.erb +7 -0
  16. data/app/views/add_auth/accounts/_check_email.html.erb +5 -0
  17. data/app/views/add_auth/accounts/_delete.html.erb +6 -0
  18. data/app/views/add_auth/accounts/_email.html.erb +12 -0
  19. data/app/views/add_auth/accounts/_invalid_proof.html.erb +5 -0
  20. data/app/views/add_auth/accounts/_password.html.erb +12 -0
  21. data/app/views/add_auth/accounts/_proof.html.erb +16 -0
  22. data/app/views/add_auth/accounts/_register.html.erb +17 -0
  23. data/app/views/add_auth/accounts/_request.html.erb +14 -0
  24. data/app/views/add_auth/accounts/_unavailable.html.erb +3 -0
  25. data/app/views/add_auth/external_identities/_index.html.erb +22 -0
  26. data/app/views/add_auth/external_identities/_unavailable.html.erb +3 -0
  27. data/app/views/add_auth/passkeys/_controls.html.erb +3 -1
  28. data/app/views/add_auth/provider_sign_ins/_enrollment.html.erb +12 -0
  29. data/app/views/add_auth/provider_sign_ins/_failure.html.erb +3 -0
  30. data/app/views/add_auth/provider_sign_ins/_prepare.html.erb +7 -0
  31. data/app/views/add_auth/reauthentications/_form.html.erb +9 -0
  32. data/app/views/add_auth/sessions/_list.html.erb +1 -1
  33. data/app/views/add_auth/sessions/index.html.erb +7 -0
  34. data/app/views/add_auth/sign_ins/_confirmation.html.erb +1 -0
  35. data/app/views/add_auth/sign_ins/_form.html.erb +17 -0
  36. data/app/views/add_auth/sign_ins/_remember.html.erb +6 -0
  37. data/app/views/layouts/add_auth/authentication.html.erb +4 -3
  38. data/exe/add_auth-preflight +26 -0
  39. data/lib/add_auth/configuration.rb +78 -4
  40. data/lib/add_auth/core/access_policy.rb +11 -1
  41. data/lib/add_auth/core/account_lifecycle.rb +251 -0
  42. data/lib/add_auth/core/account_policy.rb +50 -0
  43. data/lib/add_auth/core/external_identities/evidence.rb +98 -0
  44. data/lib/add_auth/core/external_identities.rb +278 -0
  45. data/lib/add_auth/core/intake.rb +6 -1
  46. data/lib/add_auth/core/maintenance.rb +5 -3
  47. data/lib/add_auth/core/migration/account_adoption.rb +79 -0
  48. data/lib/add_auth/core/migration/readiness.rb +41 -0
  49. data/lib/add_auth/core/mobile_authentication.rb +35 -0
  50. data/lib/add_auth/core/mobile_handoffs.rb +83 -0
  51. data/lib/add_auth/core/mobile_profile.rb +46 -0
  52. data/lib/add_auth/core/mobile_response.rb +12 -0
  53. data/lib/add_auth/core/native_authentication.rb +77 -0
  54. data/lib/add_auth/core/passwords/bcrypt_support.rb +28 -0
  55. data/lib/add_auth/core/passwords/credential.rb +49 -0
  56. data/lib/add_auth/core/passwords/legacy_bcrypt.rb +43 -0
  57. data/lib/add_auth/core/passwords/lifecycle.rb +60 -0
  58. data/lib/add_auth/core/remaining_factors.rb +24 -0
  59. data/lib/add_auth/core/sessions.rb +102 -17
  60. data/lib/add_auth/core/step_up.rb +13 -1
  61. data/lib/add_auth/migration/static_inventory.rb +116 -0
  62. data/lib/add_auth/rails/account_password_entry.rb +24 -0
  63. data/lib/add_auth/rails/authentication.rb +1 -1
  64. data/lib/add_auth/rails/authentication_pages.rb +5 -0
  65. data/lib/add_auth/rails/doctor.rb +70 -3
  66. data/lib/add_auth/rails/ejection.rb +1 -1
  67. data/lib/add_auth/rails/engine.rb +6 -1
  68. data/lib/add_auth/rails/migration/account_store.rb +41 -0
  69. data/lib/add_auth/rails/migration/effective_inventory.rb +162 -0
  70. data/lib/add_auth/rails/migration/key_type.rb +23 -0
  71. data/lib/add_auth/rails/migration/source_bridge.rb +53 -0
  72. data/lib/add_auth/rails/password_adoption.rb +37 -0
  73. data/lib/add_auth/rails/provider_enrollment.rb +61 -0
  74. data/lib/add_auth/rails/provider_libraries/apple_form_post_correlation.rb +127 -0
  75. data/lib/add_auth/rails/provider_libraries/apple_jwks.rb +68 -0
  76. data/lib/add_auth/rails/provider_libraries/apple_native.rb +55 -0
  77. data/lib/add_auth/rails/provider_libraries/callback_route.rb +16 -0
  78. data/lib/add_auth/rails/provider_libraries/omniauth.rb +136 -0
  79. data/lib/add_auth/rails/provider_libraries/omniauth_correlation.rb +107 -0
  80. data/lib/add_auth/rails/provider_libraries/openid_connect.rb +62 -0
  81. data/lib/add_auth/rails/provider_libraries/request_protection.rb +43 -0
  82. data/lib/add_auth/rails/runtime.rb +170 -8
  83. data/lib/add_auth/rails/stores/account_credentials.rb +44 -0
  84. data/lib/add_auth/rails/stores/account_lock.rb +16 -7
  85. data/lib/add_auth/rails/stores/account_tokens.rb +96 -0
  86. data/lib/add_auth/rails/stores/authority.rb +28 -0
  87. data/lib/add_auth/rails/stores/commit_dispatch.rb +32 -0
  88. data/lib/add_auth/rails/stores/external_identities.rb +91 -0
  89. data/lib/add_auth/rails/stores/maintenance.rb +1 -1
  90. data/lib/add_auth/rails/stores/mobile_handoffs.rb +53 -0
  91. data/lib/add_auth/rails/stores/security_events.rb +3 -6
  92. data/lib/add_auth/rails/user_lifecycle.rb +8 -10
  93. data/lib/add_auth/result.rb +1 -0
  94. data/lib/add_auth/version.rb +1 -1
  95. data/lib/add_auth.rb +4 -0
  96. data/lib/generators/add_auth/accounts/accounts_generator.rb +52 -0
  97. data/lib/generators/add_auth/accounts/templates/add_add_auth_accounts.rb.tt +49 -0
  98. data/lib/generators/add_auth/accounts/templates/add_auth_account_token.rb +6 -0
  99. data/lib/generators/add_auth/accounts/templates/add_auth_address_claim.rb +6 -0
  100. data/lib/generators/add_auth/devise_accounts/devise_accounts_generator.rb +23 -0
  101. data/lib/generators/add_auth/devise_accounts/templates/prepare_add_auth_devise_accounts.rb.tt +17 -0
  102. data/lib/generators/add_auth/email_link/templates/add_auth_challenge.js +1 -0
  103. data/lib/generators/add_auth/email_tokens/templates/create_add_auth_sign_in_tokens.rb.tt +3 -1
  104. data/lib/generators/add_auth/external_identities/external_identities_generator.rb +52 -0
  105. data/lib/generators/add_auth/external_identities/templates/add_add_auth_external_enrollment.rb.tt +5 -0
  106. data/lib/generators/add_auth/external_identities/templates/add_add_auth_external_identity_validity.rb.tt +5 -0
  107. data/lib/generators/add_auth/external_identities/templates/add_auth_external_identity.rb +4 -0
  108. data/lib/generators/add_auth/external_identities/templates/add_auth_external_transaction.rb +6 -0
  109. data/lib/generators/add_auth/external_identities/templates/create_add_auth_external_identities.rb.tt +50 -0
  110. data/lib/generators/add_auth/external_identities/templates/providers.rb +51 -0
  111. data/lib/generators/add_auth/install/templates/initializer.rb +4 -0
  112. data/lib/generators/add_auth/javascript/templates/passkey.js +8 -5
  113. data/lib/generators/add_auth/mobile_sessions/mobile_sessions_generator.rb +48 -0
  114. data/lib/generators/add_auth/mobile_sessions/templates/add_add_auth_mobile_sessions.rb.tt +9 -0
  115. data/lib/generators/add_auth/mobile_sessions/templates/add_auth_mobile_handoff.rb +5 -0
  116. data/lib/generators/add_auth/mobile_sessions/templates/create_add_auth_mobile_handoffs.rb.tt +27 -0
  117. data/lib/generators/add_auth/mobile_sessions/templates/mobile.rb +8 -0
  118. data/lib/generators/add_auth/notifications/templates/create_add_auth_security_events.rb.tt +3 -1
  119. data/lib/generators/add_auth/passkeys/templates/add_add_auth_passkeys.rb.tt +7 -3
  120. data/lib/generators/add_auth/step_up/templates/add_add_auth_reauthentication.rb.tt +3 -1
  121. data/lib/tasks/add_auth.rake +18 -1
  122. metadata +85 -2
@@ -0,0 +1,27 @@
1
+ class CreateAddAuthMobileHandoffs < ActiveRecord::Migration[8.0]
2
+ def change
3
+ user_key = connection.columns(:users).find { |column| column.name == connection.primary_key(:users) }
4
+ raise "Unsupported authentication primary key" unless user_key && [:integer, :uuid].include?(user_key.type)
5
+ user_type = (user_key.type == :integer && user_key.limit == 8) ? :bigint : user_key.type
6
+ create_table :add_auth_mobile_handoffs do |t|
7
+ t.references :user, type: user_type, foreign_key: {on_delete: :cascade}
8
+ t.string :external_digest, null: false
9
+ t.string :digest
10
+ t.string :client_id, limit: 64, null: false
11
+ t.string :callback, limit: 2048, null: false
12
+ t.string :state, limit: 128, null: false
13
+ t.string :challenge_digest, null: false
14
+ t.string :credential_id
15
+ t.string :credential_version
16
+ t.integer :policy_version
17
+ t.datetime :authenticated_at
18
+ t.datetime :issued_at, null: false
19
+ t.datetime :expires_at, null: false
20
+ t.datetime :consumed_at
21
+ t.timestamps
22
+ end
23
+ add_index :add_auth_mobile_handoffs, :external_digest, unique: true
24
+ add_index :add_auth_mobile_handoffs, :digest, unique: true
25
+ add_index :add_auth_mobile_handoffs, :expires_at
26
+ end
27
+ end
@@ -0,0 +1,8 @@
1
+ # Mobile sessions are optional and remain disabled after generating persistence.
2
+ # Review the host/client timeout policy before enabling. These are example values.
3
+ # AddAuth.configure do |config|
4
+ # config.mobile.lifetime = 30 * 86_400
5
+ # config.mobile.idle_timeout = 14 * 86_400
6
+ # config.mobile.clients = %w[android ios]
7
+ # config.mobile.enabled = true
8
+ # end
@@ -1,7 +1,9 @@
1
+ require "add_auth/rails/migration/key_type"
2
+
1
3
  class CreateAddAuthSecurityEvents < ActiveRecord::Migration[8.0]
2
4
  def change
3
5
  create_table :add_auth_security_events do |t|
4
- t.references :user, foreign_key: {on_delete: :nullify}
6
+ t.references :user, type: AddAuth::Rails::Migration::KeyType.for(connection, :users), foreign_key: {on_delete: :nullify}
5
7
  t.string :kind, null: false
6
8
  t.string :digest, null: false
7
9
  t.text :delivery_payload
@@ -1,5 +1,9 @@
1
+ require "add_auth/rails/migration/key_type"
2
+
1
3
  class AddAddAuthPasskeys < ActiveRecord::Migration[8.0]
2
4
  def change
5
+ user_key_type = AddAuth::Rails::Migration::KeyType.for(connection, :users)
6
+ session_key_type = AddAuth::Rails::Migration::KeyType.for(connection, :sessions, session: true)
3
7
  # Rails 8.0 cannot reflect SQLite's FALSE literal emitted by Rails 8.1.
4
8
  # Keep the additive schema readable by both supported Rails lines.
5
9
  false_default = (connection.adapter_name == "SQLite") ? -> { "0" } : false
@@ -11,7 +15,7 @@ class AddAddAuthPasskeys < ActiveRecord::Migration[8.0]
11
15
  add_column :sessions, :authentication_credential_id, :string
12
16
  add_column :sessions, :authentication_uv, :boolean, default: false_default, null: false
13
17
  create_table :add_auth_credentials do |t|
14
- t.references :user, null: false, foreign_key: {on_delete: :cascade}
18
+ t.references :user, type: user_key_type, null: false, foreign_key: {on_delete: :cascade}
15
19
  t.string :external_id, null: false
16
20
  t.text :public_key, null: false
17
21
  t.bigint :sign_count, default: 0, null: false
@@ -31,8 +35,8 @@ class AddAddAuthPasskeys < ActiveRecord::Migration[8.0]
31
35
  t.string :kind, null: false
32
36
  t.string :browser_digest, null: false
33
37
  t.string :configuration_digest, null: false
34
- t.references :user, foreign_key: {on_delete: :cascade}
35
- t.references :session, foreign_key: {on_delete: :cascade}
38
+ t.references :user, type: user_key_type, foreign_key: {on_delete: :cascade}
39
+ t.references :session, type: session_key_type, foreign_key: {on_delete: :cascade}
36
40
  t.string :session_digest
37
41
  t.string :authentication_purpose
38
42
  t.datetime :expires_at, null: false
@@ -1,8 +1,10 @@
1
+ require "add_auth/rails/migration/key_type"
2
+
1
3
  class AddAddAuthReauthentication < ActiveRecord::Migration[8.0]
2
4
  def change
3
5
  add_column :sessions, :elevation_version, :string
4
6
  add_column :sessions, :elevation_expires_at, :datetime
5
- add_reference :add_auth_sign_in_tokens, :session, foreign_key: {on_delete: :cascade}
7
+ add_reference :add_auth_sign_in_tokens, :session, type: AddAuth::Rails::Migration::KeyType.for(connection, :sessions, session: true), foreign_key: {on_delete: :cascade}
6
8
  add_column :add_auth_sign_in_tokens, :session_digest, :string
7
9
  add_column :add_auth_sign_in_tokens, :authentication_purpose, :string
8
10
  end
@@ -1,6 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  namespace :add_auth do
4
+ desc "Read-only Devise inventory in an isolated local test/development host"
5
+ task devise_preflight: :environment do
6
+ require "json"
7
+ require "add_auth/rails/migration/effective_inventory"
8
+ begin
9
+ report = AddAuth::Rails::Migration::EffectiveInventory.new.call
10
+ puts JSON.pretty_generate(report)
11
+ abort "Inventory is incomplete; resolve the reported bounds before migration." unless report.dig(:facts, :complete)
12
+ rescue
13
+ # Host exception text may contain query values or secret configuration.
14
+ abort "Effective inventory failed. Use an isolated local Devise host with one SQLite/PostgreSQL pool and no surrounding transaction."
15
+ end
16
+ end
17
+
4
18
  desc "Check installed AddAuth authentication, delivery and maintenance wiring"
5
19
  task doctor: :environment do
6
20
  require "add_auth/rails/doctor"
@@ -19,13 +33,16 @@ namespace :add_auth do
19
33
  require "add_auth/rails/stores/maintenance"
20
34
  models = {}
21
35
  models[:session] = ::Session if AddAuth.configuration.session.enabled && defined?(::Session)
36
+ models[:external_transaction] = ::AddAuthExternalTransaction if defined?(::AddAuthExternalTransaction)
37
+ models[:mobile_handoff] = ::AddAuthMobileHandoff if defined?(::AddAuthMobileHandoff)
22
38
  models[:ceremony] = ::AddAuthCeremony if defined?(::AddAuthCeremony)
23
39
  models[:email] = ::AddAuthSignInToken if defined?(::AddAuthSignInToken)
24
40
  models[:notification] = ::AddAuthSecurityEvent if defined?(::AddAuthSecurityEvent)
41
+ models[:account] = ::AddAuthAccountToken if defined?(::AddAuthAccountToken)
25
42
  stores = models.filter_map do |kind, model|
26
43
  [kind, AddAuth::Rails::Stores::Maintenance.new(model: model, kind: kind)] if model.table_exists?
27
44
  end.to_h
28
- jobs = {email: AddAuth::EmailDeliveryJob, notification: AddAuth::SecurityNotificationJob}
45
+ jobs = {email: AddAuth::EmailDeliveryJob, notification: AddAuth::SecurityNotificationJob, account: AddAuth::AccountDeliveryJob}
29
46
  enqueue = lambda do |kind, id|
30
47
  raise AddAuth::Error, "maintenance enqueue failed" unless jobs.fetch(kind).perform_later(id)
31
48
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: add_auth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taimoor Qureshi
@@ -203,10 +203,13 @@ description: |
203
203
  reauthentication and recovery. It adds hardened sessions, security mail and
204
204
  challenge providers, with shared Turbo/HTML pages and permitted no-JavaScript
205
205
  alternatives. It upgrades the generated User and Session models in place.
206
+ Optional account lifecycle, Devise migration, provider-library integration
207
+ and finite native sessions share the same account and session policies.
206
208
  Documentation: https://addauthgem.com.
207
209
  email:
208
210
  - taimoorq@gmail.com
209
- executables: []
211
+ executables:
212
+ - add_auth-preflight
210
213
  extensions: []
211
214
  extra_rdoc_files: []
212
215
  files:
@@ -216,24 +219,46 @@ files:
216
219
  - README.md
217
220
  - ROADMAP.md
218
221
  - SECURITY.md
222
+ - app/controllers/add_auth/accounts_controller.rb
219
223
  - app/controllers/add_auth/assets_controller.rb
224
+ - app/controllers/add_auth/external_identities_controller.rb
225
+ - app/controllers/add_auth/mobile_sessions_controller.rb
220
226
  - app/controllers/add_auth/passkeys_controller.rb
227
+ - app/controllers/add_auth/provider_sign_ins_controller.rb
221
228
  - app/controllers/add_auth/reauthentications_controller.rb
222
229
  - app/controllers/add_auth/recoveries_controller.rb
223
230
  - app/controllers/add_auth/sessions_controller.rb
224
231
  - app/controllers/add_auth/sign_ins_controller.rb
225
232
  - app/helpers/add_auth/sign_ins_helper.rb
226
233
  - app/javascript/controllers/.keep
234
+ - app/jobs/add_auth/account_delivery_job.rb
235
+ - app/jobs/add_auth/account_request_job.rb
227
236
  - app/jobs/add_auth/delivery_job.rb
228
237
  - app/jobs/add_auth/email_delivery_job.rb
229
238
  - app/jobs/add_auth/email_request_job.rb
230
239
  - app/jobs/add_auth/security_notification_job.rb
240
+ - app/mailers/add_auth/account_mailer.rb
231
241
  - app/mailers/add_auth/security_mailer.rb
232
242
  - app/mailers/add_auth/sign_in_mailer.rb
233
243
  - app/models/concerns/.keep
234
244
  - app/views/.keep
245
+ - app/views/add_auth/account_mailer/link.text.erb
246
+ - app/views/add_auth/accounts/_check_email.html.erb
247
+ - app/views/add_auth/accounts/_delete.html.erb
248
+ - app/views/add_auth/accounts/_email.html.erb
249
+ - app/views/add_auth/accounts/_invalid_proof.html.erb
250
+ - app/views/add_auth/accounts/_password.html.erb
251
+ - app/views/add_auth/accounts/_proof.html.erb
252
+ - app/views/add_auth/accounts/_register.html.erb
253
+ - app/views/add_auth/accounts/_request.html.erb
254
+ - app/views/add_auth/accounts/_unavailable.html.erb
255
+ - app/views/add_auth/external_identities/_index.html.erb
256
+ - app/views/add_auth/external_identities/_unavailable.html.erb
235
257
  - app/views/add_auth/passkeys/_controls.html.erb
236
258
  - app/views/add_auth/passkeys/_list.html.erb
259
+ - app/views/add_auth/provider_sign_ins/_enrollment.html.erb
260
+ - app/views/add_auth/provider_sign_ins/_failure.html.erb
261
+ - app/views/add_auth/provider_sign_ins/_prepare.html.erb
237
262
  - app/views/add_auth/reauthentications/_check_email.html.erb
238
263
  - app/views/add_auth/reauthentications/_confirmation.html.erb
239
264
  - app/views/add_auth/reauthentications/_different_browser.html.erb
@@ -253,11 +278,15 @@ files:
253
278
  - app/views/add_auth/sign_ins/_different_browser.html.erb
254
279
  - app/views/add_auth/sign_ins/_form.html.erb
255
280
  - app/views/add_auth/sign_ins/_invalid_link.html.erb
281
+ - app/views/add_auth/sign_ins/_remember.html.erb
256
282
  - app/views/add_auth/sign_ins/show.html.erb
257
283
  - app/views/layouts/add_auth/authentication.html.erb
284
+ - exe/add_auth-preflight
258
285
  - lib/add_auth.rb
259
286
  - lib/add_auth/configuration.rb
260
287
  - lib/add_auth/core/access_policy.rb
288
+ - lib/add_auth/core/account_lifecycle.rb
289
+ - lib/add_auth/core/account_policy.rb
261
290
  - lib/add_auth/core/browser_binding.rb
262
291
  - lib/add_auth/core/challenge/base.rb
263
292
  - lib/add_auth/core/challenge/http.rb
@@ -268,14 +297,30 @@ files:
268
297
  - lib/add_auth/core/delivery.rb
269
298
  - lib/add_auth/core/digest/base.rb
270
299
  - lib/add_auth/core/digest/hmac.rb
300
+ - lib/add_auth/core/external_identities.rb
301
+ - lib/add_auth/core/external_identities/evidence.rb
271
302
  - lib/add_auth/core/intake.rb
272
303
  - lib/add_auth/core/maintenance.rb
304
+ - lib/add_auth/core/migration/account_adoption.rb
305
+ - lib/add_auth/core/migration/readiness.rb
306
+ - lib/add_auth/core/mobile_authentication.rb
307
+ - lib/add_auth/core/mobile_handoffs.rb
308
+ - lib/add_auth/core/mobile_profile.rb
309
+ - lib/add_auth/core/mobile_response.rb
310
+ - lib/add_auth/core/native_authentication.rb
311
+ - lib/add_auth/core/passwords/bcrypt_support.rb
312
+ - lib/add_auth/core/passwords/credential.rb
313
+ - lib/add_auth/core/passwords/legacy_bcrypt.rb
314
+ - lib/add_auth/core/passwords/lifecycle.rb
273
315
  - lib/add_auth/core/rate_limit.rb
316
+ - lib/add_auth/core/remaining_factors.rb
274
317
  - lib/add_auth/core/security_events.rb
275
318
  - lib/add_auth/core/sessions.rb
276
319
  - lib/add_auth/core/step_up.rb
277
320
  - lib/add_auth/core/strategies/email_link.rb
278
321
  - lib/add_auth/core/strategies/passkey.rb
322
+ - lib/add_auth/migration/static_inventory.rb
323
+ - lib/add_auth/rails/account_password_entry.rb
279
324
  - lib/add_auth/rails/authentication.rb
280
325
  - lib/add_auth/rails/authentication_pages.rb
281
326
  - lib/add_auth/rails/delivery_cipher.rb
@@ -283,13 +328,33 @@ files:
283
328
  - lib/add_auth/rails/ejection.rb
284
329
  - lib/add_auth/rails/elevation.rb
285
330
  - lib/add_auth/rails/engine.rb
331
+ - lib/add_auth/rails/migration/account_store.rb
332
+ - lib/add_auth/rails/migration/effective_inventory.rb
333
+ - lib/add_auth/rails/migration/key_type.rb
334
+ - lib/add_auth/rails/migration/source_bridge.rb
335
+ - lib/add_auth/rails/password_adoption.rb
286
336
  - lib/add_auth/rails/password_entry.rb
337
+ - lib/add_auth/rails/provider_enrollment.rb
338
+ - lib/add_auth/rails/provider_libraries/apple_form_post_correlation.rb
339
+ - lib/add_auth/rails/provider_libraries/apple_jwks.rb
340
+ - lib/add_auth/rails/provider_libraries/apple_native.rb
341
+ - lib/add_auth/rails/provider_libraries/callback_route.rb
342
+ - lib/add_auth/rails/provider_libraries/omniauth.rb
343
+ - lib/add_auth/rails/provider_libraries/omniauth_correlation.rb
344
+ - lib/add_auth/rails/provider_libraries/openid_connect.rb
345
+ - lib/add_auth/rails/provider_libraries/request_protection.rb
287
346
  - lib/add_auth/rails/rate_limit_cache.rb
288
347
  - lib/add_auth/rails/runtime.rb
348
+ - lib/add_auth/rails/stores/account_credentials.rb
289
349
  - lib/add_auth/rails/stores/account_lock.rb
350
+ - lib/add_auth/rails/stores/account_tokens.rb
351
+ - lib/add_auth/rails/stores/authority.rb
352
+ - lib/add_auth/rails/stores/commit_dispatch.rb
290
353
  - lib/add_auth/rails/stores/delivery_state.rb
291
354
  - lib/add_auth/rails/stores/email_tokens.rb
355
+ - lib/add_auth/rails/stores/external_identities.rb
292
356
  - lib/add_auth/rails/stores/maintenance.rb
357
+ - lib/add_auth/rails/stores/mobile_handoffs.rb
293
358
  - lib/add_auth/rails/stores/passkeys.rb
294
359
  - lib/add_auth/rails/stores/security_events.rb
295
360
  - lib/add_auth/rails/stores/sessions.rb
@@ -297,10 +362,16 @@ files:
297
362
  - lib/add_auth/result.rb
298
363
  - lib/add_auth/testing.rb
299
364
  - lib/add_auth/version.rb
365
+ - lib/generators/add_auth/accounts/accounts_generator.rb
366
+ - lib/generators/add_auth/accounts/templates/add_add_auth_accounts.rb.tt
367
+ - lib/generators/add_auth/accounts/templates/add_auth_account_token.rb
368
+ - lib/generators/add_auth/accounts/templates/add_auth_address_claim.rb
300
369
  - lib/generators/add_auth/challenge/challenge_generator.rb
301
370
  - lib/generators/add_auth/challenge/templates/recaptcha.rb.tt
302
371
  - lib/generators/add_auth/challenge/templates/turnstile.rb.tt
303
372
  - lib/generators/add_auth/controllers/controllers_generator.rb
373
+ - lib/generators/add_auth/devise_accounts/devise_accounts_generator.rb
374
+ - lib/generators/add_auth/devise_accounts/templates/prepare_add_auth_devise_accounts.rb.tt
304
375
  - lib/generators/add_auth/ejection.rb
305
376
  - lib/generators/add_auth/email_link/email_link_generator.rb
306
377
  - lib/generators/add_auth/email_link/templates/add_add_auth_email_binding.rb.tt
@@ -310,6 +381,13 @@ files:
310
381
  - lib/generators/add_auth/email_tokens/email_tokens_generator.rb
311
382
  - lib/generators/add_auth/email_tokens/templates/add_auth_sign_in_token.rb
312
383
  - lib/generators/add_auth/email_tokens/templates/create_add_auth_sign_in_tokens.rb.tt
384
+ - lib/generators/add_auth/external_identities/external_identities_generator.rb
385
+ - lib/generators/add_auth/external_identities/templates/add_add_auth_external_enrollment.rb.tt
386
+ - lib/generators/add_auth/external_identities/templates/add_add_auth_external_identity_validity.rb.tt
387
+ - lib/generators/add_auth/external_identities/templates/add_auth_external_identity.rb
388
+ - lib/generators/add_auth/external_identities/templates/add_auth_external_transaction.rb
389
+ - lib/generators/add_auth/external_identities/templates/create_add_auth_external_identities.rb.tt
390
+ - lib/generators/add_auth/external_identities/templates/providers.rb
313
391
  - lib/generators/add_auth/install/install_generator.rb
314
392
  - lib/generators/add_auth/install/templates/initializer.rb
315
393
  - lib/generators/add_auth/javascript/javascript_generator.rb
@@ -317,6 +395,11 @@ files:
317
395
  - lib/generators/add_auth/javascript/templates/codec.js
318
396
  - lib/generators/add_auth/javascript/templates/passkey.js
319
397
  - lib/generators/add_auth/mailer_views/mailer_views_generator.rb
398
+ - lib/generators/add_auth/mobile_sessions/mobile_sessions_generator.rb
399
+ - lib/generators/add_auth/mobile_sessions/templates/add_add_auth_mobile_sessions.rb.tt
400
+ - lib/generators/add_auth/mobile_sessions/templates/add_auth_mobile_handoff.rb
401
+ - lib/generators/add_auth/mobile_sessions/templates/create_add_auth_mobile_handoffs.rb.tt
402
+ - lib/generators/add_auth/mobile_sessions/templates/mobile.rb
320
403
  - lib/generators/add_auth/notifications/notifications_generator.rb
321
404
  - lib/generators/add_auth/notifications/templates/add_auth_security_event.rb
322
405
  - lib/generators/add_auth/notifications/templates/create_add_auth_security_events.rb.tt