masks-server 0.10.0 → 0.12.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 (183) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/masks/server/account_controller.rb +3 -0
  3. data/app/controllers/masks/server/app_passwords_controller.rb +41 -0
  4. data/app/controllers/masks/server/authorize_controller.rb +33 -2
  5. data/app/controllers/masks/server/discovery_controller.rb +36 -0
  6. data/app/controllers/masks/server/enrollments_controller.rb +17 -0
  7. data/app/controllers/masks/server/forward_auth_controller.rb +104 -12
  8. data/app/controllers/masks/server/logins_controller.rb +4 -3
  9. data/app/controllers/masks/server/organization_access_controller.rb +39 -0
  10. data/app/controllers/masks/server/organization_members_controller.rb +3 -1
  11. data/app/graphql/masks/server/manage/mutations/base_mutation.rb +7 -0
  12. data/app/graphql/masks/server/manage/mutations/create_group.rb +6 -4
  13. data/app/graphql/masks/server/manage/mutations/decline_access.rb +27 -0
  14. data/app/graphql/masks/server/manage/mutations/grant_access.rb +29 -0
  15. data/app/graphql/masks/server/manage/mutations/group_source.rb +34 -0
  16. data/app/graphql/masks/server/manage/mutations/issue_ldap_credential.rb +5 -2
  17. data/app/graphql/masks/server/manage/mutations/refresh_group.rb +21 -0
  18. data/app/graphql/masks/server/manage/mutations/remove_group_member.rb +2 -0
  19. data/app/graphql/masks/server/manage/mutations/run_health_checks.rb +19 -0
  20. data/app/graphql/masks/server/manage/mutations/unenroll_client.rb +28 -0
  21. data/app/graphql/masks/server/manage/mutations/update_client.rb +6 -0
  22. data/app/graphql/masks/server/manage/mutations/update_group.rb +7 -4
  23. data/app/graphql/masks/server/manage/mutations/update_tenant.rb +14 -1
  24. data/app/graphql/masks/server/manage/types/access_request_type.rb +21 -0
  25. data/app/graphql/masks/server/manage/types/actor_type.rb +6 -0
  26. data/app/graphql/masks/server/manage/types/client_type.rb +18 -0
  27. data/app/graphql/masks/server/manage/types/group_condition_input.rb +16 -0
  28. data/app/graphql/masks/server/manage/types/group_condition_type.rb +29 -0
  29. data/app/graphql/masks/server/manage/types/group_member_type.rb +16 -0
  30. data/app/graphql/masks/server/manage/types/group_type.rb +17 -1
  31. data/app/graphql/masks/server/manage/types/health_check_type.rb +18 -0
  32. data/app/graphql/masks/server/manage/types/ldap_credential_type.rb +1 -0
  33. data/app/graphql/masks/server/manage/types/mutation_type.rb +5 -0
  34. data/app/graphql/masks/server/manage/types/query_type.rb +24 -0
  35. data/app/graphql/masks/server/manage/types/release_type.rb +16 -0
  36. data/app/graphql/masks/server/manage/types/tenant_type.rb +6 -1
  37. data/app/helpers/masks/server/account_helper.rb +4 -0
  38. data/app/jobs/masks/server/application_job.rb +28 -0
  39. data/app/jobs/masks/server/check_domain_claims_job.rb +1 -3
  40. data/app/jobs/masks/server/cleanup_job.rb +5 -6
  41. data/app/jobs/masks/server/health_check_job.rb +21 -0
  42. data/app/jobs/masks/server/idle_accounts_job.rb +1 -3
  43. data/app/jobs/masks/server/prune_queue_job.rb +19 -0
  44. data/app/jobs/masks/server/refresh_groups_job.rb +18 -0
  45. data/app/jobs/masks/server/refresh_saml_metadata_job.rb +1 -3
  46. data/app/jobs/masks/server/release_check_job.rb +21 -0
  47. data/app/jobs/masks/server/rotate_signing_keys_job.rb +1 -3
  48. data/app/jobs/masks/server/text_job.rb +12 -1
  49. data/app/ldap/masks/server/ldap/connection.rb +3 -2
  50. data/app/ldap/masks/server/ldap/gate.rb +31 -4
  51. data/app/logins/masks/server/login_states/second_factor.rb +1 -1
  52. data/app/mailers/masks/server/actor_mailer.rb +31 -0
  53. data/app/models/masks/server/access_request.rb +103 -0
  54. data/app/models/masks/server/actor.rb +6 -0
  55. data/app/models/masks/server/app_password.rb +91 -0
  56. data/app/models/masks/server/app_passwords.rb +82 -0
  57. data/app/models/masks/server/app_preset.rb +102 -0
  58. data/app/models/masks/server/boot_task.rb +41 -0
  59. data/app/models/masks/server/client.rb +15 -0
  60. data/app/models/masks/server/connection.rb +7 -0
  61. data/app/models/masks/server/declared.rb +10 -2
  62. data/app/models/masks/server/email_verification.rb +2 -2
  63. data/app/models/masks/server/enrollment_token.rb +1 -1
  64. data/app/models/masks/server/event.rb +15 -1
  65. data/app/models/masks/server/federation/protocol.rb +1 -1
  66. data/app/models/masks/server/federation/saml.rb +1 -1
  67. data/app/models/masks/server/forward_auth_rules.rb +162 -0
  68. data/app/models/masks/server/group.rb +207 -4
  69. data/app/models/masks/server/group_member.rb +7 -0
  70. data/app/models/masks/server/group_rule.rb +63 -0
  71. data/app/models/masks/server/health.rb +243 -0
  72. data/app/models/masks/server/health_check.rb +27 -0
  73. data/app/models/masks/server/invitation.rb +2 -2
  74. data/app/models/masks/server/job_failures.rb +25 -0
  75. data/app/models/masks/server/ldap_credential.rb +2 -2
  76. data/app/models/masks/server/login.rb +28 -2
  77. data/app/models/masks/server/mail_previews.rb +5 -0
  78. data/app/models/masks/server/mail_template.rb +2 -0
  79. data/app/models/masks/server/membership.rb +10 -3
  80. data/app/models/masks/server/notifications.rb +3 -1
  81. data/app/models/masks/server/password_reset.rb +2 -2
  82. data/app/models/masks/server/provider.rb +1 -0
  83. data/app/models/masks/server/queue.rb +60 -0
  84. data/app/models/masks/server/release.rb +74 -0
  85. data/app/models/masks/server/session.rb +8 -0
  86. data/app/models/masks/server/tenant.rb +39 -2
  87. data/app/models/masks/server/token.rb +2 -1
  88. data/app/views/masks/server/account/_app_passwords.html.erb +83 -0
  89. data/app/views/masks/server/account/_organizations.html.erb +33 -0
  90. data/app/views/masks/server/account/index.html.erb +5 -0
  91. data/app/views/masks/server/actor_mailer/access_declined.html.erb +5 -0
  92. data/app/views/masks/server/actor_mailer/access_declined.text.erb +5 -0
  93. data/app/views/masks/server/actor_mailer/access_granted.html.erb +7 -0
  94. data/app/views/masks/server/actor_mailer/access_granted.text.erb +7 -0
  95. data/app/views/masks/server/authorize/error.html.erb +25 -0
  96. data/config/locales/de/access_requests.yml +43 -0
  97. data/config/locales/de/account/app_passwords.yml +42 -0
  98. data/config/locales/de/events.yml +9 -0
  99. data/config/locales/de/flashes.yml +1 -0
  100. data/config/locales/de/group_sources.yml +5 -0
  101. data/config/locales/de/manage/access_requests.yml +12 -0
  102. data/config/locales/de/manage/app_passwords.yml +16 -0
  103. data/config/locales/de/manage/client.yml +1 -1
  104. data/config/locales/de/manage/forward_auth_rules.yml +29 -0
  105. data/config/locales/de/manage/group_sources.yml +44 -0
  106. data/config/locales/de/manage/health.yml +78 -0
  107. data/config/locales/de/manage/links.yml +20 -0
  108. data/config/locales/de/manage/machines.yml +13 -0
  109. data/config/locales/de/manage/namespaces.yml +1 -1
  110. data/config/locales/en/access_requests.yml +43 -0
  111. data/config/locales/en/account/app_passwords.yml +42 -0
  112. data/config/locales/en/events.yml +9 -0
  113. data/config/locales/en/flashes.yml +1 -0
  114. data/config/locales/en/group_sources.yml +5 -0
  115. data/config/locales/en/manage/access_requests.yml +12 -0
  116. data/config/locales/en/manage/app_passwords.yml +16 -0
  117. data/config/locales/en/manage/forward_auth_rules.yml +29 -0
  118. data/config/locales/en/manage/group_sources.yml +44 -0
  119. data/config/locales/en/manage/health.yml +78 -0
  120. data/config/locales/en/manage/links.yml +20 -0
  121. data/config/locales/en/manage/machines.yml +13 -0
  122. data/config/locales/es/access_requests.yml +43 -0
  123. data/config/locales/es/account/app_passwords.yml +42 -0
  124. data/config/locales/es/events.yml +9 -0
  125. data/config/locales/es/flashes.yml +1 -0
  126. data/config/locales/es/group_sources.yml +5 -0
  127. data/config/locales/es/handshakes.yml +1 -1
  128. data/config/locales/es/manage/access_requests.yml +12 -0
  129. data/config/locales/es/manage/app_passwords.yml +16 -0
  130. data/config/locales/es/manage/forward_auth_rules.yml +29 -0
  131. data/config/locales/es/manage/group_sources.yml +44 -0
  132. data/config/locales/es/manage/health.yml +78 -0
  133. data/config/locales/es/manage/links.yml +20 -0
  134. data/config/locales/es/manage/machines.yml +13 -0
  135. data/config/locales/fr/access_requests.yml +43 -0
  136. data/config/locales/fr/account/app_passwords.yml +42 -0
  137. data/config/locales/fr/events.yml +9 -0
  138. data/config/locales/fr/flashes.yml +1 -0
  139. data/config/locales/fr/group_sources.yml +5 -0
  140. data/config/locales/fr/handshakes.yml +1 -1
  141. data/config/locales/fr/manage/access_requests.yml +12 -0
  142. data/config/locales/fr/manage/app_passwords.yml +16 -0
  143. data/config/locales/fr/manage/client.yml +1 -1
  144. data/config/locales/fr/manage/clients.yml +1 -1
  145. data/config/locales/fr/manage/forward_auth_rules.yml +29 -0
  146. data/config/locales/fr/manage/group_sources.yml +44 -0
  147. data/config/locales/fr/manage/health.yml +78 -0
  148. data/config/locales/fr/manage/links.yml +20 -0
  149. data/config/locales/fr/manage/machines.yml +13 -0
  150. data/config/locales/fr/manage/providers.yml +1 -1
  151. data/config/routes.rb +6 -0
  152. data/db/migrate/20261019140000_add_indexes_for_cleanup_and_metrics.rb +10 -0
  153. data/db/migrate/20261020100000_create_access_requests.rb +28 -0
  154. data/db/migrate/20261020110000_add_app_passwords_to_clients.rb +5 -0
  155. data/db/migrate/20261020120000_add_forward_auth_rules_to_clients.rb +6 -0
  156. data/db/migrate/20261020130000_add_sources_to_groups.rb +15 -0
  157. data/db/migrate/20261020140000_create_health_checks.rb +25 -0
  158. data/db/migrate/20261020150000_add_link_lifetimes_to_tenants.rb +8 -0
  159. data/db/migrate/20261021100000_add_pinned_origin_to_tenants.rb +5 -0
  160. data/lib/generators/masks/server/install/install_generator.rb +3 -2
  161. data/lib/masks/server/configuration.rb +6 -11
  162. data/lib/masks/server/schema_reference.rb +12 -0
  163. data/lib/masks/server/tenancy/middleware.rb +17 -6
  164. data/lib/tasks/masks.rake +31 -7
  165. data/public/masks-assets/.vite/manifest.json +13 -13
  166. data/public/masks-assets/assets/{account-D46qDQCo.js → account-h7I6VUPR.js} +2 -2
  167. data/public/masks-assets/assets/{account-D46qDQCo.js.map → account-h7I6VUPR.js.map} +1 -1
  168. data/public/masks-assets/assets/{app-D7W0gAyT.css → app-BXOScMjL.css} +1 -1
  169. data/public/masks-assets/assets/{handshake-DIFZPSAK.js → handshake-YQpRNMIs.js} +2 -2
  170. data/public/masks-assets/assets/{handshake-DIFZPSAK.js.map → handshake-YQpRNMIs.js.map} +1 -1
  171. data/public/masks-assets/assets/initial-Cn-UuAsy.js +3 -0
  172. data/public/masks-assets/assets/{initial-C1GpCiEh.js.map → initial-Cn-UuAsy.js.map} +1 -1
  173. data/public/masks-assets/assets/{login-C_6igRZ3.js → login-C21_jb6L.js} +3 -3
  174. data/public/masks-assets/assets/{login-C_6igRZ3.js.map → login-C21_jb6L.js.map} +1 -1
  175. data/public/masks-assets/assets/{manage-DR9qQiBU.js → manage-DpVxe5sv.js} +86 -50
  176. data/public/masks-assets/assets/manage-DpVxe5sv.js.map +1 -0
  177. data/public/masks-assets/assets/passkey-5UYPVD3c.js +2 -0
  178. data/public/masks-assets/assets/{passkey-DIj_5LCY.js.map → passkey-5UYPVD3c.js.map} +1 -1
  179. data/version.txt +1 -1
  180. metadata +96 -14
  181. data/public/masks-assets/assets/initial-C1GpCiEh.js +0 -3
  182. data/public/masks-assets/assets/manage-DR9qQiBU.js.map +0 -1
  183. data/public/masks-assets/assets/passkey-DIj_5LCY.js +0 -2
