trek 2.3.2 → 2.4.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 (165) hide show
  1. checksums.yaml +4 -4
  2. data/.node-version +1 -1
  3. data/.yarn/releases/yarn-4.18.1.cjs +1000 -0
  4. data/.yarnrc.yml +3 -5
  5. data/AGENTS.md +7 -4
  6. data/CHANGELOG.md +48 -0
  7. data/Gemfile.lock +35 -1
  8. data/Makefile +12 -0
  9. data/app/assets/icons/trek/passkey.svg +5 -0
  10. data/app/assets/stylesheets/trek/base.css +6 -0
  11. data/app/components/trek/entries/item_component/item_component.css +6 -0
  12. data/app/components/trek/form/image_field_component/image_field_component.html.slim +9 -0
  13. data/app/components/trek/form/password_strength_component/password_strength_component.css +56 -0
  14. data/app/components/trek/form/password_strength_component/password_strength_component.html.slim +8 -0
  15. data/app/components/trek/form/password_strength_component/password_strength_component.js +74 -0
  16. data/app/components/trek/form/password_strength_component.rb +29 -0
  17. data/app/components/trek/gate_component/gate_component.css +7 -0
  18. data/app/components/trek/icon/sprite_component.rb +3 -2
  19. data/app/components/trek/section_component/section_component.css +22 -0
  20. data/app/components/trek/section_component/section_component.html.slim +5 -0
  21. data/app/components/trek/section_component/section_component.js +1 -0
  22. data/app/components/trek/section_component.rb +14 -0
  23. data/app/controllers/concerns/trek/auditable.rb +103 -0
  24. data/app/controllers/concerns/trek/filters.rb +2 -0
  25. data/app/controllers/concerns/trek/passkeys.rb +37 -0
  26. data/app/controllers/trek/csp_reports_controller.rb +62 -0
  27. data/app/controllers/trek/resource_controller.rb +7 -1
  28. data/app/helpers/trek/audit_logs_helper.rb +21 -0
  29. data/app/helpers/trek/user_agents_helper.rb +36 -0
  30. data/app/javascript/controllers/index.js +3 -0
  31. data/app/javascript/controllers/passkey_controller.js +118 -0
  32. data/app/javascript/trek.js +4 -0
  33. data/app/jobs/trek/audit_log/purge_job.rb +18 -0
  34. data/app/jobs/trek/purge_expired_sessions_job.rb +14 -0
  35. data/app/jobs/trek/resolve_session_hostname_job.rb +17 -0
  36. data/app/models/concerns/trek/audit_log.rb +30 -0
  37. data/app/models/concerns/trek/users/passkeys.rb +75 -0
  38. data/app/models/concerns/trek/users/password_history.rb +51 -0
  39. data/app/models/concerns/trek/users/password_policy.rb +85 -0
  40. data/app/models/concerns/trek/users/password_renewal.rb +51 -0
  41. data/app/models/concerns/trek/users/session_lifetime.rb +39 -0
  42. data/app/models/concerns/trek/users/sign_in_lockout.rb +67 -0
  43. data/app/models/concerns/trek/users/sign_ins.rb +31 -0
  44. data/app/models/concerns/trek/users/validations.rb +3 -2
  45. data/app/models/trek/feature.rb +6 -0
  46. data/app/models/trek/pwned_passwords.rb +40 -0
  47. data/app/models/trek/user_session.rb +10 -0
  48. data/app/policies/trek/audit_log_policy.rb +34 -0
  49. data/app/policies/trek/user_policy.rb +5 -0
  50. data/app/validators/not_disposable_validator.rb +18 -0
  51. data/config/brakeman.ignore +22 -0
  52. data/config/i18n-tasks.yml +7 -0
  53. data/config/locales/trek.en.yml +144 -39
  54. data/config/locales/trek.fr.yml +145 -40
  55. data/docs/.vitepress/config.mjs +8 -3
  56. data/docs/deploy.md +2 -0
  57. data/docs/proxies.md +53 -0
  58. data/docs/reference/components.md +1 -0
  59. data/docs/reference/environment-variables.md +2 -0
  60. data/docs/reference/generators/admin-user.md +1 -1
  61. data/docs/reference/generators/audit-log.md +113 -0
  62. data/docs/reference/generators/install.md +12 -3
  63. data/docs/reference/generators/security-headers.md +109 -0
  64. data/docs/reference/index.md +3 -0
  65. data/docs/reference/models/tag.md +4 -2
  66. data/docs/reference/models/user.md +123 -3
  67. data/docs/reference/validators.md +94 -0
  68. data/docs/security.md +90 -0
  69. data/lefthook.yml +8 -0
  70. data/lib/generators/trek/install/admin/user_password_resets_generator.rb +5 -0
  71. data/lib/generators/trek/install/admin/user_sessions_generator.rb +5 -0
  72. data/lib/generators/trek/install/admin/users_generator.rb +23 -0
  73. data/lib/generators/trek/install/audit_log_generator.rb +56 -0
  74. data/lib/generators/trek/install/authentication_generator.rb +77 -3
  75. data/lib/generators/trek/install/esbuild_generator.rb +1 -2
  76. data/lib/generators/trek/install/mailer_generator.rb +18 -0
  77. data/lib/generators/trek/install/model_specs_generator.rb +6 -4
  78. data/lib/generators/trek/install/postcss_generator.rb +1 -4
  79. data/lib/generators/trek/install/security_headers_generator.rb +49 -0
  80. data/lib/generators/trek/install/yarn_generator.rb +1 -1
  81. data/lib/generators/trek/install_generator.rb +62 -54
  82. data/lib/generators/trek/taxonomies_generator.rb +5 -0
  83. data/lib/generators/trek/templates/.gitlab-ci.yml +18 -2
  84. data/lib/generators/trek/templates/controllers/admin/active_sessions_controller.rb +21 -0
  85. data/lib/generators/trek/templates/controllers/admin/audit_logs_controller.rb +30 -0
  86. data/lib/generators/trek/templates/controllers/admin/passkey_sessions_controller.rb +41 -0
  87. data/lib/generators/trek/templates/controllers/admin/passkeys_controller.rb +37 -0
  88. data/lib/generators/trek/templates/controllers/admin/user_password_resets_controller.rb +4 -4
  89. data/lib/generators/trek/templates/controllers/admin/user_sessions_controller.rb +53 -4
  90. data/lib/generators/trek/templates/controllers/admin/users_controller.rb +20 -0
  91. data/lib/generators/trek/templates/controllers/concerns/trek/authentication.rb +58 -7
  92. data/lib/generators/trek/templates/helpers/application_helper.rb +0 -4
  93. data/lib/generators/trek/templates/initializers/audit_log.rb +11 -0
  94. data/lib/generators/trek/templates/initializers/content_security_policy.rb +49 -0
  95. data/lib/generators/trek/templates/initializers/permissions_policy.rb +19 -0
  96. data/lib/generators/trek/templates/jobs/admin/password_reset_job.rb +9 -0
  97. data/lib/generators/trek/templates/layouts/admin/auth.html.slim +0 -5
  98. data/lib/generators/trek/templates/layouts/admin.html.slim +0 -3
  99. data/lib/generators/trek/templates/mailers/admin/passwords_mailer.rb +1 -1
  100. data/lib/generators/trek/templates/mailers/admin_mailer.rb +28 -1
  101. data/lib/generators/trek/templates/migrations/audit_logs.rb.erb +27 -0
  102. data/lib/generators/trek/templates/migrations/tags.rb.erb +6 -1
  103. data/lib/generators/trek/templates/migrations/user_passkeys.rb.erb +24 -0
  104. data/lib/generators/trek/templates/migrations/user_password_renewal.rb.erb +8 -0
  105. data/lib/generators/trek/templates/migrations/user_previous_passwords.rb.erb +10 -0
  106. data/lib/generators/trek/templates/migrations/user_session_tracking.rb.erb +11 -0
  107. data/lib/generators/trek/templates/migrations/user_sign_in_lockout.rb.erb +7 -0
  108. data/lib/generators/trek/templates/migrations/user_sign_ins.rb.erb +13 -0
  109. data/lib/generators/trek/templates/models/audit_log.rb +3 -0
  110. data/lib/generators/trek/templates/models/tag_category.rb +2 -1
  111. data/lib/generators/trek/templates/models/user/passkey.rb +17 -0
  112. data/lib/generators/trek/templates/models/user/previous_password.rb +4 -0
  113. data/lib/generators/trek/templates/models/user/session.rb +8 -0
  114. data/lib/generators/trek/templates/policies/audit_log.rb +4 -0
  115. data/lib/generators/trek/templates/spec/mailers/admin/passwords_mailer_spec.rb +16 -0
  116. data/lib/generators/trek/templates/spec/mailers/admin_mailer_spec.rb +50 -0
  117. data/lib/generators/trek/templates/spec/models/audit_log_spec.rb +43 -0
  118. data/lib/generators/trek/templates/spec/models/tag_spec.rb +52 -0
  119. data/lib/generators/trek/templates/spec/models/user/session_spec.rb +68 -0
  120. data/lib/generators/trek/templates/spec/models/user_spec.rb +142 -4
  121. data/lib/generators/trek/templates/spec/requests/admin/active_sessions_spec.rb +119 -0
  122. data/lib/generators/trek/templates/spec/requests/admin/audit_logs_spec.rb +149 -0
  123. data/lib/generators/trek/templates/spec/requests/admin/passkey_sessions_spec.rb +103 -0
  124. data/lib/generators/trek/templates/spec/requests/admin/passkeys_spec.rb +104 -0
  125. data/lib/generators/trek/templates/spec/requests/admin/password_renewal_spec.rb +83 -0
  126. data/lib/generators/trek/templates/spec/requests/admin/sign_in_lockout_spec.rb +95 -0
  127. data/lib/generators/trek/templates/spec/requests/admin/sign_in_notices_spec.rb +93 -0
  128. data/lib/generators/trek/templates/spec/requests/admin/user_password_resets_spec.rb +43 -6
  129. data/lib/generators/trek/templates/spec/requests/admin/user_sessions_spec.rb +25 -2
  130. data/lib/generators/trek/templates/views/admin/audit_logs/index.html.slim +35 -0
  131. data/lib/generators/trek/templates/views/admin/audit_logs/show.html.slim +50 -0
  132. data/lib/generators/trek/templates/views/admin/user_password_resets/edit.html.slim +16 -6
  133. data/lib/generators/trek/templates/views/admin/user_password_resets/new.html.slim +2 -1
  134. data/lib/generators/trek/templates/views/admin/user_sessions/new.html.slim +27 -1
  135. data/lib/generators/trek/templates/views/admin/users/_passkeys.html.slim +67 -0
  136. data/lib/generators/trek/templates/views/admin/users/_properties.html.slim +21 -0
  137. data/lib/generators/trek/templates/views/admin/users/_sessions.html.slim +70 -0
  138. data/lib/generators/trek/templates/views/admin/users/index.html.slim +13 -0
  139. data/lib/generators/trek/templates/views/admin/users/show.html.slim +10 -21
  140. data/lib/generators/trek/templates/views/admin_mailer/new_sign_in.en.html.slim +22 -0
  141. data/lib/generators/trek/templates/views/admin_mailer/new_sign_in.en.text.erb +16 -0
  142. data/lib/generators/trek/templates/views/admin_mailer/new_sign_in.fr.html.slim +22 -0
  143. data/lib/generators/trek/templates/views/admin_mailer/new_sign_in.fr.text.erb +16 -0
  144. data/lib/generators/trek/templates/views/admin_mailer/sign_in_locked.en.html.slim +17 -0
  145. data/lib/generators/trek/templates/views/admin_mailer/sign_in_locked.en.text.erb +10 -0
  146. data/lib/generators/trek/templates/views/admin_mailer/sign_in_locked.fr.html.slim +18 -0
  147. data/lib/generators/trek/templates/views/admin_mailer/sign_in_locked.fr.text.erb +10 -0
  148. data/lib/trek/admin_ip_allowlist.rb +52 -0
  149. data/lib/trek/csp_reports.rb +99 -0
  150. data/lib/trek/data/common_passwords.txt +857 -0
  151. data/lib/trek/data/passkey_providers.json +404 -0
  152. data/lib/trek/disposable_email_domains.rb +53 -0
  153. data/lib/trek/engine.rb +12 -0
  154. data/lib/trek/passkey_providers.rb +19 -0
  155. data/lib/trek/reverse_dns.rb +27 -0
  156. data/lib/trek/version.rb +1 -1
  157. data/lib/trek.rb +13 -0
  158. data/package.json +3 -5
  159. data/renovate.json +11 -1
  160. data/trek.gemspec +3 -0
  161. data/yarn.lock +1757 -2019
  162. metadata +132 -4
  163. data/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs +0 -541
  164. data/.yarn/releases/yarn-3.8.0.cjs +0 -875
  165. data/lib/generators/trek/templates/models/user_session.rb +0 -3
