mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-08-29 14:37:13 +00:00
feat(settings): let users clear stored secrets from the UI
Redacted secrets (SMTP password, Telegram bot token, LDAP password) are always served blank to the browser, so the update path treats a blank submission as "unchanged" and silently restores the stored value. That made a once-set secret impossible to remove without editing the database — e.g. switching to a passwordless localhost SMTP relay kept sending the old credentials forever. Blank stays "unchanged"; clearing is now its own signal. The update request carries explicit clear flags (request-scoped fields on the controller form, so they are never persisted as settings rows), and preserveRedactedSecrets skips the restore for a flagged secret. Each secret field gets a Clear/Undo button that arms the flag; typing a new value disarms it. The 2FA token keeps its existing behavior: it is already clearable by disabling 2FA. Closes #5724
This commit is contained in:
@@ -1399,7 +1399,9 @@
|
||||
"remarkTemplateDesc": "عند تعيينه، يحل هذا محل نموذج الملاحظة لكل رابط اشتراك — اكتب صيغتك الخاصة باستخدام رموز المتغيرات (استخدم الزر لإدراجها). اتركه فارغاً لاستخدام النموذج أعلاه.",
|
||||
"validation": {
|
||||
"pathLeadingSlash": "يجب أن يبدأ المسار بالرمز /"
|
||||
}
|
||||
},
|
||||
"secretClear": "مسح",
|
||||
"secretClearUndo": "تراجع عن المسح"
|
||||
},
|
||||
"xray": {
|
||||
"title": "إعدادات Xray",
|
||||
|
||||
@@ -1515,7 +1515,9 @@
|
||||
"eventMemoryHigh": "Memory high (%)",
|
||||
"validation": {
|
||||
"pathLeadingSlash": "Path must start with /"
|
||||
}
|
||||
},
|
||||
"secretClear": "Clear",
|
||||
"secretClearUndo": "Undo clear"
|
||||
},
|
||||
"xray": {
|
||||
"title": "Xray Configs",
|
||||
|
||||
@@ -1399,7 +1399,9 @@
|
||||
"remarkTemplateDesc": "Cuando se define, esto reemplaza el modelo de notas para cada enlace de suscripción — escribe tu propio formato con los tokens de variable (usa el botón para insertarlos). Déjalo vacío para usar el modelo anterior.",
|
||||
"validation": {
|
||||
"pathLeadingSlash": "La ruta debe comenzar con /"
|
||||
}
|
||||
},
|
||||
"secretClear": "Borrar",
|
||||
"secretClearUndo": "Deshacer borrado"
|
||||
},
|
||||
"xray": {
|
||||
"title": "Xray Configuración",
|
||||
|
||||
@@ -1399,7 +1399,9 @@
|
||||
"eventMemoryHigh": "مصرف حافظه بالا (%)",
|
||||
"validation": {
|
||||
"pathLeadingSlash": "مسیر باید با / شروع شود"
|
||||
}
|
||||
},
|
||||
"secretClear": "پاک کردن",
|
||||
"secretClearUndo": "لغو پاک کردن"
|
||||
},
|
||||
"xray": {
|
||||
"title": "پیکربندی ایکسری",
|
||||
|
||||
@@ -1399,7 +1399,9 @@
|
||||
"remarkTemplateDesc": "Jika diatur, ini menggantikan model catatan untuk setiap tautan langganan — tulis format Anda sendiri dengan token variabel (gunakan tombol untuk menyisipkannya). Biarkan kosong untuk memakai model di atas.",
|
||||
"validation": {
|
||||
"pathLeadingSlash": "Path harus diawali dengan /"
|
||||
}
|
||||
},
|
||||
"secretClear": "Hapus",
|
||||
"secretClearUndo": "Batalkan hapus"
|
||||
},
|
||||
"xray": {
|
||||
"title": "Konfigurasi Xray",
|
||||
|
||||
@@ -1399,7 +1399,9 @@
|
||||
"remarkTemplateDesc": "設定すると、すべてのサブスクリプションリンクの備考モデルを置き換えます — 変数トークンを使って独自の形式を記述してください(ボタンで挿入できます)。空欄にすると上記のモデルが使用されます。",
|
||||
"validation": {
|
||||
"pathLeadingSlash": "パスは / で始まる必要があります"
|
||||
}
|
||||
},
|
||||
"secretClear": "クリア",
|
||||
"secretClearUndo": "クリアを取り消す"
|
||||
},
|
||||
"xray": {
|
||||
"title": "Xray 設定",
|
||||
|
||||
@@ -1399,7 +1399,9 @@
|
||||
"remarkTemplateDesc": "Quando definido, isto substitui o modelo de observação de cada link de assinatura — escreva seu próprio formato com os tokens de variáveis (use o botão para inseri-los). Deixe vazio para usar o modelo acima.",
|
||||
"validation": {
|
||||
"pathLeadingSlash": "O caminho deve começar com /"
|
||||
}
|
||||
},
|
||||
"secretClear": "Limpar",
|
||||
"secretClearUndo": "Desfazer limpeza"
|
||||
},
|
||||
"xray": {
|
||||
"title": "Configurações Xray",
|
||||
|
||||
@@ -1399,7 +1399,9 @@
|
||||
"remarkTemplateDesc": "Если задан, заменяет модель примечания для каждой ссылки подписки — задайте собственный формат с помощью токенов переменных (используйте кнопку для их вставки). Оставьте пустым, чтобы использовать модель выше.",
|
||||
"validation": {
|
||||
"pathLeadingSlash": "Путь должен начинаться с /"
|
||||
}
|
||||
},
|
||||
"secretClear": "Очистить",
|
||||
"secretClearUndo": "Отменить очистку"
|
||||
},
|
||||
"xray": {
|
||||
"importRules": "Импорт правил",
|
||||
|
||||
@@ -1399,7 +1399,9 @@
|
||||
"remarkTemplateDesc": "Ayarlandığında, her abonelik bağlantısının açıklama modelinin yerini alır — değişken belirteçleriyle kendi formatınızı yazın (eklemek için düğmeyi kullanın). Yukarıdaki modeli kullanmak için boş bırakın.",
|
||||
"validation": {
|
||||
"pathLeadingSlash": "Yol / ile başlamalıdır"
|
||||
}
|
||||
},
|
||||
"secretClear": "Temizle",
|
||||
"secretClearUndo": "Temizlemeyi geri al"
|
||||
},
|
||||
"xray": {
|
||||
"title": "Xray Yapılandırmaları",
|
||||
|
||||
@@ -1399,7 +1399,9 @@
|
||||
"remarkTemplateDesc": "Якщо задано, це замінює модель примітки для кожного посилання підписки — напишіть власний формат із токенами змінних (використовуйте кнопку для їх вставлення). Залиште порожнім, щоб використовувати модель вище.",
|
||||
"validation": {
|
||||
"pathLeadingSlash": "Шлях має починатися з /"
|
||||
}
|
||||
},
|
||||
"secretClear": "Очистити",
|
||||
"secretClearUndo": "Скасувати очищення"
|
||||
},
|
||||
"xray": {
|
||||
"title": "Xray конфігурації",
|
||||
|
||||
@@ -1399,7 +1399,9 @@
|
||||
"remarkTemplateDesc": "Khi được đặt, mục này thay thế mô hình ghi chú cho mọi liên kết đăng ký — hãy viết định dạng riêng của bạn bằng các token biến (dùng nút để chèn chúng). Để trống để dùng mô hình ở trên.",
|
||||
"validation": {
|
||||
"pathLeadingSlash": "Đường dẫn phải bắt đầu bằng /"
|
||||
}
|
||||
},
|
||||
"secretClear": "Xóa",
|
||||
"secretClearUndo": "Hoàn tác xóa"
|
||||
},
|
||||
"xray": {
|
||||
"title": "Cài đặt Xray",
|
||||
|
||||
@@ -1399,7 +1399,9 @@
|
||||
"remarkTemplateDesc": "设置后,将替换每个订阅链接的备注模型 — 使用变量标记编写您自己的格式(用按钮插入它们)。留空则使用上方的模型。",
|
||||
"validation": {
|
||||
"pathLeadingSlash": "路径必须以 / 开头"
|
||||
}
|
||||
},
|
||||
"secretClear": "清除",
|
||||
"secretClearUndo": "撤销清除"
|
||||
},
|
||||
"xray": {
|
||||
"importRules": "导入规则",
|
||||
|
||||
@@ -1399,7 +1399,9 @@
|
||||
"remarkTemplateDesc": "設定後,這將取代每個訂閱連結的備註模型——使用變數標記撰寫您自己的格式(使用按鈕來插入)。留空則使用上方的模型。",
|
||||
"validation": {
|
||||
"pathLeadingSlash": "路徑必須以 / 開頭"
|
||||
}
|
||||
},
|
||||
"secretClear": "清除",
|
||||
"secretClearUndo": "復原清除"
|
||||
},
|
||||
"xray": {
|
||||
"title": "Xray 配置",
|
||||
|
||||
Reference in New Issue
Block a user