@@ -1,7 +1,7 @@
1
1
  de:
2
2
  manage:
3
3
  namespaces:
4
- title: "Namespaces"
4
+ title: "Namensräume"
5
5
  release_confirm: "%{name} freigeben? Der nächste Client, der ihn anfordert, erhält ihn, und die Scopes darunter bedeuten nicht mehr, was sie jetzt bedeuten."
6
6
  released: "%{name} kann wieder beansprucht werden."
7
7
  columns:
@@ -0,0 +1,43 @@
1
+ en:
2
+ authorize:
3
+ error:
4
+ asking: "Your account is not in a group that may use %{app}. You can ask for access. The people who run %{app} decide, and you get an email either way."
5
+ ask: "Ask for access"
6
+ asked: "Your request was sent. You get an email once it is decided."
7
+ waiting: "Your request to use %{app} is waiting. You get an email once it is decided."
8
+ slow_down: "You asked for access to this app less than an hour ago. Wait for the answer."
9
+ back: "Back to %{app}"
10
+ the_app: "the app"
11
+
12
+ account:
13
+ index:
14
+ access:
15
+ heading: "Asked for access"
16
+ lede: "These people were turned away from an app that admits members of %{organization}. Approving makes them a member with the role you pick."
17
+ asked: "Asked to use %{app} %{age} ago"
18
+ role_of: "Role for %{name}"
19
+ grant: "Approve"
20
+ decline: "Decline"
21
+ confirm_decline: "Decline %{identifier}'s request to use %{app}? They get an email, and they can ask again in an hour."
22
+
23
+ organization_access:
24
+ granted: "%{identifier} is %{role} of %{organization} now and can use %{app}."
25
+ declined: "%{identifier}'s request to use %{app} is declined."
26
+ unknown: "That request is not waiting on %{organization}."
27
+
28
+ actor_mailer:
29
+ access_granted:
30
+ subject: "You can use %{app} now"
31
+ lede: "Your request to use %{app} at %{tenant} was approved. Sign in to %{app} again and you are let in."
32
+ action: "Open %{app}"
33
+ access_declined:
34
+ subject: "Your request to use %{app} was declined"
35
+ lede: "Somebody who runs %{app} at %{tenant} declined your request for access."
36
+ again: "If you think this is a mistake, ask them directly. You can ask again in an hour."
37
+
38
+ events:
39
+ actions:
40
+ access:
41
+ requested: "Asked for access to an app"
42
+ granted: "Access to an app granted"
43
+ declined: "Access to an app declined"
@@ -0,0 +1,42 @@
1
+ en:
2
+ account:
3
+ index:
4
+ app_passwords:
5
+ heading: "App passwords"
6
+ entry: "App passwords"
7
+ state:
8
+ none: "None"
9
+ lede: "An app password lets one app, such as a media server or a NAS, sign in as you without your second factor. It works for the app it was made for and nothing else."
10
+ shown_once: "This is the app password for %{name}. It is shown once. Enter it in %{app} now."
11
+ made_ago: "made %{age} ago"
12
+ used_ago: "last used %{age} ago"
13
+ never_used: "never used"
14
+ revoke: "Revoke"
15
+ confirm_revoke: "Revoke %{name}? The app stops signing in with it right away."
16
+ name: "Name"
17
+ name_placeholder: "Jellyfin on the TV"
18
+ app: "App"
19
+ make: "Make app password"
20
+ make_again: "Sign in again to make one"
21
+ hint: "Your own password and passkeys stay as they are. Revoking an app password changes nothing else."
22
+ none_offered: "No app accepts app passwords yet."
23
+ app_passwords:
24
+ again: "Sign in again to make an app password. It has been a while since you did."
25
+ unknown: "There is no such app password on this account."
26
+ revoked: "%{name} is revoked."
27
+ refused:
28
+ name: "Give the app password a name of up to 64 characters."
29
+ app: "That app does not accept app passwords."
30
+ too_many: "You already have %{most} app passwords. Revoke one first."
31
+ events:
32
+ actions:
33
+ app_password:
34
+ created: "App password made"
35
+ used: "Signed in with an app password"
36
+ revoked: "App password revoked"
37
+ actor_mailer:
38
+ notification:
39
+ said:
40
+ app_password:
41
+ created: "An app password was made on your %{tenant} account. It signs in to one app without your second factor."
42
+ revoked: "An app password on your %{tenant} account was revoked."
@@ -157,6 +157,13 @@ en:
157
157
  exported: "Activity exported"