@@ -0,0 +1,404 @@
1
+ {
2
+ "005b20e1-f146-4b87-8f3a-36848ff60ea6": "SECORA ID V2 by Infineon Pay Edition M",
3
+ "0076631b-d4a0-427f-5773-0ec71c9e0279": "HYPR FIDO2 Authenticator",
4
+ "019614a3-2703-7e35-a453-285fd06c5d24": "ATLKey Authenticator",
5
+ "03012cb7-4fb2-42e7-9e8d-a81f10e2a5e9": "YubiKey 5 Series with Lightning (Consumer Profile)",
6
+ "04a8fcf2-19c1-457b-911e-69219f17583f": "Thales PAY GFCX13 authenticator",
7
+ "050dd0bc-ff20-4265-8d5d-305c4b215192": "eToken Fusion FIPS",
8
+ "07a9f89c-6407-4594-9d56-621d5f1e358b": "NXP Semiconductros FIDO2 Conformance Testing CTAP2 Authenticator",
9
+ "08987058-cadc-4b81-b6e1-30de50dcbe96": "Windows Hello",
10
+ "092277e5-8437-46b5-b911-ea64b294acb7": "Taglio CTAP2.1 CS",
11
+ "09591fc6-9811-48f7-8f57-b9f23df6413f": "Pone Biometrics OFFPAD Authenticator",
12
+ "09619fbf-d75e-4a62-be1d-fe4d240864ae": "VeriMark(TM) Guard 2.1 Fingerprint Security Key",
13
+ "0a357157-9b18-4c8a-920e-d156e972b2f8": "YubiKey 5 Series (Consumer Profile)",
14
+ "0acf3011-bc60-f375-fb53-6f05f43154e0": "Nymi FIDO2 Authenticator",
15
+ "0b8b05a4-ebd4-4b0b-8f5f-33d7b6e606ab": "HID Crescendo 4000",
16
+ "0bb43545-fd2c-4185-87dd-feb0b2916ace": "Security Key NFC by Yubico - Enterprise Edition",
17
+ "0d9b2e56-566b-c393-2940-f821b7f15d6d": "Excelsecu eSecu FIDO2 Pro Security Key",
18
+ "0db01cd6-5618-455b-bb46-1ec203d3213e": "GoldKey Security Token",
19
+ "0ea242b4-43c4-4a1b-8b17-dd6d0b6baec6": "Keeper",
20
+ "0ebd9f2c-f685-441c-8c3e-a02a234a840a": "YubiKey 5 Series with NFC Enhanced PIN (Consumer Profile)",
21
+ "0f00cc22-4640-41e7-9585-384ec73ffe9b": "Taglio CTAP2.1 BIO",
22
+ "0f083f18-4105-43a8-ad69-24e812e38141": "Security Key Series with NFC (Consumer Profile)",
23
+ "0fbb74b5-f1ac-4f14-a0f1-ec39b5edfdae": "Thales PAY GFCX19 authenticator",
24
+ "10c70715-2a9a-4de1-b0aa-3cff6d496d39": "eToken Fusion NFC FIPS",
25
+ "1105e4ed-af1d-02ff-ffff-ffffffffffff": "Egomet FIDO2 Authenticator for Android",
26
+ "11544c3c-3693-40ba-9dbb-3b8d2b977988": "Thales PAY GFCX20.1 authenticator",
27
+ "12755c32-8ad1-46eb-881c-e0b38d848b09": "Feitian ePass FIDO Authenticator (CTAP2.1, CTAP2.0, U2F)",
28
+ "12ded745-4bed-47d4-abaa-e713f51d6393": "Feitian AllinOne FIDO2 Authenticator",
29
+ "13ac47cf-1d78-4fd5-9060-aedaabacf826": "HID Crescendo Key V3 - Enterprise Edition",
30
+ "146e77ef-11eb-4423-b847-ce77864e9411": "eToken Fusion NFC PIV",
31
+ "149a2021-8ef6-4133-96b8-81f8d5b7f1f5": "Security Key by Yubico with NFC",
32
+ "17290f1e-c212-34d0-1423-365d729f09d9": "Thales PIN iOS SDK",
33
+ "175cd298-83d2-4a26-b637-313c07a6434e": "Chunghwa Telecom FIDO2 Smart Card Authenticator",
34
+ "18852056-063b-4042-9814-7d0d383081f9": "SECORA ID Key S USB by Infineon Enterprise Edition",
35
+ "19083c3d-8383-4b18-bc03-8f1c9ab2fd1b": "YubiKey 5 Series",
36
+ "19bca99b-7c09-44fe-a969-8cba45764542": "HID Crescendo Key V3 FIPS",
37
+ "1ac71f64-468d-4fe0-bef1-0e5f2f551f18": "YubiKey 5 Series with NFC (Enterprise Profile)",
38
+ "1c086528-58d5-f211-823c-356786e36140": "Atos CardOS FIDO2",
39
+ "1d1b4e33-76a1-47fb-97a0-14b10d0933f1": "Cryptnox FIDO2.1",
40
+ "1d8cac46-47a1-3386-af50-e88ae46fe802": "Ledger Flex FIDO2 Authenticator",
41
+ "1e906e14-77af-46bc-ae9f-fe6ef18257e4": "VeridiumID Passkey iOS SDK",
42
+ "1f8e43df-71ff-e11d-bea3-c4ee7003b232": "Thetis Pro FIDO2 Key",
43
+ "20ac7a17-c814-4833-93fe-539f0d5e3389": "YubiKey 5 Series (Enterprise Profile)",
44
+ "20f0be98-9af9-986a-4b42-8eca4acb28e4": "Excelsecu eSecu FIDO2 Fingerprint Security Key",
45
+ "2194b428-9397-4046-8f39-007a1605a482": "IDPrime 931 Fido",
46
+ "22248c4c-7a12-46e2-9a41-44291b373a4d": "LogMeOnce",
47
+ "22682ee5-4f0e-4c19-be3e-797d5770ebfe": "Precision InnaIT Key FIDO 2 Level 2 certified",
48
+ "23195a52-62d9-40fa-8ee5-23b173f4fb52": "Hyper FIDO Pro NFC",
49
+ "23315ad0-6aca-4ba1-952e-f044f1e36976": "Clife Key 2 NFC",
50
+ "234cd403-35a2-4cc2-8015-77ea280c77f5": "Feitian ePass FIDO2-NFC Series (CTAP2.1, CTAP2.0, U2F)",
51
+ "23786452-f02d-4344-87ed-aaf703726881": "SafeNet eToken Fusion CC",
52
+ "238ab2f5-b57f-4917-b3c6-3d3c6c0c350f": "FEITIAN FT-JCOS BioCard",
53
+ "24083bcb-3034-4867-99de-a3b52e1d426a": "Enterprise Security Key Series with NFC (Consumer Profile)",
54
+ "244eb29e-e090-4e49-81fe-1f20f8d3b8f4": "CanoKey Canary",
55
+ "24673149-6c86-42e7-98d9-433fb5b73296": "YubiKey 5 Series with Lightning",
56
+ "2588ae83-5a3b-4536-b8de-5e540200d191": "Dapple Authenticator from Dapple Security Inc.",
57
+ "260e3021-482d-442d-838c-7edfbe153b7e": "Feitian ePass FIDO2-NFC Plus Authenticator",
58
+ "2772ce93-eb4b-4090-8b73-330f48477d73": "Security Key NFC by Yubico - Enterprise Edition Preview",
59
+ "2a55aee6-27cb-42c0-bc6e-04efe999e88a": "HID Crescendo 4000",
60
+ "2bff89f2-323a-48fc-b7c8-9ff7fe87c07e": "Feitian BioPass FIDO2 Pro (Enterprise Profile)",
61
+ "2c0df832-92de-4be1-8412-88a8f074df4a": "Feitian FIDO Smart Card",
62
+ "2c2aeed8-8174-4159-814b-486e92a261d0": "NEOWAVE WINKEO V2.0",
63
+ "2cd2f727-f6ca-44da-8f48-5c2e5da000a2": "Nitrokey 3 AM",
64
+ "2d3bec26-15ee-4f5d-88b2-53622490270b": "HID Crescendo Key V2",
65
+ "2fc0579f-8113-47ea-b116-bb5a8db9202a": "YubiKey 5 Series with NFC",
66
+ "2ffd6452-01da-471f-821b-ea4bf6c8676a": "IDPrime 941 Fido",
67
+ "30b5035e-d297-4fc1-b00b-addc96ba6a97": "OneSpan FIDO Touch",
68
+ "30b5035e-d297-4ff1-010b-addc96ba6a98": "OneSpan DIGIPASS FX1a",
69
+ "30b5035e-d297-4ff1-020b-addc96ba6a98": "OneSpan DIGIPASS FX1-C",
70
+ "30b5035e-d297-4ff1-b00b-addc96ba6a98": "OneSpan DIGIPASS FX1 BIO",
71
+ "30b5035e-d297-4ff2-010b-addc96ba6a98": "OneSpan DIGIPASS FX2-A",
72
+ "30b5035e-d297-4ff7-010b-addc96ba6a98": "OneSpan DIGIPASS FX7-B",
73
+ "30b5035e-d297-4ff7-020b-addc96ba6a98": "OneSpan DIGIPASS FX7",
74
+ "30b5035e-d297-4ff7-030b-addc96ba6a98": "OneSpan DIGIPASS FX7-C",
75
+ "30b5035e-d297-4ff7-b00b-addc96ba6a98": "OneSpan DIGIPASS FX7",
76
+ "3124e301-f14e-4e38-876d-fbeeb090e7bf": "YubiKey 5 Series with Lightning Preview",
77
+ "31c3f7ff-bf15-4327-83ec-9336abcbcd34": "WinMagic FIDO Eazy - Software",
78
+ "33d6d7d0-279f-4ef3-96b3-2d3282f4bde6": "Thales eToken Fusion BIO Enterprise",
79
+ "341e4da9-3c2e-8103-5a9f-aad887135200": "Ledger Nano S FIDO2 Authenticator",
80
+ "34744913-4f57-4e6e-a527-e9ec3c4b94e6": "YubiKey Bio Series - Multi-protocol Edition",
81
+ "34f5766d-1536-4a24-9033-0e294e510fb0": "YubiKey 5 Series with NFC Preview",
82
+ "357f2718-434f-4124-8a58-7e28c5e4a2fc": "Deepnet SafeKey/Classic (NFC)",
83
+ "35d5ea15-ab24-4416-bdd1-f204c9bce1b6": "CyberFOX Password Manager",
84
+ "361a3082-0278-4583-a16f-72a527f973e4": "eWBM eFA500 FIDO2 Authenticator",
85
+ "3789da91-f943-46bc-95c3-50ea2012f03a": "NEOWAVE Winkeo FIDO2",
86
+ "39502df1-646d-4e31-81a1-2ef68b324678": "USB GoldKey Security Token",
87
+ "39589099-9a75-49fc-afaa-801ca211c62a": "Feitian ePass FIDO-NFC (Enterprise Profile) (CTAP2.1, CTAP2.0, U2F)",
88
+ "39a5647e-1853-446c-a1f6-a79bae9f5bc7": "IDmelon",
89
+ "3a662962-c6d4-4023-bebb-98ae92e78e20": "YubiKey 5 FIPS Series with Lightning (Enterprise Profile)",
90
+ "3aa78eb1-ddd8-46a8-a821-8f8ec57a7bd5": "YubiKey 5 CCN Series with NFC",
91
+ "3b1adb99-0dfe-46fd-90b8-7f7614a4de2a": "GoTrust Idem Key",
92
+ "3b24bf49-1d45-4484-a917-13175df0867b": "YubiKey 5 Series with Lightning (Enterprise Profile)",
93
+ "3b3faa7b-2c56-4489-bcd3-53b83ee75768": "SECORA Connect SLS21 D1 FIDO 2.1 v1.0 by Infineon - Enterprise Edition",
94
+ "3e078ffd-4c54-4586-8baa-a77da113aec5": "Hideez Key 3 FIDO2",
95
+ "3e22415d-7fdf-4ea4-8a0c-dd60c4249b9d": "Feitian iePass FIDO Authenticator",
96
+ "3e9db280-256a-4e17-b08e-19d79e9be166": "SECORA ID V2 by Infineon Pay Edition",
97
+ "3ec9c8d3-a5a7-415b-a7b5-f1d606368d3f": "YubiKey 5 CCN Series with NFC (Enterprise Profile)",
98
+ "3f59672f-20aa-4afe-b6f4-7e5e916b6d98": "Arculus FIDO 2.1 Key Card [P71]",
99
+ "3fd410dc-8ab7-4b86-a1cb-c7174620b2dc": "IDEMIA SOLVO Fly 80 R1 FIDO Card Draft",
100
+ "41e39911-c669-4811-b860-c6ad0b411b96": "YubiKey 5 Series with NFC (Enterprise Profile)",
101
+ "42b4fb4a-2866-43b2-9bf7-6c6669c2e5d3": "Google Titan Security Key v2",
102
+ "42df17de-06ba-4177-a2bb-6701be1380d6": "Feitian BioPass FIDO2 Plus Authenticator",
103
+ "454e5346-4944-4ffd-6c93-8e9267193e9a": "Ensurity ThinC",
104
+ "454e5346-4944-4ffd-6c93-8e9267193e9b": "Ensurity AUTH BioPro",
105
+ "4599062e-6926-4fe7-9566-9e8fb1aedaa0": "YubiKey 5 Series (Enterprise Profile)",
106
+ "45e3057e-b2f9-48ed-912f-9b901e153b16": "Uniqkey",
107
+ "46544d5d-8f5d-4db4-89ac-ea8977073fff": "Foongtone FIDO Authenticator",
108
+ "477b05cd-7f78-4fe7-b629-27247f296138": "WALLIX Vault",
109
+ "47ab2fb4-66ac-4184-9ae1-86be814012d5": "Security Key NFC by Yubico - Enterprise Edition",
110
+ "489ff376-b48d-6640-bb69-782a860ca795": "Mettlesemi Vishwaas Eagle Authenticator using FIDO2",
111
+ "49a15c1c-3f63-3f51-23a7-b9e00096edd1": "IDEX CTAP2.1 Biometrics",
112
+ "4b3f8944-d4f2-4d21-bb19-764a986ec160": "KeyXentic FIDO2 Secp256R1 FIDO2 CTAP2 Authenticator",
113
+ "4b89f401-464e-4745-a520-486ddfc5d80e": "IIST FIDO2 Authenticator",
114
+ "4c0cf95d-2f40-43b5-ba42-4c83a11c04ba": "Feitian BioPass FIDO2 Pro Authenticator",
115
+ "4c50ff10-1057-4fc6-b8ed-43a529530c3c": "ImproveID Authenticator",
116
+ "4d41190c-7beb-4a84-8018-adf265a6352d": "Thales IDPrime FIDO Bio",
117
+ "4e2ddbc2-2687-4709-8551-cb66c9776bfe": "SECORA ID V2 FIDO2.1 L1",
118
+ "4e768f2c-5fab-48b3-b300-220eb487752b": "Hideez Key 4 FIDO2 SDK",
119
+ "4fc84f16-2545-4e53-b8fc-7bf4d7282a10": "YubiKey 5 CCN Series with NFC (Enterprise Profile)",
120
+ "504d7149-4e4c-3841-4555-55445a677357": "WiSECURE AuthTron USB FIDO2 Authenticator",
121
+ "50726f74-6f6e-5061-7373-50726f746f6e": "Proton Pass",
122
+ "50a45b0c-80e7-f944-bf29-f552bfa2e048": "ACS FIDO Authenticator",
123
+ "50cbf15a-238c-4457-8f16-812c43bf3c49": "Ensurity AUTH TouchPro",
124
+ "516d3969-5a57-5651-5958-4e7a49434167": "SmartDisplayer BobeePass FIDO2 Authenticator",
125
+ "51787637-8ab8-460c-9302-de0b853d4ffb": "SpearID FIDO2 Standard",
126
+ "522a3f91-5f5d-480d-be37-6cecfad5a27b": "Precision InnaIT Key FIDO 2 Level 2 certified",
127
+ "524de2de-982f-49b4-a769-2b5e3b73ad79": "YubiKey 5 Series (Enterprise Profile)",
128
+ "531126d6-e717-415c-9320-3d9aa6981239": "Dashlane",
129
+ "53334693-4b3f-4198-8857-53772de2ab65": "Precision InnaIT Key FIDO 2 Level 2 certified",
130
+ "53414d53-554e-4700-0000-000000000000": "Samsung Pass",
131
+ "5343502d-5343-5343-6172-644649444f32": "ESS Smart Card Inc. Authenticator",
132
+ "53e7a7a5-e75f-4d3d-9483-12fc779cdf23": "Password Depot",
133
+ "54d9fee8-e621-4291-8b18-7157b99c5bec": "HID Crescendo Enabled",
134
+ "55fd881f-40ba-4eaf-8435-42c5fed08b76": "SECORA ID V2 by Infineon Consumer Edition",
135
+ "560a780c-b6ae-4f03-b110-082f856425b4": "KQC QuKey Bio FIDO2 Authenticator",
136
+ "5626bed4-e756-430b-a7ff-ca78c8b12738": "VALMIDO PRO FIDO",
137
+ "57235694-51a5-4a4d-a81a-f42185df6502": "SHALO AUTH",
138
+ "5753362b-4e6b-6345-7b2f-255438404c75": "WiSECURE Blentity FIDO2 Authenticator",
139
+ "57f7de54-c807-4eab-b1c6-1c9be7984e92": "YubiKey 5 FIPS Series",
140
+ "58276709-bb4b-4bb3-baf1-60eea99282a7": "YubiKey Bio Series - Multi-protocol Edition 1VDJSN",
141
+ "58b44d0b-0a7c-f33a-fd48-f7153c871352": "Ledger Nano S Plus FIDO2 Authenticator",
142
+ "59f85fe7-faa5-4c92-9f52-697b9d4d5473": "RSA Authenticator 4 for Android",
143
+ "5b0e46ba-db02-44ac-b979-ca9b84f5e335": "YubiKey 5 FIPS Series with Lightning Preview",
144
+ "5ca1ab1e-1337-fa57-f1d0-a117e71ca702": "Allthenticator iOS App: roaming BLE FIDO2 Allthenticator for Windows, Mac, Linux, and Allthenticate door readers",
145
+ "5ca1ab1e-fa57-1337-f1d0-a117371ca702": "Allthenticator Android App: roaming BLE FIDO2 Allthenticator for Windows, Mac, Linux, and Allthenticate door readers",
146
+ "5ca471bb-a56d-46ad-a496-67e70e9ed9fb": "Parcel",
147
+ "5d629218-d3a5-11ed-afa1-0242ac120002": "Swissbit iShield Key Pro",
148
+ "5df66f62-5b47-43d3-aa1d-a6e31c8dbeb5": "Securitag Assembly Group FIDO Authenticator NFC",
149
+ "5e264d9d-28ef-4d34-95b4-5941e7a4faa8": "Ideem ZSM FIDO2 Authenticator",
150
+ "5ea308b2-7ac7-48b9-ac09-7e2da9015f8c": "Veridium Android SDK",
151
+ "5eaff75a-dd43-451f-af9f-87c9eeae293e": "Swissbit iShield Key 2 FIPS Enterprise",
152
+ "5fdb81b8-53f0-4967-a881-f5ec26fe4d18": "VinCSS FIDO2 Authenticator",
153
+ "6002f033-3c07-ce3e-d0f7-0ffe5ed42543": "Excelsecu eSecu FIDO2 Fingerprint Key",
154
+ "6028b017-b1d4-4c02-b4b3-afcdafc96bb2": "Windows Hello",
155
+ "61250591-b2bc-4456-b719-0b17be90bb30": "eWBM eFPA FIDO2 Authenticator",
156
+ "6169eb16-f87a-42d8-978d-e1ac0c3f319f": "GoTrust Idem Card",
157
+ "62e54e98-c209-4df3-b692-de71bb6a8528": "YubiKey 5 FIPS Series with NFC Preview",
158
+ "65c97700-f5ef-4d5c-8a42-f30e45ac94b7": "Royal Vault",
159
+ "662ef48a-95e2-4aaa-a6c1-5b9c40375824": "YubiKey 5 Series with NFC - Enhanced PIN",
160
+ "664d9f67-84a2-412a-9ff7-b4f7d8ee6d05": "OpenSK authenticator",
161
+ "66a0ccb3-bd6a-191f-ee06-e375c50b9846": "Thales Bio iOS SDK",
162
+ "6832d205-75f2-44c7-a864-e868c796d06e": "Precision InnaIT Key FIDO 2 Level 2 certified",
163
+ "686de81e-fff2-41c1-bb83-2723aaf3e913": "IIST SASE USB KEY 1",
164
+ "692db549-7ae5-44d5-a1e5-dd20a493b723": "HID Crescendo Key",
165
+ "69700f79-d1fb-472e-bd9b-a3a3b9a9eda0": "Pone Biometrics OFFPAD Authenticator",
166
+ "69840def-9dcf-4632-bf87-6ac2e451b4f5": "Keyholm",
167
+ "6999180d-630c-442d-b8f7-424b90a43fae": "Hyper FIDO Pro (CTAP2.1, CTAP2.0, U2F)",
168
+ "69e7c36f-f2f6-9e0d-07a6-bcc243262e6b": "OneKey FIDO2 Authenticator",
169
+ "6ab56fad-881f-4a43-acb2-0be065924522": "YubiKey 5 Series with NFC (Enterprise Profile)",
170
+ "6bb49926-160a-4306-a100-4eb39ba6ac45": "AVG Password Manager",
171
+ "6d212b28-a2c1-4638-b375-5932070f62e9": "initial",
172
+ "6d44ba9b-f6ec-2e49-b930-0c8fe920cb73": "Security Key by Yubico with NFC",
173
+ "6d4aa745-dad5-40c4-b9b4-6a252fcee70f": "GoTrust Cyber Key",
174
+ "6d6f6e69-6361-4d33-a001-706173736b79": "Monica Pass",
175
+ "6dae43be-af9c-417b-8b9f-1b611168ec60": "Dapple Authenticator from Dapple Security Inc.",
176
+ "6e24d385-004a-16a0-7bfe-efd963845b34": "Ledger Stax FIDO2 Authenticator",
177
+ "6e34341a-88c7-483d-b777-a425c355be93": "WebComm OETHenticator",
178
+ "6e8d1eae-8d40-4c25-bcf8-4633959afc71": "Veridium iOS SDK",
179
+ "6ec5cff2-a0f9-4169-945b-f33b563f7b99": "YubiKey Bio Series - Multi-protocol Edition (Enterprise Profile)",
180
+ "6f706c75-7366-6964-6f2d-70732d303031": "OPPO FIDO2 Authenticator",
181
+ "70617373-7761-6c6c-6669-646f32303236": "Passwall",
182
+ "70e7c36f-f2f6-9e0d-07a6-bcc243262e6b": "OneKey FIDO2 Bluetooth Authenticator",
183
+ "72a2b5b1-95a5-4df9-a881-4192aff4f72e": "GoTrust Idem Key mini",
184
+ "72c6b72d-8512-4c66-8359-9d3d10d9222f": "Security Key NFC by Yubico - Enterprise Edition (Enterprise Profile)",
185
+ "73402251-f2a8-4f03-873e-3cb6db604b03": "uTrust FIDO2 Security Key",
186
+ "73bb0cd4-e502-49b8-9c6f-b59445bf720b": "YubiKey 5 FIPS Series",
187
+ "7409272d-1ff9-4e10-9fc9-ac0019c124fd": "YubiKey Bio Series - FIDO Edition",
188
+ "74820b05-a6c9-40f9-8fb0-9f86aca93998": "SafeNet eToken Fusion",
189
+ "760eda36-00aa-4d29-855b-4012a182cdeb": "Security Key NFC by Yubico Preview",
190
+ "76692dc1-c56a-48d9-8e7d-31b5ced430ac": "VeriMark NFC+ USB-A Security Key",
191
+ "77010bd7-212a-4fc9-b236-d2ca5e9d4084": "Feitian BioPass FIDO2 Authenticator",
192
+ "771b48fd-d3d4-4f74-9232-fc157ab0507a": "Edge on Mac",
193
+ "773c30d9-5919-4e96-a4f5-db65e95cf890": "GSTAG OAK FIDO2 Authenticator",
194
+ "7787a482-13e8-4784-8a06-c7ed49a7aaf4": "Swissbit iShield Key 2",
195
+ "78ba3993-d784-4f44-8d6e-cc0a8ad5230e": "Feitian ePass FIDO-NFC(CTAP2.1, CTAP2.0, U2F)",
196
+ "7991798a-a7f3-487f-98c0-3faf7a458a04": "HID Crescendo Key V3",
197
+ "79f3c8ba-9e35-484b-8f47-53a5a0f5c630": "YubiKey 5 FIPS Series with NFC (Enterprise Profile)",
198
+ "7a53c643-9dec-4219-b3a4-f9d24aca4e12": "G+D StarKey FIDO2-NFC",
199
+ "7b96457d-e3cd-432b-9ceb-c9fdd7ef7432": "YubiKey 5 FIPS Series with Lightning",
200
+ "7d1351a6-e097-4852-b8bf-c9ac5c9ce4a3": "YubiKey Bio Series - Multi-protocol Edition",
201
+ "7d2afadd-bf6b-44a2-a66b-e831fceb8eff": "Taglio CTAP2.1 EP",
202
+ "7dab85a5-d16d-4eaf-a7ef-4c1385b151c5": "YubiKey 5 Series with NFC (Consumer Profile) KVZR57-2",
203
+ "7e3f3d30-3557-4442-bdae-139312178b39": "RSA DS100",
204
+ "8108bdcd-8483-46b3-b3ce-359f8190325e": "SECORA ID V2 by Infineon Enterprise Edition",
205
+ "817cdab8-0d51-4de1-a821-e25b88519cf3": "Swissbit iShield Key 2 FIPS",
206
+ "820d89ed-d65a-409e-85cb-f73f0578f82a": "IDmelon Authenticator",
207
+ "82b0a720-127a-4788-b56d-d1d4b2d82eac": "ID-One Key",
208
+ "833b721a-ff5f-4d00-bb2e-bdda3ec01e29": "Feitian ePass FIDO2 Authenticator",
209
+ "83c47309-aabb-4108-8470-8be838b573cb": "YubiKey Bio Series - FIDO Edition (Enterprise Profile)",
210
+ "85203421-48f9-4355-9bc8-8a53846e5083": "YubiKey 5 FIPS Series with Lightning",
211
+ "8681a073-5f50-4d52-bce4-e21658d207b3": "RSA Authenticator 4 for iOS",
212
+ "8791f7dc-418b-4510-bbf5-3baf30715324": "Virtual FIDO2 authenticator for Linux-based systems",
213
+ "87c13177-85d6-40ac-8c61-fe7ab3de9dfb": "HID Crescendo Key V3",
214
+ "87dbc5a1-4c94-4dc8-8a47-97d800fd1f3c": "eWBM eFA320 FIDO2 Authenticator",
215
+ "87f5ec51-f721-4feb-9fe4-be18c4971894": "PassCard",
216
+ "882adaf5-3aa9-4708-8e7d-3957103775b4": "T-Shield TrustSec FIDO2 Bio and client PIN version",
217
+ "8836336a-f590-0921-301d-46427531eee6": "Thales Bio Android SDK",
218
+ "8876631b-d4a0-427f-5773-0ec71c9e0279": "Solo Secp256R1 FIDO2 CTAP2 Authenticator",
219
+ "88bbd2f0-342a-42e7-9729-dd158be5407a": "Precision InnaIT Key FIDO 2 Level 2 certified",
220
+ "891494da-2c90-4d31-a9cd-4eab0aed1309": "Sésame",
221
+ "8976631b-d4a0-427f-5773-0ec71c9e0279": "Solo Tap Secp256R1 FIDO2 CTAP2 Authenticator",
222
+ "89b19028-256b-4025-8872-255358d950e4": "Sentry Enterprises CTAP2 Authenticator",
223
+ "8c39ee86-7f9a-4a95-9ba3-f6b097e5c2ee": "YubiKey Bio Series - FIDO Edition (Enterprise Profile)",
224
+ "8c97a730-3f7b-41a6-87d6-1e9b62bda6f0": "FT-JCOS FIDO Fingerprint Card",
225
+ "8caf7e7b-6c8b-46a9-b36b-5d04740d7463": "cryptovision ePasslet Suite FIDO Authenticator",
226
+ "8d1b1fcb-3c76-49a9-9129-5515b346aa02": "IDEMIA ID-ONE Card",
227
+ "8d4378b0-725d-4432-b3c2-01fcdaf46286": "VeridiumID Passkey Android SDK",
228
+ "8da0e4dc-164b-454e-972e-88f362b23d59": "CardOS FIDO2 Token",
229
+ "8eec9bf9-486c-46da-9a67-1fbb4f66b9ed": "HID Crescendo 4000 FIPS",
230
+ "9012593f-43e4-4461-a97a-d92777b55d74": "VinCSS FIDO2 Fingerprint",
231
+ "905b4cb4-ed6f-4da9-92fc-45e0d4e9b5c7": "YubiKey 5 FIPS Series (Enterprise Profile)",
232
+ "90636e1f-ef82-43bf-bdcf-5255f139d12f": "YubiKey Bio Series - Multi-protocol Edition",
233
+ "912435d9-4a88-42f3-972d-1244b0d51420": "SI0X FIDO CL WRIST v1.0",
234
+ "91ad6b93-264b-4987-8737-3a690cad6917": "Token Ring FIDO2 Authenticator",
235
+ "930b0c03-ef46-4ac4-935c-538dccd1fcdb": "Chipwon Clife Key",
236
+ "931327dd-c89b-406c-a81e-ed7058ef36c6": "Swissbit iShield Key FIDO2",
237
+ "95442b2e-f15e-4def-b270-efb106facb4e": "eWBM eFA310 FIDO2 Authenticator",
238
+ "95e4d58c-056e-4a65-866d-f5a69659e880": "TruU Windows Authenticator",
239
+ "970c8d9c-19d2-46af-aa32-3f448db49e35": "WinMagic FIDO Eazy - TPM",
240
+ "973446ca-e21c-9a9b-99f5-9b985a67af0f": "ACS FIDO Authenticator Card",
241
+ "97e6a830-c952-4740-95fc-7c78dc97ce47": "YubiKey Bio Series - Multi-protocol Edition (Enterprise Profile)",
242
+ "9806a2c8-c0da-478e-b4ca-620005d34182": "YubiKey Bio Multi-protocol Edition (Consumer Profile) 1VDJSN-2",
243
+ "9876631b-d4a0-427f-5773-0ec71c9e0279": "Somu Secp256R1 FIDO2 CTAP2 Authenticator",
244
+ "9955a1cd-564c-d388-ad68-9878a27be9f1": "StarSign Chase FIDO Card",
245
+ "998f358b-2dd2-4cbe-a43a-e8107438dfb3": "OnlyKey Secp256R1 FIDO2 CTAP2 Authenticator",
246
+ "99bf4610-ec26-4252-b31f-7380ccd59db5": "ZTPass SmartAuth",
247
+ "99ed6c29-4573-4847-816d-78ad8f1c75ef": "VeroCard FIDO2 Authenticator",
248
+ "9a272558-5cfa-4424-be37-65509677b77d": "SECORA ID Key S USB by Infineon Consumer Edition",
249
+ "9a3f2abd-a73d-439c-9ee7-1b53a857eaa7": "YubiKey 5 Series with NFC Enhanced PIN (Enterprise Profile)",
250
+ "9addb28c-b46f-4402-808f-019651441ff3": "KeePassPasskey",
251
+ "9c1f2b6e-4d3a-4f7c-8b21-5e6a7d8c9f01": "Idira",
252
+ "9c835346-796b-4c27-8898-d6032f515cc5": "Cryptnox FIDO2",
253
+ "9d3df6ba-282f-11ed-a261-0242ac120002": "Arculus FIDO2/U2F Key Card",
254
+ "9dd8d593-2213-438a-97f8-d6b813d51c27": "YubiKey Bio Fido Edition (Consumer Profile)",
255
+ "9ddd1817-af5a-4672-a2b9-3e3dd95000a9": "Windows Hello",
256
+ "9e66c661-e428-452a-a8fb-51f7ed088acf": "YubiKey 5 FIPS Series with Lightning (RC Preview)",
257
+ "9eb7eabc-9db5-49a1-b6c3-555a802093f4": "YubiKey 5 Series with NFC KVZR57",
258
+ "9eb85bb6-9625-4a72-815d-0487830ccab2": "Ensurity AUTH BioPro Desktop",
259
+ "9f0d8150-baa5-4c00-9299-ad62c8bb4e87": "GoTrust Idem Card",
260
+ "9f77e279-a6e2-4d58-b700-31e5943c6a98": "Hyper FIDO Pro",
261
+ "9f8a3b2c-1d4e-4f6a-8b0c-2e1d3c4b5a69": "U2 Secured",
262
+ "9ff4cc65-6154-4fff-ba09-9e2af7882ad2": "Security Key NFC by Yubico - Enterprise Edition (Enterprise Profile)",
263
+ "a02140b7-0cbd-42e1-a9b5-a39da2545114": "Feitian BioPass FIDO2 Plus (Enterprise Profile)",
264
+ "a02167b9-ae71-4ac7-9a07-06432ebb6f1c": "YubiKey 5 Series with Lightning",
265
+ "a10c6dd9-465e-4226-8198-c7c44b91c555": "Kaspersky Password Manager",
266
+ "a11a5faa-9f32-4b8c-8c5d-2f7d13e8c942": "AliasVault",
267
+ "a1f52be5-dfab-4364-b51c-2bd496b14a56": "OCTATCO EzFinger2 FIDO2 AUTHENTICATOR",
268
+ "a25342c0-3cdc-4414-8e46-f4807fca511c": "YubiKey 5 Series with NFC",
269
+ "a3975549-b191-fd67-b8fb-017e2917fdb3": "Excelsecu eSecu FIDO2 NFC Security Key",
270
+ "a4a2d88e-9796-4356-9164-e2a5a8bd019c": "Avast Password Manager",
271
+ "a4e9fc6d-4cbe-4758-b8ba-37598bb5bbaa": "Security Key NFC by Yubico",
272
+ "a6c5f5d8-2ad0-48b6-8257-e502c8970931": "eToken FIDO NFC Enterprise",
273
+ "a7fc3f84-86a3-4da4-a3d7-eb6485a066d8": "NEOWAVE Badgeo FIDO2 (CTAP 2.1)",
274
+ "aa79f476-ea00-417e-9628-1e8365123922": "HID Crescendo 4000 FIDO",
275
+ "ab32f0c6-2239-afbb-c470-d2ef4e254db6": "TEST (DUMMY RECORD)",
276
+ "ab32f0c6-2239-afbb-c470-d2ef4e254db7": "TOKEN2 FIDO2 Security Key",
277
+ "ab7d1767-3fa0-4388-b6c4-feef7a844809": "Enterprise Security Key Series with NFC (Enterprise Profile)",
278
+ "ad08c78a-4e41-49b9-86a2-ac15b06899e2": "YubiKey Bio Series - FIDO Edition (Enterprise Profile)",
279
+ "adce0002-35bc-c60a-648b-0b25f1f05503": "Chrome on Mac",
280
+ "add92433-0d69-4026-8166-29b25bce64e9": "YubiKey Bio Fido Edition (Enterprise Profile)",
281
+ "aeb6569c-f8fb-4950-ac60-24ca2bbe2e52": "HID Crescendo C2300",
282
+ "b113a455-cfb6-4c17-8cba-cd952feb7d48": "eToken FIDO NFC",
283
+ "b12eac35-586c-4809-a4b1-d81af6c305cf": "Deepnet SafeKey/Classic (NFC)",
284
+ "b2647539-a130-4aee-8c34-9e4b52339123": "ZTPass SmartAuth",
285
+ "b267239b-954f-4041-a01b-ee4f33c145b6": "authenton1 - CTAP2.1",
286
+ "b2c1a50b-dad8-4dc7-ba4d-0ce9597904bc": "YubiKey 5 Series with NFC - Enhanced PIN (Enterprise Profile)",
287
+ "b3315166-f36c-b05f-fea8-66a3dfdad171": "Ledger Nano Gen5 FIDO2 Authenticator",
288
+ "b35a26b2-8f6e-4697-ab1d-d44db4da28c6": "Zoho Vault",
289
+ "b415094c-49d3-4c8b-b3fe-7d0ad28a6bc4": "ZTPass SmartAuth",
290
+ "b50d5e0a-7f81-4959-9b12-f45407407503": "IDPrime 3940 FIDO",
291
+ "b5397666-4885-aa6b-cebf-e52262a439a2": "Chromium Browser",
292
+ "b68c4b8d-65cb-42ae-b4f6-8606dfba3c22": "IDEMIA SOLVO Fly 80 R3 FIDO Card for j",
293
+ "b6ede29c-3772-412c-8a78-539c1f4c62d2": "Feitian BioPass FIDO2 Plus Authenticator",
294
+ "b78a0a55-6ef8-d246-a042-ba0f6d55050c": "LastPass",
295
+ "b7d3f68e-88a6-471e-9ecf-2df26d041ede": "Security Key NFC by Yubico",
296
+ "b84e4048-15dc-4dd0-8640-f4f60813c8af": "NordPass",
297
+ "b90e7dc1-316e-4fee-a25a-56a666a670fe": "YubiKey 5 Series with Lightning (Enterprise Profile)",
298
+ "b92c3f9a-c014-4056-887f-140a2501163b": "Security Key by Yubico",
299
+ "b93fd961-f2e6-462f-b122-82002247de78": "Android Authenticator",
300
+ "b9f6b7b6-f929-4189-bca9-dd951240c132": "Deepnet SafeKey/Classic (USB)",
301
+ "ba0a9266-40d8-4048-9786-d710b5474752": "YubiKey Bio Multi-protocol Edition (Consumer Profile)",
302
+ "ba76a271-6eb6-4171-874d-b6428dbe3437": "ATKey.ProS",
303
+ "ba86dc56-635f-4141-aef6-00227b1b9af6": "TruU Windows Authenticator",
304
+ "bada5566-a7aa-401f-bd96-45619a55120d": "1Password",
305
+ "bb405265-40cf-4115-93e5-a332c1968d8c": "ID-One Card",
306
+ "bb66c294-de08-47e4-b7aa-d12c2cd3fb20": "Mettlesemi Vishwaas Hawk Authenticator using FIDO2",
307
+ "bb878d7b-cf54-4784-b390-357030497043": "TruU FIDO2 Authenticator",
308
+ "bbf4b6a7-679d-f6fc-c4f2-8ac0ddf9015a": "Excelsecu eSecu FIDO2 PRO Security Key",
309
+ "bc2fe499-0d8e-4ffe-96f3-94a82840cf8c": "OCTATCO EzQuant FIDO2 AUTHENTICATOR",
310
+ "be727034-574a-f799-5c76-0929e0430973": "Crayonic KeyVault K1 (USB-NFC-BLE FIDO2 Authenticator)",
311
+ "bfc748bb-3429-4faa-b9f9-7cfa9f3b76d0": "iPasswords",
312
+ "c09b3399-4a3d-306c-7bdc-967fef47241f": "Giesecke+Devrient StarSign FIDO Card 2.1",
313
+ "c1288a5c-d66b-495c-a68f-4e81f9ec5b53": "Deepnet SafeKey/Classic (FP) XF",
314
+ "c1bee13f-f347-4f53-9cd4-e8a2f98ee008": "ZTPass SmartAuth FIPS",
315
+ "c1f9a0bc-1dd2-404a-b27f-8e29047a43fd": "YubiKey 5 FIPS Series with NFC",
316
+ "c3479970-e58a-4f70-836f-853bf42fb063": "YubiKey 5 Series with Lightning (Enterprise Profile)",
317
+ "c3f47802-de73-4dfc-ba22-671fe3304f90": "eToken Fusion NFC PIV Enterprise",
318
+ "c4ddaf11-3032-4e77-b3b9-3a340369b9ad": "HID Crescendo Fusion",
319
+ "c4ed941c-86d3-4532-a6a9-bc42b80d5c38": "Authn8",
320
+ "c5703116-972b-4851-a3e7-ae1259843399": "NEOWAVE Badgeo FIDO2",
321
+ "c5ef55ff-ad9a-4b9f-b580-adebafe026d0": "YubiKey 5 Series with Lightning",
322
+ "c611b55c-77b2-4527-8082-590e931b2f08": "GoTrust Idem Key",
323
+ "c62100de-759b-4bf8-b22b-63b3e3a80401": "Token Ring 3 FIDO2 Authenticator",
324
+ "c80dbd9a-533f-4a17-b941-1a2f1c7cedff": "HID Crescendo C3000",
325
+ "c89674e3-a765-4b07-888a-7c086fbdf04b": "StarSign FIDO Card",
326
+ "c89e6a38-6c00-5426-5aa5-c9cbf48f0382": "ACS FIDO Authenticator NFC",
327
+ "c9cadfc9-89a9-489e-a25a-c7e86a4d5f15": "Burp Suite Navigation Recorder",
328
+ "ca4cff1b-5a81-4404-8194-59aabcf1660b": "IDPrime 3930 FIDO",
329
+ "ca87cb70-4c1b-4579-a8e8-4efdd7c007e0": "FIDO Alliance TruU Sample FIDO2 Authenticator",
330
+ "cb4f796c-a20a-af9e-d639-213c1ec247f3": "ACS PocketKey+ Bio",
331
+ "cb69481e-8ff7-4039-93ec-0a2729a154a8": "YubiKey 5 Series",
332
+ "cb6f6666-38ea-4873-9161-ff456a82d316": "iPass Secure Auth",
333
+ "cc45f64e-52a2-451b-831a-4edd8022a202": "ToothPic Passkey Provider",
334
+ "cd69adb5-3c7a-deb9-3177-6800ea6cb72a": "Thales PIN Android SDK",
335
+ "cdbdaea2-c415-5073-50f7-c04e968640b6": "Excelsecu eSecu FIDO2 Security Key",
336
+ "ce6bf97f-9f69-4ba7-9032-97adc6ca5cf1": "YubiKey 5 FIPS Series with NFC (RC Preview)",
337
+ "cfcb13a2-244f-4b36-9077-82b79d6a7de7": "USB/NFC Passcode Authenticator",
338
+ "d2717a32-9851-48a8-9961-b264c97a411a": "Fenko Vault",
339
+ "d2fbd093-ee62-488d-9dad-1e36389f8826": "YubiKey 5 FIPS Series (RC Preview)",
340
+ "d3452668-01fd-4c12-926c-83a4204853aa": "Microsoft Password Manager",
341
+ "d350af52-0351-4ba2-acd3-dfeeadc3f764": "pwSafe",
342
+ "d384db22-4d50-ebde-2eac-5765cf1e2a44": "Excelsecu eSecu FIDO2 Fingerprint Security Key",
343
+ "d41f5a69-b817-4144-a13c-9ebd6d9254d6": "ATKey.Card CTAP2.0",
344
+ "d49b2120-b865-4191-8cea-be84a52b0485": "Heimlane Vault",
345
+ "d548826e-79b4-db40-a3d8-11116f7e8349": "Bitwarden",
346
+ "d61d3b87-3e7c-4aea-9c50-441c371903ad": "KeyVault Secp256R1 FIDO2 CTAP2 Authenticator",
347
+ "d716019a-9f4e-4041-9750-17c78f8ae81a": "eToken Fusion BIO",
348
+ "d7781e5d-e353-46aa-afe2-3ca49f13332a": "YubiKey 5 Series with NFC",
349
+ "d7a423ad-3e19-4492-9200-78137dccc136": "VivoKey Apex FIDO2",
350
+ "d821a7d4-e97c-4cb6-bd82-4237731fd4be": "Hyper FIDO Bio Security Key",
351
+ "d8522d9f-575b-4866-88a9-ba99fa02f35b": "YubiKey Bio Series - FIDO Edition",
352
+ "d91c5288-0ef0-49b7-b8ae-21ca0aa6b3f3": "KEY-ID FIDO2 Authenticator",
353
+ "d94a29d9-52dd-4247-9c2d-8b818b610389": "VeriMark Guard Fingerprint Key",
354
+ "d9be9d39-e6a6-4c28-a581-32b044d986e4": "Sticky Password Manager",
355
+ "da1fa263-8b25-42b6-a820-c0036f21ba7f": "ATKey.Card NFC",
356
+ "da583154-ce16-4cdf-9fe6-1dba788c0998": "Hey Be Safe",
357
+ "dc5e949d-f939-43b3-9877-a85c7186b753": "YubiKey Bio Multi-protocol Edition (Enterprise Profile)",
358
+ "dd4ec289-e01d-41c9-bb89-70fa845d4bf2": "iCloud Keychain (Managed)",
359
+ "dd86a2da-86a0-4cbe-b462-4bd31f57bc6f": "YubiKey Bio Series - FIDO Edition",
360
+ "dda9aa35-aaf1-4d3c-b6db-7902fd7dbbbf": "IDEMIA SOLVO Fly 80 R3 FIDO Card c",
361
+ "de503f9c-21a4-4f76-b4b7-558eb55c6f89": "Devolutions",
362
+ "dee49ee1-11cb-47b6-bed0-8e995e67a0fb": "SECORA Connect SLS21 D1 FIDO 2.1 v1.0 by Infineon - Consumer Edition",
363
+ "def8ab1a-9f91-44f1-a103-088d8dc7d681": "IDEMIA SOLVO Fly 80 R3 FIDO Card e",
364
+ "e1a96183-5016-4f24-b55b-e3ae23614cc6": "ATKey.Pro CTAP2.0",
365
+ "e400ef8c-711d-4692-af46-7f2cf7da23ad": "Swissbit iShield Key 2 Enterprise",
366
+ "e416201b-afeb-41ca-a03d-2281c28322aa": "ATKey.Pro CTAP2.1",
367
+ "e41b42a3-60ac-4afb-8757-a98f2d7f6c9f": "Deepnet SafeKey/Classic (FP)",
368
+ "e50e32f3-02ec-4afb-bdac-7205d12629df": "IDEMIA FIDO Card",
369
+ "e77e3c64-05e3-428b-8824-0cbeb04b829d": "Security Key NFC by Yubico",
370
+ "e7db2bd3-f2fe-4d71-ad78-7e7aa166cfd1": "Avira Password Manager",
371
+ "e86addcd-7711-47e5-b42a-c18257b0bf61": "IDCore 3121 Fido",
372
+ "e8b7f4a2-c3d5-e6f7-890a-b1c2d3e4f567": "Sherlocked",
373
+ "ea9b8d66-4d01-1d21-3ce4-b6b48cb575d4": "Google Password Manager",
374
+ "eabb46cc-e241-80bf-ae9e-96fa6d2975cf": "TOKEN2 PIN Plus Security Key Series",
375
+ "eaecdef2-1c31-5634-8639-f1cbd9c00a08": "KeePassDX",
376
+ "eb3b131e-59dc-536a-d176-cb7306da10f5": "ellipticSecure MIRkey USB Authenticator",
377
+ "eb7ef748-cbe0-4b40-b8f6-07bd2d592d35": "YubiKey 5 CCN Series with NFC (Consumer Profile)",
378
+ "ec31b4cc-2acc-4b8e-9c01-bade00ccbe26": "KeyXentic FIDO2 Secp256R1 FIDO2 CTAP2 Authenticator",
379
+ "ed042a3a-4b22-4455-bb69-a267b652ae7e": "Security Key NFC by Yubico - Enterprise Edition",
380
+ "ee041bce-25e5-4cdb-8f86-897fd6418464": "Feitian ePass FIDO2-NFC Authenticator",
381
+ "ee7fa1e0-9539-432f-bd43-9c2fc6d4f311": "VeriMark NFC+ USB-C Security Key",
382
+ "ee882879-721c-4913-9775-3dfcce97072a": "YubiKey 5 Series",
383
+ "efb96b10-a9ee-4b6c-a4a9-d32125ccd4a4": "Safenet eToken FIDO",
384
+ "f1d0badc-0def-4f1d-8bad-c0def1d0badc": "fidont",
385
+ "f2145e86-211e-4931-b874-e22bba7d01cc": "ID-One Key",
386
+ "f3809540-7f14-49c1-a8b3-8f813b225541": "Enpass",
387
+ "f4c63eff-d26c-4248-801c-3736c7eaa93a": "FIDO KeyPass S3",
388
+ "f4ce5fc0-57d3-46f5-a736-efb7d5bc63b5": "YubiKey 5 Series with NFC (Consumer Profile)",
389
+ "f56f58b3-d711-4afc-ba7d-6ac05f88cb19": "WinMagic FIDO Eazy - Phone",
390
+ "f573f209-b7fb-b261-671a-d7cf624cc812": "Excelsecu eSecu FIDO2 PRO+ Security Key",
391
+ "f7c558a0-f465-11e8-b568-0800200c9a66": "KONAI Secp256R1 FIDO2 Conformance Testing CTAP2 Authenticator",
392
+ "f8a011f3-8c0a-4d15-8006-17111f9edc7d": "Security Key by Yubico",
393
+ "f8d5c4e9-e539-4c06-8662-ec2a4155a555": "StarSign Key Fob",
394
+ "fa2b99dc-9e39-4257-8f92-4a30d23c4118": "YubiKey 5 Series with NFC",
395
+ "fa37f553-f9b6-4adb-ac53-8bbb57ebdf0d": "Norton Password Manager",
396
+ "fbefdf68-fe86-0106-213e-4d5fa24cbe2e": "Excelsecu eSecu FIDO2 NFC Security Key",
397
+ "fbfc3007-154e-4ecc-8c0b-6e020557d7bd": "Apple Passwords",
398
+ "fc5ca237-69a0-4f3c-afe4-1ebc66def6df": "Clife Key 2",
399
+ "fcb1bcb4-f370-078c-6993-bc24d0ae3fbe": "Ledger Nano X FIDO2 Authenticator",
400
+ "fcc0118f-cd45-435b-8da1-9782b2da0715": "YubiKey 5 FIPS Series with NFC",
401
+ "fdb141b2-5d84-443e-8a35-4698c205a502": "KeePassXC",
402
+ "fec067a1-f1d0-4c5e-b4c0-cc3237475461": "KX701 SmartToken FIDO",
403
+ "ff4dac45-ede8-4ec2-aced-cf66103f4335": "YubiKey 5 Series"
404
+ }
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Trek
4
+ # The disposable email domains of the valid_email2 gem, which keeps them up to date. Its file,
5
+ # sorted and one domain per line, is kept as a single String (2.6 MB) and searched by bisection:
6
+ # valid_email2's own Set of its 180,000 domains grows the process by about 35 MB.
7
+ module DisposableEmailDomains
8
+ # Labels of the longest parent domain checked, as in valid_email2: an address at
9
+ # inbox.mailinator.com is refused because mailinator.com is listed.
10
+ MAX_DEPTH = 6
11
+
12
+ class << self
13
+ # Whether the domain, or one of its parent domains, is a disposable one the app doesn't allow
14
+ def include?(domain)
15
+ domain = domain.to_s.downcase.strip
16
+ return false if domain.empty? || allowed?(domain)
17
+
18
+ candidates(domain).any? { |candidate| listed?(candidate) }
19
+ end
20
+
21
+ private
22
+
23
+ def list
24
+ @list ||= File.binread(ValidEmail2::DISPOSABLE_FILE).freeze
25
+ end
26
+
27
+ # The domain and its parents with two labels or more, up to MAX_DEPTH labels
28
+ def candidates(domain)
29
+ labels = domain.split(".")
30
+ [domain] + (2..[labels.size - 1, MAX_DEPTH].min).map { |depth| labels.last(depth).join(".") }
31
+ end
32
+
33
+ def allowed?(domain)
34
+ candidates(domain).any? { |candidate| ValidEmail2.allow_list.include?(candidate) }
35
+ end
36
+
37
+ def listed?(domain)
38
+ domain = domain.b
39
+ low, high = 0, list.bytesize
40
+ while low < high
41
+ middle = (low + high) / 2
42
+ start = (list.rindex("\n", middle - 1) || -1) + 1
43
+ stop = list.index("\n", start) || list.bytesize
44
+ line = list.byteslice(start, stop - start)
45
+ return true if line == domain
46
+
47
+ line < domain ? low = stop + 1 : high = start
48
+ end
49
+ false
50
+ end
51
+ end
52
+ end
53
+ end
data/lib/trek/engine.rb CHANGED
@@ -17,13 +17,25 @@ module Trek
17
17
  #{root}/app/forms
