masks 0.4.0 → 0.6.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 (180) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +29 -0
  3. data/LICENSE +21 -0
  4. data/README.md +235 -29
  5. data/app/controllers/masks/rails/avatars_controller.rb +51 -0
  6. data/app/controllers/masks/rails/base_controller.rb +13 -0
  7. data/app/controllers/masks/rails/handshakes_controller.rb +86 -0
  8. data/app/controllers/masks/rails/sessions_controller.rb +118 -0
  9. data/app/views/layouts/masks/rails/plain.html.erb +47 -0
  10. data/app/views/masks/rails/handshakes/refused.html.erb +12 -0
  11. data/app/views/masks/rails/handshakes/show.html.erb +40 -0
  12. data/config/routes.rb +11 -82
  13. data/lib/generators/masks/install/install_generator.rb +35 -22
  14. data/lib/generators/masks/install/templates/masks.rb.tt +38 -0
  15. data/lib/masks/client/claims.rb +144 -0
  16. data/lib/masks/client/errors.rb +60 -0
  17. data/lib/masks/client/handshake.rb +104 -0
  18. data/lib/masks/client/http.rb +96 -0
  19. data/lib/masks/client/introspection.rb +29 -0
  20. data/lib/masks/client/issuer.rb +92 -0
  21. data/lib/masks/client/pkce.rb +27 -0
  22. data/lib/masks/client/rack.rb +62 -0
  23. data/lib/masks/client/registration.rb +115 -0
  24. data/lib/masks/client/registry.rb +25 -0
  25. data/lib/masks/client/resource.rb +92 -0
  26. data/lib/masks/client/session.rb +146 -0
  27. data/lib/masks/client/stores.rb +40 -0
  28. data/lib/masks/client/tokens.rb +70 -0
  29. data/lib/masks/client/tracker.rb +122 -0
  30. data/lib/masks/client/verifier.rb +42 -0
  31. data/lib/masks/client.rb +51 -0
  32. data/lib/masks/rails/authentication.rb +260 -0
  33. data/lib/masks/rails/configurable.rb +11 -0
  34. data/lib/masks/rails/configuration.rb +184 -0
  35. data/lib/masks/rails/credentials.rb +60 -0
  36. data/lib/masks/rails/engine.rb +20 -0
  37. data/lib/masks/rails/protected_resource.rb +51 -0
  38. data/lib/masks/rails.rb +10 -0
  39. data/lib/masks/version.rb +1 -3
  40. data/lib/masks.rb +3 -183
  41. metadata +48 -416
  42. data/MIT-LICENSE +0 -20
  43. data/Rakefile +0 -11
  44. data/app/assets/builds/masks/application.css +0 -1
  45. data/app/assets/builds/masks/application.js +0 -8549
  46. data/app/assets/builds/masks/application.js.map +0 -7
  47. data/app/assets/images/masks.png +0 -0
  48. data/app/assets/javascripts/application.js +0 -2
  49. data/app/assets/javascripts/controllers/application.js +0 -9
  50. data/app/assets/javascripts/controllers/emails_controller.js +0 -28
  51. data/app/assets/javascripts/controllers/index.js +0 -21
  52. data/app/assets/javascripts/controllers/keys_controller.js +0 -20
  53. data/app/assets/javascripts/controllers/recover_controller.js +0 -21
  54. data/app/assets/javascripts/controllers/recover_password_controller.js +0 -21
  55. data/app/assets/javascripts/controllers/session_controller.js +0 -94
  56. data/app/assets/javascripts/controllers/table_controller.js +0 -15
  57. data/app/assets/manifest.js +0 -2
  58. data/app/assets/masks_manifest.js +0 -2
  59. data/app/assets/stylesheets/application.css +0 -34
  60. data/app/controllers/concerns/masks/controller.rb +0 -114
  61. data/app/controllers/masks/actors_controller.rb +0 -15
  62. data/app/controllers/masks/application_controller.rb +0 -35
  63. data/app/controllers/masks/backup_codes_controller.rb +0 -34
  64. data/app/controllers/masks/debug_controller.rb +0 -9
  65. data/app/controllers/masks/devices_controller.rb +0 -20
  66. data/app/controllers/masks/emails_controller.rb +0 -60
  67. data/app/controllers/masks/error_controller.rb +0 -14
  68. data/app/controllers/masks/keys_controller.rb +0 -45
  69. data/app/controllers/masks/manage/actors_controller.rb +0 -83
  70. data/app/controllers/masks/manage/base_controller.rb +0 -20
  71. data/app/controllers/masks/manage/clients_controller.rb +0 -84
  72. data/app/controllers/masks/manage/dashboard_controller.rb +0 -15
  73. data/app/controllers/masks/manage/devices_controller.rb +0 -19
  74. data/app/controllers/masks/one_time_code_controller.rb +0 -49
  75. data/app/controllers/masks/openid/authorizations_controller.rb +0 -45
  76. data/app/controllers/masks/openid/discoveries_controller.rb +0 -55
  77. data/app/controllers/masks/openid/tokens_controller.rb +0 -45
  78. data/app/controllers/masks/openid/userinfo_controller.rb +0 -28
  79. data/app/controllers/masks/passwords_controller.rb +0 -33
  80. data/app/controllers/masks/recoveries_controller.rb +0 -43
  81. data/app/controllers/masks/sessions_controller.rb +0 -53
  82. data/app/helpers/masks/application_helper.rb +0 -49
  83. data/app/jobs/masks/application_job.rb +0 -7
  84. data/app/jobs/masks/expire_actors_job.rb +0 -15
  85. data/app/jobs/masks/expire_recoveries_job.rb +0 -15
  86. data/app/mailers/masks/actor_mailer.rb +0 -22
  87. data/app/mailers/masks/application_mailer.rb +0 -15
  88. data/app/models/concerns/masks/access.rb +0 -162
  89. data/app/models/concerns/masks/actor.rb +0 -132
  90. data/app/models/concerns/masks/adapter.rb +0 -68
  91. data/app/models/concerns/masks/role.rb +0 -9
  92. data/app/models/concerns/masks/scoped.rb +0 -54
  93. data/app/models/masks/access/actor_password.rb +0 -21
  94. data/app/models/masks/access/actor_scopes.rb +0 -18
  95. data/app/models/masks/access/actor_signup.rb +0 -21
  96. data/app/models/masks/actors/anonymous.rb +0 -40
  97. data/app/models/masks/actors/system.rb +0 -24
  98. data/app/models/masks/adapters/active_record.rb +0 -85
  99. data/app/models/masks/application_model.rb +0 -15
  100. data/app/models/masks/application_record.rb +0 -8
  101. data/app/models/masks/check.rb +0 -192
  102. data/app/models/masks/credential.rb +0 -166
  103. data/app/models/masks/credentials/access_token.rb +0 -60
  104. data/app/models/masks/credentials/backup_code.rb +0 -30
  105. data/app/models/masks/credentials/device.rb +0 -59
  106. data/app/models/masks/credentials/email.rb +0 -48
  107. data/app/models/masks/credentials/factor2.rb +0 -71
  108. data/app/models/masks/credentials/key.rb +0 -38
  109. data/app/models/masks/credentials/last_login.rb +0 -12
  110. data/app/models/masks/credentials/masquerade.rb +0 -32
  111. data/app/models/masks/credentials/nickname.rb +0 -63
  112. data/app/models/masks/credentials/one_time_code.rb +0 -34
  113. data/app/models/masks/credentials/password.rb +0 -28
  114. data/app/models/masks/credentials/recovery.rb +0 -71
  115. data/app/models/masks/credentials/return_to.rb +0 -27
  116. data/app/models/masks/credentials/session.rb +0 -67
  117. data/app/models/masks/device.rb +0 -30
  118. data/app/models/masks/error.rb +0 -51
  119. data/app/models/masks/event.rb +0 -14
  120. data/app/models/masks/mask.rb +0 -266
  121. data/app/models/masks/openid/authorization.rb +0 -116
  122. data/app/models/masks/openid/token.rb +0 -56
  123. data/app/models/masks/rails/actor.rb +0 -212
  124. data/app/models/masks/rails/actor_role.rb +0 -12
  125. data/app/models/masks/rails/device.rb +0 -47
  126. data/app/models/masks/rails/email.rb +0 -96
  127. data/app/models/masks/rails/key.rb +0 -61
  128. data/app/models/masks/rails/openid/access_token.rb +0 -55
  129. data/app/models/masks/rails/openid/authorization.rb +0 -45
  130. data/app/models/masks/rails/openid/client.rb +0 -186
  131. data/app/models/masks/rails/openid/id_token.rb +0 -43
  132. data/app/models/masks/rails/recovery.rb +0 -116
  133. data/app/models/masks/rails/role.rb +0 -20
  134. data/app/models/masks/rails/scope.rb +0 -15
  135. data/app/models/masks/session.rb +0 -447
  136. data/app/models/masks/sessions/access.rb +0 -27
  137. data/app/models/masks/sessions/inline.rb +0 -16
  138. data/app/models/masks/sessions/request.rb +0 -42
  139. data/app/resources/masks/actor_resource.rb +0 -9
  140. data/app/resources/masks/session_resource.rb +0 -15
  141. data/app/views/layouts/masks/application.html.erb +0 -17
  142. data/app/views/layouts/masks/mailer.html.erb +0 -17
  143. data/app/views/layouts/masks/mailer.text.erb +0 -1
  144. data/app/views/layouts/masks/manage.html.erb +0 -42
  145. data/app/views/masks/actor_mailer/recover_credentials.html.erb +0 -32
  146. data/app/views/masks/actor_mailer/recover_credentials.text.erb +0 -1
  147. data/app/views/masks/actor_mailer/verify_email.html.erb +0 -33
  148. data/app/views/masks/actor_mailer/verify_email.text.erb +0 -8
  149. data/app/views/masks/actors/current.html.erb +0 -145
  150. data/app/views/masks/application/_header.html.erb +0 -30
  151. data/app/views/masks/backup_codes/new.html.erb +0 -117
  152. data/app/views/masks/emails/new.html.erb +0 -109
  153. data/app/views/masks/emails/verify.html.erb +0 -51
  154. data/app/views/masks/keys/new.html.erb +0 -127
  155. data/app/views/masks/manage/actors/index.html.erb +0 -104
  156. data/app/views/masks/manage/actors/show.html.erb +0 -172
  157. data/app/views/masks/manage/clients/index.html.erb +0 -102
  158. data/app/views/masks/manage/clients/show.html.erb +0 -156
  159. data/app/views/masks/manage/dashboard/index.html.erb +0 -10
  160. data/app/views/masks/manage/devices/index.html.erb +0 -47
  161. data/app/views/masks/one_time_code/new.html.erb +0 -167
  162. data/app/views/masks/openid/authorizations/error.html.erb +0 -23
  163. data/app/views/masks/openid/authorizations/new.html.erb +0 -46
  164. data/app/views/masks/passwords/edit.html.erb +0 -71
  165. data/app/views/masks/recoveries/new.html.erb +0 -69
  166. data/app/views/masks/recoveries/password.html.erb +0 -63
  167. data/app/views/masks/sessions/new.html.erb +0 -152
  168. data/config/brakeman.ignore +0 -28
  169. data/config/initializers/inflections.rb +0 -5
  170. data/config/locales/en.yml +0 -307
  171. data/db/migrate/20231205173845_create_actors.rb +0 -94
  172. data/db/migrate/20240329182422_support_openid.rb +0 -64
  173. data/lib/generators/masks/install/USAGE +0 -8
  174. data/lib/generators/masks/install/templates/initializer.rb +0 -5
  175. data/lib/generators/masks/install/templates/masks.json +0 -9
  176. data/lib/masks/configuration.rb +0 -249
  177. data/lib/masks/engine.rb +0 -25
  178. data/lib/masks/middleware.rb +0 -70
  179. data/lib/tasks/masks_tasks.rake +0 -72
  180. data/masks.json +0 -315