158
158
  mail_template:
159
159
  updated: "Email template changed"
160
+ job:
161
+ failed: "Background job failed for this tenant"
162
+ health:
163
+ failing: "Health check failing"
164
+ recovered: "Health check recovered"
165
+ release:
166
+ available: "New release available"
160
167
  stream:
161
168
  created: "Event stream added"
162
169
  updated: "Event stream changed"
@@ -171,6 +178,8 @@ en:
171
178
  signal:
172
179
  undelivered: "Shared signal not delivered"
173
180
  received: "Provider signaled sign-out"
181
+ text:
182
+ undelivered: "Text message not delivered"
174
183
  organization:
175
184
  created: "Organization added"
176
185
  updated: "Organization changed"
@@ -163,3 +163,4 @@ en:
163
163
  forward_auth:
164
164
  unknown: "No app behind a proxy is registered at that address."
165
165
  not_admitted: "Your account may not use %{app}."
166
+ denied: "This page of %{app} is closed to everyone."
@@ -0,0 +1,5 @@
1
+ en:
2
+ events:
3
+ actions:
4
+ group:
5
+ refreshed: "Group filled from its source"
@@ -0,0 +1,12 @@
1
+ en:
2
+ manage:
3
+ access_requests:
4
+ title: "Access requests"
5
+ lede: "Actors who were turned away from this client and asked for access. Approving puts them in one of the groups it allows, and they get an email either way."
6
+ empty: "Nobody is waiting for access."
7
+ asked: "Asked %{day}"
8
+ as: "Group to put them in"
9
+ grant: "Approve"
10
+ decline: "Decline"
11
+ granted: "%{identifier} is in %{label} now and can sign in."
12
+ declined: "%{identifier}'s request is declined."
@@ -0,0 +1,16 @@
1
+ en:
2
+ manage:
3
+ client:
4
+ sign_in:
5
+ app_passwords: "Accept app passwords"
6
+ app_passwords_help: "People make an app password for this client on their account page. It signs them in over LDAP and forward auth without a second factor, for this client alone."
7
+ notices:
8
+ app_passwords_on: "People can make an app password for it now."
9
+ app_passwords_off: "Its app passwords are refused from now on."
10
+ ldap:
11
+ connect:
12
+ app: "App"
13
+ no_app: "No app"
14
+ app_help: "Choose the client the service is registered as. People's app passwords for that client then bind on a connection that bound with this credential first."
15
+ credentials:
16
+ app: "Accepts app passwords for %{name}"
@@ -0,0 +1,29 @@
1
+ en:
2
+ manage:
3
+ forward_auth_rules:
4
+ title: "Rules"
5
+ lede: "The first rule that covers a request decides it. A request no rule covers needs a signed-in person who may sign in."
6
+ empty: "There are no rules. Every request needs a signed-in person who may sign in."
7
+ paths: "Paths"
8
+ paths_hint: "One per line. * covers one segment and ** covers any depth, so /admin/** covers /admin and everything under it. Empty covers every path."
9
+ methods: "Methods"
10
+ methods_hint: "GET, POST, and so on. Empty covers every method."
11
+ networks: "Networks"
12
+ networks_hint: "Addresses or ranges, such as 192.168.0.0/16. Empty covers every address."
13
+ groups: "Groups"
14
+ groups_hint: "Group keys, or roles as key:role. Empty covers everyone."
15
+ outcome: "Outcome"
16
+ outcomes:
17
+ open: "Open to everyone, with no sign-in"
18
+ one_factor: "A signed-in person, without a second factor"
19
+ two_factor: "A signed-in person, with their second factor"
20
+ token: "A signed-in person, or a script with an access token"
21
+ deny: "Closed to everyone"
22
+ rule: "Rule %{number}"
23
+ add: "Add rule"
24
+ remove: "Remove"
25
+ up: "Move up"
26
+ down: "Move down"
27
+ save: "Save rules"
28
+ saved: "Rules saved."
29
+ trust: "A network rule trusts the address the proxy sends. Make sure the proxy sets X-Forwarded-For itself."
@@ -0,0 +1,44 @@
1
+ en:
2
+ manage:
3
+ group_sources:
4
+ source: "Fills from"
5
+ sources:
6
+ manual: "People added by hand"
7
+ rule: "A rule"
8
+ provider: "A provider"
9
+ group: "Other groups"
10
+ ledes:
11
+ manual: "A manager adds and removes people on their own pages."
12
+ rule: "Everyone who matches every condition. An email address counts once it is verified. A profile field counts only when a directory sets it, since people cannot change those. Checked when a profile changes and every hour."
13
+ provider: "Everyone whose last sign-in through the provider listed the group."
14
+ group: "Everyone in any of the parent groups or organization roles."
15
+ change: "Change how %{name} fills"
16
+ kinds:
17
+ email_domain: "Email address ends with"
18
+ profile: "Profile field equals"
19
+ field: "Field"
20
+ value: "Value"
21
+ add_condition: "Add condition"
22
+ remove_condition: "Remove condition"
23
+ provider: "Provider"
24
+ choose_provider: "Choose a provider"
25
+ no_providers: "Add a provider first."
26
+ upstream_group: "Group name at the provider"
27
+ parent_labels: "Parent groups"
28
+ parent_labels_hint: "Group keys or organization roles as key:role, separated by commas."
29
+ save: "Save"
30
+ cancel: "Cancel"
31
+ saved: "%{name} now fills from %{source}."
32
+ refresh: "Refresh now"
33
+ refreshed: "%{name} is refreshed."
34
+ refreshed_at: "Refreshed %{when}."
35
+ never_refreshed: "Not refreshed yet."
36
+ summary:
37
+ rule: "Fills by rule"
38
+ provider: "Fills from %{provider}"
39
+ group: "Fills from %{parents}"
40
+ by_hand: "Added by hand, so only a manager removes them."
41
+ from:
42
+ rule: "In the group by its rule, so the rule decides."
43
+ provider: "In the group from a provider sign-in, so the provider decides."
44
+ group: "In the group through a parent group, so the parent decides."
@@ -0,0 +1,78 @@
1
+ en:
2
+ manage:
3
+ health:
4
+ title: "Health"
5
+ lede: "Checks run every 10 minutes. Each one says what it found and what to do."
6
+ check_now: "Check now"
7
+ checking: "Checking"
8
+ checked: "Checked %{when}"
9
+ never: "The checks have not run yet. They run every 10 minutes once a worker is up."
10
+ failed: "The checks could not run: %{failure}"
11
+ statuses:
12
+ ok: "Fine"
13
+ warning: "Needs a look"
14
+ failing: "Failing"
15
+ checks:
16
+ jobs:
17
+ title: "Background jobs"
18
+ elsewhere: "Jobs run on another server."
19
+ none: "No job failed in the last day."
20
+ failed:
21
+ one: "One kind of job failed in the last day: %{jobs}."
22
+ other: "%{count} kinds of job failed in the last day: %{jobs}."
23
+ advice: "Read the error in the server log. Each job runs again on its schedule."
24
+ worker:
25
+ title: "Worker"
26
+ elsewhere: "Jobs run on another server."
27
+ unchecked: "The worker check is off."
28
+ reporting: "A worker is running."
29
+ silent: "No worker has reported in the last %{minutes} minutes."
30
+ advice: "Start the jobs process, or set MASKS_JOBS_IN_WEB_SERVER to true so the web server runs jobs."
31
+ queue:
32
+ title: "Queue"
33
+ elsewhere: "Jobs run on another server."
34
+ unchecked: "The queue check is off."
35
+ moving: "Jobs start on time."
36
+ stuck: "A job has waited to start since %{since}, longer than %{minutes} minutes."
37
+ advice: "Add a worker, or raise JOB_CONCURRENCY so more jobs run at once."
38
+ ldap:
39
+ title: "LDAP"
40
+ tls: "LDAP answers with TLS."
41
+ local: "LDAP answers only on the server's own machine."
42
+ plain: "LDAP answers on port %{port} without TLS, so passwords cross the network in the clear."
43
+ advice: "Set MASKS_LDAP_CERT and MASKS_LDAP_KEY, or unset MASKS_LDAP_PLAINTEXT."
44
+ metrics:
45
+ title: "Metrics"
46
+ "off": "The metrics page is off."
47
+ "on": "The metrics page answers a request that carries its token."
48
+ short: "The metrics token is %{length} characters long, so it can be guessed."
49
+ advice: "Set MASKS_METRICS_TOKEN to at least %{needed} random characters."
50
+ mail:
51
+ title: "Mail"
52
+ none: "No mail service is set up."
53
+ answers: "The mail server answers."
54
+ silent: "The mail server did not answer: %{error}."
55
+ advice: "Check the server, port, and TLS setting on the Messages page, and that the server allows this one to connect."
56
+ origin:
57
+ title: "Public address"
58
+ unset: "No public address is set, so masks follows each request's Host header."
59
+ matches: "Requests arrive at this tenant's public address."
60
+ mismatch: "Requests arrive as %{seen}, but this tenant's address is %{origin}."
61
+ advice: "Have the proxy send X-Forwarded-Proto and X-Forwarded-Host, and list it in MASKS_TRUSTED_PROXIES."
62
+ domains:
63
+ title: "Domains"
64
+ none: "No domain is claimed."
65
+ proven: "Every claimed domain still has its TXT record."
66
+ missing: "The TXT record is gone for %{domains}. A claim is released a week after its record disappears."
67
+ advice: "Put the TXT record back at the name shown on the Domains page."
68
+ keys:
69
+ title: "Signing keys"
70
+ missing: "This tenant has no active signing key, so nothing can be signed."
71
+ manual: "Keys rotate by hand. The active key is %{days} days old."
72
+ fresh: "The active key is %{days} days old and rotates every %{period} days."
73
+ stale: "The active key is %{days} days old, past its %{period} day rotation."
74
+ advice: "Rotate the key on the Settings page, or read the signing_keys job in the server log."
75
+ release:
76
+ available: "Version %{version} is available."
77
+ operator: "This release needs a step from an operator. Read its notes before you upgrade."
78
+ notes: "Release notes"
@@ -0,0 +1,20 @@
1
+ en:
2
+ manage:
3
+ links:
4
+ title: "Links"
5
+ help: "How long each link masks emails stays valid. A link already sent keeps the lifetime it was sent with. An invitation to an organization counts from when it was last sent."
6
+ invitation: "Invitation to an account"
7
+ organization_invitation: "Invitation to an organization"
8
+ password_reset: "Password reset"
9
+ email_verification: "Email confirmation"
10
+ default: "%{length} (default)"
11
+ updated: "Link lifetime saved."
12
+ minutes:
13
+ one: "%{count} minute"
14
+ other: "%{count} minutes"
15
+ hours:
16
+ one: "%{count} hour"
17
+ other: "%{count} hours"
18
+ days:
19
+ one: "%{count} day"
20
+ other: "%{count} days"
@@ -0,0 +1,13 @@
1
+ en:
2
+ manage:
3
+ machines:
4
+ title: "Machines"
5
+ lede: "Clients this app enrolled with an enrollment token. Each one signs in with its own key."
6
+ empty: "This app has not enrolled a machine yet."
7
+ last_seen: "Last signed in %{day}"
8
+ never: "Never signed in"
9
+ enrolled: "Enrolled %{day}"
10
+ enrolled_by: "A machine enrolled by"
11
+ revoke: "Revoke"
12
+ revoke_confirm: "Revoke %{name}? It is archived, every token it holds ends, and it can no longer sign in."
13
+ revoked: "%{name} is revoked and can no longer sign in."
@@ -0,0 +1,43 @@
1
+ es:
2
+ authorize:
3
+ error:
4
+ asking: "Tu cuenta no está en ningún grupo que pueda usar %{app}. Puedes pedir acceso. Quienes gestionan %{app} deciden, y recibirás un correo en cualquier caso."
5
+ ask: "Pedir acceso"
6
+ asked: "Tu solicitud se envió. Recibirás un correo cuando se decida."
7
+ waiting: "Tu solicitud para usar %{app} está pendiente. Recibirás un correo cuando se decida."
8
+ slow_down: "Pediste acceso a esta aplicación hace menos de una hora. Espera la respuesta."
9
+ back: "Volver a %{app}"
10
+ the_app: "la aplicación"
11
+
12
+ account:
13
+ index:
14
+ access:
15
+ heading: "Pidieron acceso"
16
+ lede: "Estas personas fueron rechazadas por una aplicación que admite a los miembros de %{organization}. Al aprobar, pasan a ser miembros con el rol que elijas."
17
+ asked: "Pidió usar %{app} hace %{age}"
18
+ role_of: "Rol para %{name}"
19
+ grant: "Aprobar"
20
+ decline: "Rechazar"
21
+ confirm_decline: "¿Rechazar la solicitud de %{identifier} para usar %{app}? Recibirá un correo y podrá volver a pedirlo en una hora."
22
+
23
+ organization_access:
24
+ granted: "%{identifier} ahora es %{role} de %{organization} y puede usar %{app}."
25
+ declined: "La solicitud de %{identifier} para usar %{app} fue rechazada."
26
+ unknown: "Esa solicitud no está pendiente de %{organization}."
27
+
28
+ actor_mailer:
29
+ access_granted:
30
+ subject: "Ya puedes usar %{app}"
31
+ lede: "Tu solicitud para usar %{app} en %{tenant} fue aprobada. Vuelve a iniciar sesión en %{app} y entrarás."
32
+ action: "Abrir %{app}"
33
+ access_declined:
34
+ subject: "Tu solicitud para usar %{app} fue rechazada"
35
+ lede: "Alguien que gestiona %{app} en %{tenant} rechazó tu solicitud de acceso."
36
+ again: "Si crees que es un error, pregúntale directamente. Puedes volver a pedirlo en una hora."
37
+
38
+ events:
39
+ actions:
40
+ access:
41
+ requested: "Pidió acceso a una aplicación"
42
+ granted: "Acceso a una aplicación concedido"
43
+ declined: "Acceso a una aplicación rechazado"
@@ -0,0 +1,42 @@
1
+ es:
2
+ account:
3
+ index:
4
+ app_passwords:
5
+ heading: "Contraseñas de aplicación"
6
+ entry: "Contraseñas de aplicación"
7
+ state:
8
+ none: "Ninguna"
9
+ lede: "Una contraseña de aplicación permite que una sola aplicación, como un servidor multimedia o un NAS, inicie sesión como tú sin tu segundo factor. Solo sirve para la aplicación para la que se creó."
10
+ shown_once: "Esta es la contraseña de aplicación de %{name}. Se muestra una sola vez. Introdúcela ahora en %{app}."
11
+ made_ago: "creada hace %{age}"
12
+ used_ago: "usada por última vez hace %{age}"
13
+ never_used: "nunca usada"
14
+ revoke: "Revocar"
15
+ confirm_revoke: "¿Revocar %{name}? La aplicación deja de iniciar sesión con ella de inmediato."
16
+ name: "Nombre"
17
+ name_placeholder: "Jellyfin en la tele"
18
+ app: "Aplicación"
19
+ make: "Crear contraseña de aplicación"
20
+ make_again: "Vuelve a iniciar sesión para crear una"
21
+ hint: "Tu propia contraseña y tus llaves de acceso no cambian. Revocar una contraseña de aplicación no cambia nada más."
22
+ none_offered: "Ninguna aplicación acepta contraseñas de aplicación todavía."
23
+ app_passwords:
24
+ again: "Vuelve a iniciar sesión para crear una contraseña de aplicación. Hace tiempo que no lo haces."
25
+ unknown: "No hay tal contraseña de aplicación en esta cuenta."
26
+ revoked: "%{name} está revocada."
27
+ refused:
28
+ name: "Da a la contraseña de aplicación un nombre de hasta 64 caracteres."
29
+ app: "Esa aplicación no acepta contraseñas de aplicación."
30
+ too_many: "Ya tienes %{most} contraseñas de aplicación. Revoca una primero."
31
+ events:
32
+ actions:
33
+ app_password:
34
+ created: "Contraseña de aplicación creada"
35
+ used: "Sesión iniciada con una contraseña de aplicación"
36
+ revoked: "Contraseña de aplicación revocada"
37
+ actor_mailer:
38
+ notification:
39
+ said:
40
+ app_password:
41
+ created: "Se creó una contraseña de aplicación en tu cuenta de %{tenant}. Con ella una aplicación inicia sesión sin tu segundo factor."
42
+ revoked: "Se revocó una contraseña de aplicación de tu cuenta de %{tenant}."
@@ -157,6 +157,13 @@ es:
157
157
  exported: "Actividad exportada"