18
18
  #{root}/app/formatters
19
19
  #{root}/app/helpers
20
+ #{root}/app/jobs
20
21
  #{root}/app/models
21
22
  #{root}/app/models/concerns
22
23
  #{root}/app/policies
23
24
  #{root}/app/policies/concerns
24
25
  #{root}/app/uploaders
26
+ #{root}/app/validators
25
27
  ]
26
28
 
29
+ # Lets apps configure Trek's deprecation warnings like Rails' own (Rails 7.1+)
30
+ initializer "trek.deprecator" do |app|
31
+ app.deprecators[:trek] = Trek.deprecator if app.respond_to?(:deprecators)
32
+ end
33
+
34
+ # Off unless ADMIN_ALLOWED_IPS lists addresses or ranges
35
+ initializer "trek.admin_ip_allowlist" do |app|
36
+ app.middleware.insert_after ActionDispatch::DebugExceptions, Trek::AdminIpAllowlist
37
+ end
38
+
27
39
  initializer "trek.assets" do |app|
28
40
  if app.config.respond_to?(:assets)
29
41
  app.config.assets.paths << "#{root}/app/assets/stylesheets"
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Trek
4
+ # The names of the password managers, platforms and security keys keeping passkeys, by the AAGUID
5
+ # an authenticator sends with a passkey it creates: from the community list at
6
+ # https://github.com/passkeydeveloper/passkey-authenticator-aaguids, meant for naming passkeys in
7
+ # account settings. Names only, refreshed with bin/update-passkey-providers.
8
+ module PasskeyProviders
9
+ # The name of the provider with this AAGUID, or nil when it's unknown or the authenticator sent
10
+ # none
11
+ def self.[](aaguid)
12
+ names[aaguid.to_s.downcase]
13
+ end
14
+
15
+ def self.names
16
+ @names ||= JSON.parse(Trek::Engine.root.join("lib/trek/data/passkey_providers.json").read).freeze
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "ipaddr"
4
+ require "resolv"
5
+
6
+ module Trek
7
+ # The host name an IP address's owner gives it (its PTR record), e.g. a provider's
8
+ # "lfbn-idf1-1-23-45.w90-1.abo.wanadoo.fr": a hint about who connected. Whoever controls the address
9
+ # chooses it, so it's only a hint. Looked up within TIMEOUT seconds, after the sign-in
10
+ # (Trek::ResolveSessionHostnameJob).
11
+ module ReverseDns
12
+ TIMEOUT = 1
13
+
14
+ # nil for a private, loopback or link-local address, or when the lookup fails or takes too long
15
+ def self.hostname(ip)
16
+ address = IPAddr.new(ip.to_s)
17
+ return if address.private? || address.loopback? || address.link_local?
18
+
19
+ Resolv::DNS.open do |dns|
20
+ dns.timeouts = TIMEOUT
21
+ dns.getname(address.to_s).to_s.presence
22
+ end
23
+ rescue IPAddr::InvalidAddressError, Resolv::ResolvError, Resolv::ResolvTimeout, SocketError
24
+ nil
25
+ end
26
+ end
27
+ end
data/lib/trek/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Trek
4
- VERSION = "2.3.2"
4
+ VERSION = "2.4.0"
5
5
  end