@@ -1,167 +0,0 @@
1
- <div data-controller="one_time_code">
2
- <div class="flex items-center gap-4">
3
- <div class="flex flex-col">
4
- <h3 class="font-bold">
5
- <%= t(".heading") %>
6
- </h3>
7
- <span class="text-xs">
8
- <%= t(".tfa") %>
9
- —
10
- <span class="italic">
11
- <%= @actor.totp_secret ? t(".enabled") : t(".disabled") %>
12
- </span>
13
- </span>
14
- </div>
15
- </div>
16
-
17
- <% if !@actor.totp_secret %>
18
- <div class='divider my-2 mb-4'></div>
19
- <div class="">
20
- <div>
21
- <div class="flex gap-4 mb-3">
22
- <div class="w-[125px] h-[125px] overflow-hidden">
23
- <%= totp_svg(@actor.totp_uri, module_size: 2.25, fill: "fff", offset: 5) %>
24
- </div>
25
- <div class="max-w-[175px] max-w-[250px] space-y-3 mb-2">
26
- <div>
27
- <%= t(".enable_qr") %>
28
- </div>
29
- <div class="text-sm">
30
- <%= t(".enable_manual") %>
31
- </div>
32
- </div>
33
- </div>
34
-
35
- <div class="text-sm flex items-center gap-3 mt-3">
36
- <span class="font-bold text-xs">
37
- <%= t(".secret") %>
38
- </span>
39
- <span class="flex-grow">
40
- <input
41
- class="input input-xs w-full"
42
- name="secret"
43
- value="<%= @actor.random_totp_secret %>">
44
- </span>
45
- </div>
46
- <div class='divider mt-3 mb-2 text-xs'></div>
47
- </div>
48
- <div class="mb-4 flex items-center">
49
- next, enter your password and the one-time code shown in your
50
- authenticator app.
51
- </div>
52
-
53
- <% if flash[:errors]&.any? %>
54
- <div role="alert" class="alert mb-2">
55
- <div class="flex items-center gap-4">
56
- <%= lucide_icon("x", class: "stroke-error") %>
57
- <span><%= flash[:errors][0] %></span>
58
- </div>
59
- </div>
60
- <% end %>
61
-
62
- <%= form_with url: one_time_code_path, method: :post, class: 'pt-2 flex flex-col gap-2', data: { one_time_code_target: 'add' } do |form| %>
63
- <input
64
- type="hidden"
65
- name="one_time_code[secret]"
66
- value="<%= @actor.random_totp_secret %>">
67
- <label class="flex gap-3 items-center w-full flex-grow input input-bordered" data-controller="password-visibility">
68
- <%= lucide_icon("shield-check") %>
69
-
70
- <input
71
- type="password"
72
- data-one-time-password-target="password"
73
- data-action="one_time_code#updatePassword"
74
- data-password-visibility-target="input"
75
- spellcheck="false"
76
- placeholder="<%= t('.placeholder.password') %>"
77
- name="session[password]"
78
- class="w-full flex-grow">
79
-
80
- <button data-action="password-visibility#toggle" type="button" class="btn btn-sm btn-ghost -mr-2">
81
- <span data-password-visibility-target="icon"><%= lucide_icon('eye') %></span>
82
- <span data-password-visibility-target="icon" class="hidden"><%= lucide_icon('eye-off') %></span>
83
- </button>
84
- </label>
85
- <div class="flex items-center gap-2">
86
- <label class="flex gap-3 items-center input input-bordered flex-grow" data-controller="password-visibility">
87
- <%= lucide_icon("key-square") %>
88
-
89
- <input
90
- type="password"
91
- data-one-time-password-target="code"
92
- data-action="one_time_code#updateCode"
93
- placeholder="<%= t('.placeholder.otp') %>"
94
- data-password-visibility-target="input"
95
- spellcheck="false"
96
- name="one_time_code[code]"
97
- class="w-full flex-grow">
98
-
99
- <button data-action="password-visibility#toggle" type="button" class="btn btn-sm btn-ghost -mr-2">
100
- <span data-password-visibility-target="icon"><%= lucide_icon('eye') %></span>
101
- <span data-password-visibility-target="icon" class="hidden"><%= lucide_icon('eye-off') %></span>
102
- </button>
103
- </label>
104
- <%= form.submit t(".submit"),
105
- class: "btn btn-secondary",
106
- data: {
107
- one_time_code_target: "submit",
108
- } %>
109
- </div>
110
- <% end %>
111
- </div>
112
- <% else %>
113
- <div class="join join-vertical">
114
- <div class="join-item alert bg-neutral mt-4">
115
- <%= lucide_icon("check", class: "stroke-success") %>
116
- <h3>
117
- after login you will be asked to enter a one-time code, a backup
118
- code, or use a different secondary credential.
119
- </h3>
120
- </div>
121
- <div
122
- class="join-item card bg-base-100 pt-2 pb-3 px-4 w-full text-right"
123
- role="alert">
124
- <a href="<%= backup_codes_path %>" class="text-sm underline">
125
- <%= t(@actor.should_save_backup_codes? ? ".backup_codes" : ".reset_codes") %>
126
- </a>
127
- </div>
128
- </div>
129
-
130
- <div class='divider my-4 text-xs'><%= t(".delete_div") %></div>
131
-
132
- <%= form_with url: one_time_code_path, method: :delete, class: '', data: { one_time_code_target: 'add' } do |form| %>
133
- <input
134
- type="hidden"
135
- name="one_time_code[secret]"
136
- value="<%= @actor.random_totp_secret %>">
137
-
138
- <div class="flex gap-2">
139
- <label class="flex gap-3 items-center flex-grow input input-sm input-bordered" data-controller="password-visibility">
140
- <%= lucide_icon("shield-check") %>
141
- <input
142
- type="password"
143
- data-one-time-password-target="password"
144
- data-action="one_time_code#updatePassword"
145
- data-password-visibility-target="input"
146
- spellcheck="false"
147
- placeholder="<%= t('.placeholder.delete') %>"
148
- name="session[password]"
149
- class="w-full flex-grow">
150
-
151
- <button data-action="password-visibility#toggle" type="button" class="btn btn-xs btn-ghost -mr-2">
152
- <span data-password-visibility-target="icon"><%= lucide_icon('eye', size: 16) %></span>
153
- <span data-password-visibility-target="icon" class="hidden"><%= lucide_icon('eye-off', size: 16) %></span>
154
- </button>
155
- </label>
156
-
157
- <div>
158
- <%= form.submit t(".delete"),
159
- class: "btn hover:btn-error btn-outline btn-sm",
160
- data: {
161
- one_time_code_target: "submit",
162
- } %>
163
- </div>
164
- </div>
165
- <% end %>
166
- <% end %>
167
- </div>
@@ -1,23 +0,0 @@
1
- <div class="hero">
2
- <div class="hero-content text-left">
3
- <div>
4
- <div class="flex items-center gap-4 mb-4 justify-center">
5
- <span class="text-warning pt-1">
6
- <%= lucide_icon('alert-triangle', size: 28) %>
7
- </span>
8
-
9
- <h1 class="text-3xl font-bold text-black dark:text-white">
10
- <%= t('.title') %>
11
- </h1>
12
- </div>
13
- <p class="mb-6 text-center">
14
- <%= t('.description') %>
15
- </p>
16
- <div class="flex items-center gap-4 justify-center">
17
- <a href="/" class="btn btn-primary btn-sm">
18
- <%= t('.home') %>
19
- </a>
20
- </div>
21
- </div>
22
- </div>
23
- </div>
@@ -1,46 +0,0 @@
1
- <div>
2
- <%= form_with url: request.url, method: :post, data: { turbo: false } do |form| %>
3
- <div class="hero">
4
- <div class="hero-content text-left">
5
- <div class="">
6
- <h1 class="text-4xl font-bold mb-4 text-black dark:text-white">
7
- <%= t(".authorize_client", name: @authorization.client.name) %>
8
- </h1>
9
-
10
- <p class="mb-4 text-left">
11
- <% if @authorization.scopes.any? %>
12
- <%= t('.authorize_scoped', name: @authorization.client.name) %>
13
- <% else %>
14
- <%= t('.authorize_account', name: @authorization.client.name) %>
15
- <% end %>
16
- </p>
17
-
18
- <% if @authorization.scopes.any? %>
19
- <div class="divider my-0"></div>
20
-
21
- <table class="table">
22
- <tbody>
23
- <% @authorization.scopes.each do |scope| %>
24
- <tr>
25
- <th><%= t("scope.#{scope}_name") %></td>
26
- <td>
27
- <%= t("scope.#{scope}_desc") %>
28
- </td>
29
- </tr>
30
- <% end %>
31
- </tbody>
32
- </table>
33
-
34
- <div class="divider mt-0 mb-4"></div>
35
- <% end %>
36
-
37
- <div class="flex items-center gap-4 justify-center">
38
- <input type="submit" name="approve" value="<%= t('.approve') %>" class="btn btn-success btn-sm">
39
- <span>or</span>
40
- <input type="submit" name="deny" value="<%= t('.deny') %>" class="btn btn-error btn-sm">
41
- </div>
42
- </div>
43
- </div>
44
- </div>
45
- <% end %>
46
- </div>
@@ -1,71 +0,0 @@
1
- <div class="space-y-3">
2
- <div class="flex flex-col">
3
- <span class="font-bold">
4
- your password
5
- </span>
6
- <span class="text-xs">
7
- last changed
8
- <% if @actor.changed_password_at %>
9
- <%= time_ago_in_words(@actor.changed_password_at) %>
10
- ago
11
- <% else %>
12
- <span class="italic">
13
- never
14
- </span>
15
- <% end %>
16
- </span>
17
- </div>
18
- <% if flash[:errors]&.any? %>
19
- <div role="alert" class="alert mb-2">
20
- <div class="flex items-center gap-4">
21
- <%= lucide_icon("x", class: "stroke-error") %>
22
- <span><%= flash[:errors][0] %></span>
23
- </div>
24
- </div>
25
- <% end %>
26
-
27
- <%= form_with url: password_path, method: :post, class: 'pt-2 flex flex-col gap-2', data: { password_target: 'add' } do |form| %>
28
- <label class="flex gap-3 items-center input input-bordered" data-controller="password-visibility">
29
- <%= lucide_icon("shield-plus") %>
30
- <input
31
- type="password"
32
- data-password-target="code"
33
- data-action="password#updateChanged"
34
- data-password-visibility-target="input"
35
- spellcheck="false"
36
- placeholder="<%= t('.placeholder.change') %>"
37
- name="password[change]"
38
- class="w-full">
39
-
40
- <button data-action="password-visibility#toggle" type="button" class="btn btn-sm btn-ghost -mr-2">
41
- <span data-password-visibility-target="icon"><%= lucide_icon('eye') %></span>
42
- <span data-password-visibility-target="icon" class="hidden"><%= lucide_icon('eye-off') %></span>
43
- </button>
44
- </label>
45
- <div class="flex items-center gap-2" data-controller="password-visibility">
46
- <label class="flex gap-3 items-center w-full flex-grow input input-bordered">
47
- <%= lucide_icon("shield-check") %>
48
-
49
- <input
50
- type="password"
51
- data-password-target="password"
52
- data-action="password#updatePassword"
53
- data-password-visibility-target="input"
54
- spellcheck="false"
55
- placeholder="<%= t('.placeholder.password') %>"
56
- name="session[password]"
57
- class="w-full flex-grow">
58
-
59
- <button data-action="password-visibility#toggle" type="button" class="btn btn-sm btn-ghost -mr-2">
60
- <span data-password-visibility-target="icon"><%= lucide_icon('eye') %></span>
61
- <span data-password-visibility-target="icon" class="hidden"><%= lucide_icon('eye-off') %></span>
62
- </button>
63
- </label>
64
- <%= form.submit t(".submit"),
65
- class: "btn btn-secondary",
66
- data: {
67
- password_target: "submit",
68
- } %>
69
- </div>
70
- <% end %>
71
- </div>
@@ -1,69 +0,0 @@
1
- <div data-controller="recover">
2
- <% if flash[:recovery] %>
3
- <div role="alert" class="alert alert-success shadow-lg mb-4 flex items-center gap-4 text-left">
4
- <%= lucide_icon('check') %>
5
- <div>
6
- <h3 class="font-bold"><%= t('.submitted.heading') %></h3>
7
- <div class="text-xs"><%= t('.submitted.description') %></div>
8
- </div>
9
- </div>
10
- <% else %>
11
- <div role="alert" class="alert mb-4 text-left">
12
- <div class="flex flex-col">
13
- <div class="flex items-center gap-4">
14
- <%= lucide_icon("shield-question", class: "stroke-info") %>
15
- <span class="flex-grow"><%= t(".heading") %></span>
16
- <div class="dropdown dropdown-bottom dropdown-end">
17
- <div tabindex="0" role="button" class="btn btn-xs text-sm -mr-2"><%= t(".help_button") %></div>
18
- <div
19
- tabindex="0"
20
- class="
21
- dropdown-content z-[1] mt-4 card card-compact w-[275px] px-2 pb-2 shadow bg-info
22
- text-info-content
23
- ">
24
- <div class="card-body">
25
- <h4 class="card-title"><%= t(".help_title") %></h4>
26
- <span><%= t(".help_body") %></span>
27
- <% if t('.support_url', default: false) %>
28
- <span class="italic">
29
- <%= t(".help_more") %>
30
- <a class="not-italic underline" href="<%= t('.support_url') %>"><%= t(".help_contact") %></a>
31
- </span>
32
- <% end %>
33
- </div>
34
- </div>
35
- </div>
36
- </div>
37
- <div class="divider my-1 -mr-4"></div>
38
- <div class="text-sm -mr-2">
39
- <%= t(".subheading") %>
40
- </div>
41
- </div>
42
- </div>
43
- <% end %>
44
- <%= form_with url: recover_path, method: :post do |form| %>
45
- <div class="flex flex-col gap-4">
46
- <label class="form-control w-full">
47
- <input
48
- type="text"
49
- data-recover-target="input"
50
- data-action="recover#updateInput"
51
- placeholder="<%= t('.placeholder') %>"
52
- name="recover[value]"
53
- class="input input-bordered w-full">
54
- </label>
55
- <div class="flex items-center gap-4">
56
- <%= form.submit t(".submit"),
57
- class: "btn btn-active btn-info",
58
- data: {
59
- recover_target: "submit",
60
- },
61
- disabled: true %>
62
- <div class="text-xs opacity-60">
63
- or
64
- <a href="<%= Masks.configuration.site_links[:login] %>" class="underline"><%= t(".back") %></a>
65
- </div>
66
- </div>
67
- </div>
68
- <% end %>
69
- </div>
@@ -1,63 +0,0 @@
1
- <% if @recovery %>
2
- <div data-controller="recover-password">
3
- <div role="alert" class="alert mb-4">
4
- <div class="flex flex-col">
5
- <div class="flex items-center gap-4">
6
- <%= lucide_icon("rotate-cw", class: "stroke-warning") %>
7
- <span class="flex-grow font-bold"><%= t(".heading") %></span>
8
- </div>
9
- <div class="divider my-1 -mr-4"></div>
10
- <div class="text-sm -mr-4">
11
- <%= t(".subheading") %>
12
- </div>
13
- </div>
14
- </div>
15
- <% if flash[:errors]&.any? %>
16
- <div role="alert" class="alert alert-error mb-4">
17
- <%= lucide_icon("x") %>
18
- <%= flash[:errors][0] %>
19
- </div>
20
- <% end %>
21
-
22
- <%= form_with url: recover_password_path, method: :post do |form| %>
23
- <div class="flex flex-col gap-4">
24
- <div class="flex items-center gap-4">
25
- <input type="hidden" name="token" value="<%= @recovery.token %>">
26
- <input
27
- type="text"
28
- data-recover-password-target="password"
29
- data-action="recover-password#updatePassword"
30
- placeholder="<%= t('.placeholder') %>"
31
- name="recover[password]"
32
- class="input input-bordered w-full">
33
- <%= form.submit t(".submit"),
34
- class: "btn btn-warning btn-info",
35
- data: {
36
- recover_password_target: "submit",
37
- } %>
38
- </div>
39
- </div>
40
- <% end %>
41
- </div>
42
- <% else %>
43
- <div role="alert" class="alert mb-4">
44
- <div class="flex flex-col">
45
- <div class="flex items-center gap-4">
46
- <%= lucide_icon(
47
- flash[:reset] ? "rotate-cw" : "x",
48
- class: flash[:reset] ? "stroke-success" : "stroke-error",
49
- ) %>
50
- <span class="flex-grow font-bold"><%= flash[:reset] ? t(".heading_success") : t(".heading_expired") %></span>
51
- </div>
52
- <div class="divider my-1 -mr-4"></div>
53
- <div class="text-sm -mr-4">
54
- <%= flash[:reset] ? t(".subheading_success") : t(".subheading_expired") %>
55
- </div>
56
- <% if flash[:reset] %>
57
- <div class="text-sm -mr-4 mt-3">
58
- <a href="<%= Masks.configuration.site_links[:login] %>" class="underline"><%= t(".login") %></a>
59
- </div>
60
- <% end %>
61
- </div>
62
- </div>
63
- <% end %>
@@ -1,152 +0,0 @@
1
- <div data-controller="session">
2
- <%= form_with url: session_path, method: :post do |form| %>
3
- <div role="alert" class="alert mb-4 text-left" data-session-target="flash">
4
- <% if flash[:errors]&.any? && !factor2_required? %>
5
- <div class="flex items-center gap-4">
6
- <%= lucide_icon("shield-x", class: "stroke-error") %>
7
- <span><%= flash[:errors][0] %></span>
8
- </div>
9
- <% elsif logged_in? %>
10
- <div class="flex items-center gap-4">
11
- <%= lucide_icon("check", class: "stroke-success") %>
12
- <span><%= t(".logged_in") %></span>
13
- </div>
14
- <% else %>
15
- <div data-flash="enter-factor2" class="hidden flex items-center gap-4">
16
- <%= lucide_icon("key-square", class: "stroke-warning") %>
17
- <span><%= t(".enter_factor2") %></span>
18
- </div>
19
- <div data-flash="enter-credentials" class="flex items-center gap-4">
20
- <%= lucide_icon("shield-alert", class: "stroke-warning") %>
21
- <span><%= t(".enter_credentials") %></span>
22
- </div>
23
- <div data-flash="enter-password" class="hidden flex items-center gap-4">
24
- <%= lucide_icon("shield-ellipsis", class: "stroke-warning") %>
25
- <span><%= t(".enter_password") %></span>
26
- </div>
27
- <div data-flash="continue" class="hidden flex items-center gap-4">
28
- <%= lucide_icon("shield-question", class: "stroke-accent") %>
29
- <span><%= t(".continue") %></span>
30
- </div>
31
- <% end %>
32
- </div>
33
-
34
- <% if factor2_required? %>
35
- <div class="w-full">
36
- <div role="tablist" class="tabs tabs-bordered mb-4">
37
- <% if @actor.totp_secret %>
38
- <input
39
- checked
40
- name="factor2"
41
- type="radio"
42
- role="tab"
43
- class="tab whitespace-nowrap"
44
- aria-label="<%= t('.tab.one_time_code') %>">
45
- <div role="tabpanel" class="tab-content p-4 bg-base-100 rounded-b">
46
- <p class="flex items-center gap-4 text-sm mb-4">
47
- <%= lucide_icon("qr-code") %>
48
- <%= t(".one_time_code") %>
49
- </p>
50
- <label class="form-control w-full">
51
- <input
52
- type="text"
53
- data-action="session#updateCode"
54
- data-session-target="oneTimeCode"
55
- placeholder="<%= t('.placeholder.one_time_code') %>"
56
- name="session[one_time_code]"
57
- class="input input-bordered w-full">
58
- </label>
59
- </div>
60
- <% end %>
61
-
62
- <% if @actor.saved_backup_codes? %>
63
- <input
64
- type="radio"
65
- name="factor2"
66
- role="tab"
67
- class="tab whitespace-nowrap"
68
- aria-label="<%= t('.tab.backup_code') %>">
69
- <div role="tabpanel" class="tab-content p-4 bg-base-100 rounded-b">
70
- <p class="flex items-center gap-4 text-sm mb-4">
71
- <%= lucide_icon("rotate-cw") %>
72
- <%= t(".backup_code") %>
73
- </p>
74
- <label class="form-control w-full">
75
- <input
76
- type="text"
77
- data-action="session#updateCode"
78
- data-session-target="backupCode"
79
- placeholder="<%= t('.placeholder.backup_code') %>"
80
- name="session[backup_code]"
81
- class="input input-bordered w-full">
82
- </label>
83
- </div>
84
- <% end %>
85
- </div>
86
- </div>
87
- <% elsif !logged_in? %>
88
- <div class="flex flex-col gap-2">
89
- <label class="form-control w-full">
90
- <input
91
- type="text"
92
- data-action="session#updateNickname"
93
- data-session-target="nickname"
94
- placeholder="<%= t('.placeholder.nickname') %>"
95
- name="session[nickname]"
96
- class="input input-bordered w-full">
97
- </label>
98
- <label class="form-control input input-bordered w-full flex flex-row items-center gap-2" data-controller="password-visibility">
99
- <input
100
- type="password"
101
- data-action="session#updatePassword"
102
- data-session-target="password"
103
- data-password-visibility-target="input"
104
- spellcheck="false"
105
- placeholder="<%= t('.placeholder.password') %>"
106
- name="session[password]"
107
- class="flex-grow">
108
-
109
- <button data-action="password-visibility#toggle" type="button" class="btn btn-sm btn-ghost -mr-2">
110
- <span data-password-visibility-target="icon"><%= lucide_icon('eye') %></span>
111
- <span data-password-visibility-target="icon" class="hidden"><%= lucide_icon('eye-off') %></span>
112
- </button>
113
- </label>
114
- <% if @config.site_links[:recover] %>
115
- <div class="label">
116
- <span class="label-text-alt opacity-60 hover:opacity-100"><a
117
- class="hover:underline"
118
- href="<%= @config.site_links[:recover] %>"><%= t(".recover_credentials") %></a></span>
119
- </div>
120
- <% end %>
121
- </div>
122
- <% end %>
123
-
124
- <% unless logged_in? %>
125
- <div class="flex items-center gap-4">
126
- <%= form.submit t(".submit"),
127
- class: "btn btn-active",
128
- data: {
129
- session_target: "submit",
130
- } %>
131
- <div class="form-control" data-session-target="remember">
132
- <label class="label cursor-pointer">
133
- <input type="checkbox" name="session[remember_me]" class="toggle toggle-sm">
134
- <span class="label-text pl-2"><%= t(".remember_me") %></span>
135
- </label>
136
- </div>
137
- </div>
138
- <% end %>
139
- <% end %>
140
-
141
- <% if factor2_required? %>
142
- <div class="mt-2 opacity-60 hover:opacity-100">
143
- <%= form_with url: session_path, method: :delete do |form| %>
144
- <span class="text-xs">
145
- <%= t(".start_over.text") %>
146
- <%= form.submit t(".start_over.link"), class: "cursor-pointer underline" %>
147
- </span>
148
-
149
- <% end %>
150
- </div>
151
- <% end %>
152
- </div>
@@ -1,28 +0,0 @@
1
- {
2
- "ignored_warnings": [
3
- {
4
- "warning_type": "Cross-Site Request Forgery",
5
- "warning_code": 7,
6
- "fingerprint": "2c0ec97f978f7a612f1fa0567846c86ec02c072be7784e4c707fd4ba81fe5021",
7
- "check_name": "ForgerySetting",
8
- "message": "`protect_from_forgery` should be called in `ApplicationController`",
9
- "file": "dummy/app/controllers/application_controller.rb",
10
- "line": 1,
11
- "link": "https://brakemanscanner.org/docs/warning_types/cross-site_request_forgery/",
12
- "code": null,
13
- "render_path": null,
14
- "location": {
15
- "type": "controller",
16
- "controller": "ApplicationController"
17
- },
18
- "user_input": null,
19
- "confidence": "High",
20
- "cwe_id": [
21
- 352
22
- ],
23
- "note": ""
24
- }
25
- ],
26
- "updated": "2024-02-07 16:03:41 -0500",
27
- "brakeman_version": "6.1.2"
28
- }
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
- ActiveSupport::Inflector.inflections(:en) do |inflect|
3
- inflect.acronym "OpenID"
4
- inflect.acronym "UserInfo"
5
- end