158
158
  mail_template:
159
159
  updated: "Plantilla de correo cambiada"
160
+ job:
161
+ failed: "Tarea en segundo plano fallida para este inquilino"
162
+ health:
163
+ failing: "Comprobación de estado fallando"
164
+ recovered: "Comprobación de estado recuperada"
165
+ release:
166
+ available: "Nueva versión disponible"
160
167
  stream:
161
168
  created: "Flujo de eventos añadido"
162
169
  updated: "Flujo de eventos cambiado"
@@ -171,6 +178,8 @@ es:
171
178
  signal:
172
179
  undelivered: "Señal compartida no entregada"
173
180
  received: "El proveedor señaló un cierre de sesión"
181
+ text:
182
+ undelivered: "Mensaje de texto no entregado"
174
183
  organization:
175
184
  created: "Organización añadida"
176
185
  updated: "Organización cambiada"
@@ -163,3 +163,4 @@ es:
163
163
  forward_auth:
164
164
  unknown: "No hay ninguna aplicación detrás de un proxy registrada en esa dirección."
165
165
  not_admitted: "Tu cuenta no puede usar %{app}."
166
+ denied: "Esta página de %{app} está cerrada para todos."
@@ -0,0 +1,5 @@
1
+ es:
2
+ events:
3
+ actions:
4
+ group:
5
+ refreshed: "Grupo llenado desde su origen"
@@ -26,7 +26,7 @@ es:
26
26
  area_yours: " Tú los recibes todos ahora."