data/lib/trek.rb CHANGED
@@ -20,17 +20,30 @@ require "shrine"
20
20
  require "shrine/plugins/blurhash"
21
21
  require "slim-rails"
22
22
  require "strip_attributes"
23
+ require "time_for_a_boolean"
23
24
  require "turbo-rails"
25
+ require "valid_email2"
24
26
  require "view_component"
25
27
  require "view_component/form"
28
+ require "webauthn"
26
29
 
27
30
  module Trek
31
+ require_relative "trek/admin_ip_allowlist"
28
32
  require_relative "trek/cached_attachments"
33
+ require_relative "trek/csp_reports"
34
+ require_relative "trek/disposable_email_domains"
29
35
  require_relative "trek/engine"
30
36
  require_relative "trek/i18n_keys_resolver"
37
+ require_relative "trek/passkey_providers"
38
+ require_relative "trek/reverse_dns"
31
39
  require_relative "trek/saved_attachments_reload"
32
40
  require_relative "trek/typography_formatter"
33
41
  require_relative "trek/version"
34
42
 
35
43
  class Error < StandardError; end
44
+
45
+ # Warns about Trek APIs removed in the next major version.
46
+ def self.deprecator
47
+ @deprecator ||= ActiveSupport::Deprecation.new("3.0", "Trek")
48
+ end
36
49
  end
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trek",
3
- "version": "2.3.2",
3
+ "version": "2.4.0",
4
4
  "description": "A modern content management & back-office system for Ruby on Rails",
