feat(18-01): write-only settings secrets, richeditor and tabs on settings forms (task 3)

- type: password on a settings form binds a lagoon.Encrypted column as a
  write-only secret (any other column fails boot naming the field): the
  GET omits it from data and reports stored, env or empty per field in
  meta.secrets; on PUT an absent key or "" keeps the value, null clears
  it, a non-string is a 422; the answer never carries a value
- cabana.SecretFallbacks (field to config key) gives the env state;
  cabana.SettingsMeta, SecretStored/SecretEnv/SecretEmpty exported
- settings forms accept richeditor: the Put sanitizes through seaglass
  like a controller save and returns meta.notices; repeater and
  dependsOn stay refused (settingsFormOnly next to controllerFormOnly)
- backend::lang secret.* phrases in en and pl
- admin SPA: PasswordField secret status line (stored with Remove stored
  value, env, empty, pending clear with Undo), SettingsFormView tabs with
  error-tab activation and the secrets/notices meta, settings payload
  that never sends an untouched secret; regenerated OpenAPI and TS
  types; rebuilt dist
- vault fixture, TestSettingsSecretCompile, Docker TestSettingsSecretSmoke
  and TestSettingsRichEditorSmoke, conform settings fixture with a
  password field; settings.md sections, forms.md notes, cabana README
This commit is contained in:
Jakub Zych
2026-10-13 11:36:12 +02:00
parent 0c8605123e
commit 1e841b4281
27 changed files with 1251 additions and 92 deletions

View File

@@ -144,6 +144,14 @@ money:
too_precise: "Use at most :scale decimal places. Amounts are never rounded."
too_large: "This amount is larger than the field can store (at most :max)."
currency: "Currency: :code"
secret:
stored: "A value is stored. Leave the field empty to keep it."
env: "Nothing is stored here, so the value from the server configuration is used."
empty: "Not set."
clear: "Remove stored value"
clear_pending: "The stored value will be removed when you save."
undo: "Keep stored value"
placeholder_stored: "Enter a new value to replace it"
fileupload:
attachment: Attachment details
help: Add a title and description for this attachment.

View File

@@ -154,6 +154,14 @@ money:
too_precise: "Użyj najwyżej :scale miejsc po przecinku. Kwoty nie są zaokrąglane."
too_large: "Ta kwota jest większa, niż pole może zapisać (najwyżej :max)."
currency: "Waluta: :code"
secret:
stored: "Wartość jest zapisana. Pozostaw pole puste, aby jej nie zmieniać."
env: "Nic tu nie zapisano, więc używana jest wartość z konfiguracji serwera."
empty: "Nie ustawiono."
clear: "Usuń zapisaną wartość"
clear_pending: "Zapisana wartość zostanie usunięta po zapisaniu."
undo: "Zachowaj zapisaną wartość"
placeholder_stored: "Wpisz nową wartość, aby ją zastąpić"
fileupload:
attachment: Szczegóły załącznika
help: Dodaj tytuł oraz opis załącznika.