27
27
  also: "%{name} también puede"
28
28
  details: "Detalles técnicos"
29
- scopes: "Scopes"
29
+ scopes: "Alcances"
30
30
  client: "Credenciales"
31
31
  credentials:
32
32
  public: "Pública. No guarda ningún secreto."
@@ -0,0 +1,12 @@
1
+ es:
2
+ manage:
3
+ access_requests:
4
+ title: "Solicitudes de acceso"
5
+ lede: "Actores que fueron rechazados por este cliente y pidieron acceso. Al aprobar, pasan a uno de los grupos que admite, y reciben un correo en cualquier caso."
6
+ empty: "Nadie está esperando acceso."
7
+ asked: "Pedido %{day}"
8
+ as: "Grupo al que pasan"
9
+ grant: "Aprobar"
10
+ decline: "Rechazar"
11
+ granted: "%{identifier} ya está en %{label} y puede iniciar sesión."
12
+ declined: "La solicitud de %{identifier} fue rechazada."
@@ -0,0 +1,16 @@
1
+ es:
2
+ manage:
3
+ client:
4
+ sign_in:
5
+ app_passwords: "Aceptar contraseñas de aplicación"
6
+ app_passwords_help: "Los actores crean una contraseña de aplicación para este cliente en su página de cuenta. Les inicia sesión por LDAP y forward auth sin segundo factor, solo en este cliente."
7
+ notices:
8
+ app_passwords_on: "Los actores ya pueden crear una contraseña de aplicación para él."
9
+ app_passwords_off: "Sus contraseñas de aplicación se rechazan a partir de ahora."
10
+ ldap:
11
+ connect:
12
+ app: "Aplicación"
13
+ no_app: "Sin aplicación"
14
+ app_help: "Elige el cliente con el que está registrado el servicio. Las contraseñas de aplicación de los actores para ese cliente se enlazan entonces en una conexión que se enlazó primero con esta credencial."
15
+ credentials:
16
+ app: "Acepta contraseñas de aplicación de %{name}"
@@ -0,0 +1,29 @@
1
+ es:
2
+ manage:
3
+ forward_auth_rules:
4
+ title: "Reglas"
5
+ lede: "La primera regla que cubre una solicitud la decide. Una solicitud sin regla necesita una persona con sesión iniciada que pueda iniciar sesión."
6
+ empty: "No hay reglas. Cada solicitud necesita una persona con sesión iniciada que pueda iniciar sesión."
7
+ paths: "Rutas"
8
+ paths_hint: "Una por línea. * cubre un segmento y ** cualquier profundidad, así que /admin/** cubre /admin y todo lo que hay debajo. Vacío cubre todas las rutas."
9
+ methods: "Métodos"
10
+ methods_hint: "GET, POST y los demás. Vacío cubre todos los métodos."
11
+ networks: "Redes"
12
+ networks_hint: "Direcciones o rangos, como 192.168.0.0/16. Vacío cubre todas las direcciones."
13
+ groups: "Grupos"
14
+ groups_hint: "Claves de grupo, o roles como clave:rol. Vacío cubre a todos."
15
+ outcome: "Resultado"
16
+ outcomes:
17
+ open: "Abierto a todos, sin iniciar sesión"
18
+ one_factor: "Una persona con sesión iniciada, sin segundo factor"
19
+ two_factor: "Una persona con sesión iniciada, con su segundo factor"
20
+ token: "Una persona con sesión iniciada, o un script con un token de acceso"
21
+ deny: "Cerrado para todos"
22
+ rule: "Regla %{number}"
23
+ add: "Añadir regla"
24
+ remove: "Quitar"
25
+ up: "Subir"
26
+ down: "Bajar"
27
+ save: "Guardar reglas"
28
+ saved: "Reglas guardadas."
29
+ trust: "Una regla de red confía en la dirección que envía el proxy. Asegúrate de que el proxy establece X-Forwarded-For por sí mismo."
@@ -0,0 +1,44 @@
1
+ es:
2
+ manage:
3
+ group_sources:
4
+ source: "Se llena desde"
5
+ sources:
6
+ manual: "Personas añadidas a mano"
7
+ rule: "Una regla"
8
+ provider: "Un proveedor"
9
+ group: "Otros grupos"
10
+ ledes:
11
+ manual: "Un gestor añade y quita personas desde sus propias páginas."
12
+ rule: "Todas las personas que cumplen cada condición. Una dirección de correo cuenta cuando está verificada. Un campo del perfil cuenta solo cuando lo fija un directorio, porque las personas no pueden cambiarlo. Se comprueba al cambiar un perfil y cada hora."
13
+ provider: "Todas las personas cuyo último inicio de sesión con el proveedor incluyó el grupo."
14
+ group: "Todas las personas en alguno de los grupos o roles de organización superiores."
15
+ change: "Cambiar cómo se llena %{name}"
16
+ kinds:
17
+ email_domain: "La dirección de correo termina en"
18
+ profile: "El campo del perfil es igual a"
19
+ field: "Campo"
20
+ value: "Valor"
21
+ add_condition: "Añadir condición"
22
+ remove_condition: "Quitar condición"
23
+ provider: "Proveedor"
24
+ choose_provider: "Elige un proveedor"
25
+ no_providers: "Añade primero un proveedor."
26
+ upstream_group: "Nombre del grupo en el proveedor"
27
+ parent_labels: "Grupos superiores"
28
+ parent_labels_hint: "Claves de grupo o roles de organización como clave:rol, separados por comas."
29
+ save: "Guardar"
30
+ cancel: "Cancelar"
31
+ saved: "%{name} ahora se llena desde %{source}."
32
+ refresh: "Actualizar ahora"
33
+ refreshed: "%{name} se actualizó."
34
+ refreshed_at: "Actualizado %{when}."
35
+ never_refreshed: "Aún no se actualizó."
36
+ summary:
37
+ rule: "Se llena por regla"
38
+ provider: "Se llena desde %{provider}"
39
+ group: "Se llena desde %{parents}"
40
+ by_hand: "Añadido a mano, así que solo un gestor lo quita."
41
+ from:
42
+ rule: "En el grupo por su regla, así que la regla decide."
43
+ provider: "En el grupo por un inicio de sesión con el proveedor, así que el proveedor decide."
44
+ group: "En el grupo a través de un grupo superior, así que ese grupo decide."