5
5
  "homepage": "https://trek.etamin.studio",
6
6
  "license": "MIT",
@@ -20,6 +20,7 @@
20
20
  },
21
21
  "author": "Etamin Studio",
22
22
  "dependencies": {
23
+ "@fontsource/inter": "^5.3.0",
23
24
  "@hotwired/stimulus": "^3.2.2",
24
25
  "@hotwired/turbo-rails": "^8.0.20",
25
26
  "@radix-ui/colors": "^3.0.0",
@@ -47,14 +48,11 @@
47
48
  "eslint": "^8.49.0",
48
49
  "eslint-config-prettier": "^8.10.2",
49
50
  "postcss": "^8.4.30",
50
- "postcss-cli": "^10.1.0",
51
51
  "postcss-flexbugs-fixes": "^5.0.2",
52
52
  "postcss-import": "^15.1.0",
53
53
  "postcss-inline-svg": "^5.0.0",
54
54
  "postcss-modules": "^5.0.0",
55
- "postcss-nesting": "^10.2.0",
56
55
  "postcss-preset-env": "^7.8.3",
57
- "postcss-url": "^10.1.3",
58
56
  "prettier": "2.8.8",
59
57
  "stylelint": "^15.11.0",
60
58
  "stylelint-config-standard": "^31.0.0",
@@ -62,7 +60,7 @@
62
60
  "vitepress": "^1.6.4",
63
61
  "vitepress-plugin-llms": "^1.13.1"
64
62
  },
65
- "packageManager": "yarn@3.8.0",
63
+ "packageManager": "yarn@4.18.1",
66
64
  "scripts": {
67
65
  "docs:dev": "vitepress dev docs",
68
66
  "docs:build": "vitepress build docs",
data/renovate.json CHANGED
@@ -1,4 +1,14 @@
1
1
  {
2
2
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3
- "extends": ["local>devops/renovate-runner"]
3
+ "extends": ["local>devops/renovate-runner"],
4
+ "customManagers": [
5
+ {
6
+ "customType": "regex",
7
+ "description": "cdxgen, run with npx by the SBOM jobs of Trek's CI and of the apps' CI template",
8
+ "managerFilePatterns": ["/(^|/)\\.gitlab-ci\\.yml$/"],
9
+ "matchStrings": ["@cyclonedx/cdxgen@(?<currentValue>\\d+\\.\\d+\\.\\d+)"],
10
+ "depNameTemplate": "@cyclonedx/cdxgen",
11
+ "datasourceTemplate": "npm"
12
+ }
13
+ ]
4
14
  }