Quellcode durchsuchen

fix(clients): hide WireGuard config after detaching the WG inbound

The client info and QR modals rendered a WireGuard config whenever the
client still carried leftover WG key material (privateKey / publicKey /
allowedIPs / preSharedKey / keepAlive), regardless of whether a WireGuard
inbound was actually attached. After detaching the WG inbound the config
kept showing, built with an empty endpoint port and public key.

Gate wgConfigText on an attached WireGuard inbound (wgInbound) being
present, not just isWireguardClient(client), in both ClientInfoModal and
ClientQrModal.

Also rename the i18n key pages.clients.conf -> config and add the missing
pages.clients keys (wireguardConfig, config, bulkFlow, bulkFlowNoChange,
bulkFlowDisable) to all 12 non-English locales so each one matches en-US.
MHSanaei vor 7 Stunden
Ursprung
Commit
6c71b725da

+ 2 - 2
frontend/src/pages/clients/ClientInfoModal.tsx

@@ -138,7 +138,7 @@ export default function ClientInfoModal({
   const showSubscription = !!(subSettings?.enable && client?.subId);
   const wgInbound = useMemo(() => findWireguardInbound(client, inboundsById), [client, inboundsById]);
   const wgConfigText = useMemo(() => {
-    if (!client || !isWireguardClient(client)) return '';
+    if (!client || !wgInbound || !isWireguardClient(client)) return '';
     return buildWireguardClientConfig(client, wgInbound, window.location.hostname, subSettings?.publicHost ?? '');
   }, [client, wgInbound, subSettings?.publicHost]);
 
@@ -494,7 +494,7 @@ export default function ClientInfoModal({
               <>
                 <Divider>{t('pages.clients.wireguardConfig')}</Divider>
                 <ConfigBlock
-                  label={t('pages.clients.conf')}
+                  label={t('pages.clients.config')}
                   text={wgConfigText}
                   fileName={`${client.email}.conf`}
                   qrRemark={client.email || 'peer'}

+ 1 - 1
frontend/src/pages/clients/ClientQrModal.tsx

@@ -55,7 +55,7 @@ export default function ClientQrModal({
 
   const wgInbound = useMemo(() => findWireguardInbound(client, inboundsById), [client, inboundsById]);
   const wgConfigText = useMemo(() => {
-    if (!client || !isWireguardClient(client)) return '';
+    if (!client || !wgInbound || !isWireguardClient(client)) return '';
     return buildWireguardClientConfig(client, wgInbound, window.location.hostname, subSettings?.publicHost ?? '');
   }, [client, wgInbound, subSettings?.publicHost]);
 

+ 5 - 0
internal/web/translation/ar-EG.json

@@ -718,6 +718,8 @@
       "tabBasics": "أساسي",
       "tabCredentials": "بيانات الاعتماد",
       "tabLinks": "الروابط",
+      "wireguardConfig": "إعدادات WireGuard",
+      "config": "الإعداد",
       "linksHint": "أضف روابط مشاركة من جهات خارجية وعناوين اشتراك خارجية لتضمينها في اشتراك هذا العميل.",
       "addExternalLink": "إضافة رابط خارجي",
       "addExternalSubscription": "إضافة اشتراك خارجي",
@@ -871,6 +873,9 @@
       "bulkAdjustNothing": "حدد الأيام أو الترافيك قبل التطبيق.",
       "addDays": "إضافة أيام",
       "addTrafficGB": "إضافة ترافيك (GB)",
+      "bulkFlow": "تعيين التدفق",
+      "bulkFlowNoChange": "بدون تغيير",
+      "bulkFlowDisable": "تعطيل (مسح التدفق)",
       "delDepleted": "حذف المنتهية",
       "delDepletedConfirmTitle": "حذف العملاء المنتهية حصصهم؟",
       "delDepletedConfirmContent": "يُحذف كل عميل استُنفِدت حصة حركة مروره أو انتهت صلاحيته. لا يمكن التراجع.",

+ 1 - 1
internal/web/translation/en-US.json

@@ -719,7 +719,7 @@
       "tabCredentials": "Credentials",
       "tabLinks": "Links",
       "wireguardConfig": "WireGuard config",
-      "conf": "CONF",
+      "config": "Config",
       "linksHint": "Add third-party share links and remote subscription URLs to include in this client's subscription.",
       "addExternalLink": "Add External Link",
       "addExternalSubscription": "Add External Subscription",

+ 5 - 0
internal/web/translation/es-ES.json

@@ -718,6 +718,8 @@
       "tabBasics": "Básico",
       "tabCredentials": "Credenciales",
       "tabLinks": "Enlaces",
+      "wireguardConfig": "Configuración de WireGuard",
+      "config": "Configuración",
       "linksHint": "Añade enlaces de terceros y URLs de suscripción remotas para incluirlos en la suscripción de este cliente.",
       "addExternalLink": "Añadir enlace externo",
       "addExternalSubscription": "Añadir suscripción externa",
@@ -871,6 +873,9 @@
       "bulkAdjustNothing": "Establece días o tráfico antes de aplicar.",
       "addDays": "Añadir días",
       "addTrafficGB": "Añadir tráfico (GB)",
+      "bulkFlow": "Establecer flow",
+      "bulkFlowNoChange": "Sin cambios",
+      "bulkFlowDisable": "Desactivar (borrar flow)",
       "delDepleted": "Eliminar agotados",
       "delDepletedConfirmTitle": "¿Eliminar clientes agotados?",
       "delDepletedConfirmContent": "Elimina todos los clientes con cuota agotada o expirados. No se puede deshacer.",

+ 5 - 0
internal/web/translation/fa-IR.json

@@ -718,6 +718,8 @@
       "tabBasics": "پایه",
       "tabCredentials": "اطلاعات اتصال",
       "tabLinks": "لینک‌ها",
+      "wireguardConfig": "پیکربندی WireGuard",
+      "config": "پیکربندی",
       "linksHint": "لینک‌های اشتراک شخص‌ثالث و آدرس سابسکریپشن‌های خارجی را اضافه کنید تا در سابسکریپشن این کاربر قرار گیرند.",
       "addExternalLink": "افزودن لینک خارجی",
       "addExternalSubscription": "افزودن سابسکریپشن خارجی",
@@ -871,6 +873,9 @@
       "bulkAdjustNothing": "قبل از اعمال، روز یا ترافیک را تنظیم کنید.",
       "addDays": "افزودن روز",
       "addTrafficGB": "افزودن ترافیک (گیگابایت)",
+      "bulkFlow": "تنظیم flow",
+      "bulkFlowNoChange": "بدون تغییر",
+      "bulkFlowDisable": "غیرفعال (پاک کردن flow)",
       "delDepleted": "حذف اتمام‌یافته‌ها",
       "delDepletedConfirmTitle": "حذف کلاینت‌های اتمام‌یافته؟",
       "delDepletedConfirmContent": "هر کلاینتی که سهمیه ترافیک‌اش تمام شده یا تاریخ انقضایش گذشته است حذف می‌شود. این عمل غیرقابل بازگشت است.",

+ 5 - 0
internal/web/translation/id-ID.json

@@ -718,6 +718,8 @@
       "tabBasics": "Dasar",
       "tabCredentials": "Kredensial",
       "tabLinks": "Tautan",
+      "wireguardConfig": "Konfigurasi WireGuard",
+      "config": "Konfigurasi",
       "linksHint": "Tambahkan tautan berbagi pihak ketiga dan URL langganan jarak jauh untuk disertakan dalam langganan klien ini.",
       "addExternalLink": "Tambah Tautan Eksternal",
       "addExternalSubscription": "Tambah Langganan Eksternal",
@@ -871,6 +873,9 @@
       "bulkAdjustNothing": "Setel hari atau trafik sebelum menerapkan.",
       "addDays": "Tambah hari",
       "addTrafficGB": "Tambah trafik (GB)",
+      "bulkFlow": "Atur flow",
+      "bulkFlowNoChange": "Tanpa perubahan",
+      "bulkFlowDisable": "Nonaktifkan (hapus flow)",
       "delDepleted": "Hapus yang habis",
       "delDepletedConfirmTitle": "Hapus klien yang habis?",
       "delDepletedConfirmContent": "Hapus setiap klien yang kuota lalu lintasnya habis atau yang masa berlakunya telah berakhir. Tidak dapat dibatalkan.",

+ 5 - 0
internal/web/translation/ja-JP.json

@@ -718,6 +718,8 @@
       "tabBasics": "基本",
       "tabCredentials": "認証情報",
       "tabLinks": "リンク",
+      "wireguardConfig": "WireGuard 設定",
+      "config": "設定",
       "linksHint": "サードパーティの共有リンクやリモートのサブスクリプションURLを追加して、このクライアントのサブスクリプションに含めます。",
       "addExternalLink": "外部リンクを追加",
       "addExternalSubscription": "外部サブスクリプションを追加",
@@ -871,6 +873,9 @@
       "bulkAdjustNothing": "適用する前に日数またはトラフィックを設定してください。",
       "addDays": "日数を追加",
       "addTrafficGB": "トラフィックを追加 (GB)",
+      "bulkFlow": "Flow を設定",
+      "bulkFlowNoChange": "変更なし",
+      "bulkFlowDisable": "無効化 (flow をクリア)",
       "delDepleted": "使い切ったクライアントを削除",
       "delDepletedConfirmTitle": "使い切ったクライアントを削除しますか?",
       "delDepletedConfirmContent": "トラフィック上限に達したか有効期限が切れたクライアントをすべて削除します。元に戻せません。",

+ 5 - 0
internal/web/translation/pt-BR.json

@@ -718,6 +718,8 @@
       "tabBasics": "Básico",
       "tabCredentials": "Credenciais",
       "tabLinks": "Links",
+      "wireguardConfig": "Configuração do WireGuard",
+      "config": "Configuração",
       "linksHint": "Adicione links de terceiros e URLs de assinatura remotas para incluir na assinatura deste cliente.",
       "addExternalLink": "Adicionar link externo",
       "addExternalSubscription": "Adicionar assinatura externa",
@@ -871,6 +873,9 @@
       "bulkAdjustNothing": "Defina dias ou tráfego antes de aplicar.",
       "addDays": "Adicionar dias",
       "addTrafficGB": "Adicionar tráfego (GB)",
+      "bulkFlow": "Definir flow",
+      "bulkFlowNoChange": "Sem alteração",
+      "bulkFlowDisable": "Desativar (limpar flow)",
       "delDepleted": "Excluir esgotados",
       "delDepletedConfirmTitle": "Excluir clientes esgotados?",
       "delDepletedConfirmContent": "Remove todos os clientes cuja cota de tráfego foi esgotada ou cuja expiração já passou. Não é possível desfazer.",

+ 5 - 0
internal/web/translation/ru-RU.json

@@ -718,6 +718,8 @@
       "tabBasics": "Основные",
       "tabCredentials": "Учетные данные",
       "tabLinks": "Ссылки",
+      "wireguardConfig": "Конфигурация WireGuard",
+      "config": "Конфигурация",
       "linksHint": "Добавьте сторонние ссылки и URL удалённых подписок, чтобы включить их в подписку этого клиента.",
       "addExternalLink": "Добавить внешнюю ссылку",
       "addExternalSubscription": "Добавить внешнюю подписку",
@@ -871,6 +873,9 @@
       "bulkAdjustNothing": "Укажите дни или трафик перед применением.",
       "addDays": "Добавить дни",
       "addTrafficGB": "Добавить трафик (ГБ)",
+      "bulkFlow": "Задать flow",
+      "bulkFlowNoChange": "Без изменений",
+      "bulkFlowDisable": "Отключить (очистить flow)",
       "delDepleted": "Удалить исчерпанных",
       "delDepletedConfirmTitle": "Удалить исчерпанных клиентов?",
       "delDepletedConfirmContent": "Удаляются все клиенты, у которых исчерпана квота трафика или истёк срок. Это действие нельзя отменить.",

+ 5 - 0
internal/web/translation/tr-TR.json

@@ -718,6 +718,8 @@
       "tabBasics": "Temel",
       "tabCredentials": "Kimlik Bilgileri",
       "tabLinks": "Bağlantılar",
+      "wireguardConfig": "WireGuard yapılandırması",
+      "config": "Yapılandırma",
       "linksHint": "Bu istemcinin aboneliğine dahil etmek için üçüncü taraf paylaşım bağlantıları ve uzak abonelik URL'leri ekleyin.",
       "addExternalLink": "Harici Bağlantı Ekle",
       "addExternalSubscription": "Harici Abonelik Ekle",
@@ -871,6 +873,9 @@
       "bulkAdjustNothing": "Uygulamadan önce gün veya trafik belirleyin.",
       "addDays": "Gün Ekle",
       "addTrafficGB": "Trafik Ekle (GB)",
+      "bulkFlow": "Flow ayarla",
+      "bulkFlowNoChange": "Değişiklik yok",
+      "bulkFlowDisable": "Devre dışı bırak (flow temizle)",
       "delDepleted": "Süresi/Kotası Bitenleri Sil",
       "delDepletedConfirmTitle": "Tükenmiş Kullanıcılar Silinsin Mi?",
       "delDepletedConfirmContent": "Trafik kotası dolan veya süresi geçen tüm kullanıcılar silinir. Geri alınamaz.",

+ 5 - 0
internal/web/translation/uk-UA.json

@@ -718,6 +718,8 @@
       "tabBasics": "Основні",
       "tabCredentials": "Облікові дані",
       "tabLinks": "Посилання",
+      "wireguardConfig": "Конфігурація WireGuard",
+      "config": "Конфігурація",
       "linksHint": "Додайте сторонні посилання та URL віддалених підписок, щоб включити їх до підписки цього клієнта.",
       "addExternalLink": "Додати зовнішнє посилання",
       "addExternalSubscription": "Додати зовнішню підписку",
@@ -871,6 +873,9 @@
       "bulkAdjustNothing": "Вкажіть дні або трафік перед застосуванням.",
       "addDays": "Додати дні",
       "addTrafficGB": "Додати трафік (ГБ)",
+      "bulkFlow": "Задати flow",
+      "bulkFlowNoChange": "Без змін",
+      "bulkFlowDisable": "Вимкнути (очистити flow)",
       "delDepleted": "Видалити вичерпаних",
       "delDepletedConfirmTitle": "Видалити вичерпаних клієнтів?",
       "delDepletedConfirmContent": "Видаляються всі клієнти, у яких вичерпана квота трафіку або сплив термін. Цю дію неможливо скасувати.",

+ 5 - 0
internal/web/translation/vi-VN.json

@@ -718,6 +718,8 @@
       "tabBasics": "Cơ bản",
       "tabCredentials": "Thông tin xác thực",
       "tabLinks": "Liên kết",
+      "wireguardConfig": "Cấu hình WireGuard",
+      "config": "Cấu hình",
       "linksHint": "Thêm liên kết chia sẻ của bên thứ ba và URL đăng ký từ xa để đưa vào đăng ký của khách hàng này.",
       "addExternalLink": "Thêm liên kết ngoài",
       "addExternalSubscription": "Thêm đăng ký ngoài",
@@ -871,6 +873,9 @@
       "bulkAdjustNothing": "Đặt số ngày hoặc lưu lượng trước khi áp dụng.",
       "addDays": "Thêm ngày",
       "addTrafficGB": "Thêm lưu lượng (GB)",
+      "bulkFlow": "Đặt flow",
+      "bulkFlowNoChange": "Không thay đổi",
+      "bulkFlowDisable": "Tắt (xóa flow)",
       "delDepleted": "Xóa hết hạn mức",
       "delDepletedConfirmTitle": "Xóa khách hàng hết hạn mức?",
       "delDepletedConfirmContent": "Gỡ tất cả khách hàng đã dùng hết hạn mức lưu lượng hoặc đã quá hạn. Không thể hoàn tác.",

+ 5 - 0
internal/web/translation/zh-CN.json

@@ -718,6 +718,8 @@
       "tabBasics": "基本",
       "tabCredentials": "凭据",
       "tabLinks": "链接",
+      "wireguardConfig": "WireGuard 配置",
+      "config": "配置",
       "linksHint": "添加第三方分享链接和远程订阅地址,将其包含在该客户端的订阅中。",
       "addExternalLink": "添加外部链接",
       "addExternalSubscription": "添加外部订阅",
@@ -871,6 +873,9 @@
       "bulkAdjustNothing": "应用前请设置天数或流量。",
       "addDays": "添加天数",
       "addTrafficGB": "添加流量 (GB)",
+      "bulkFlow": "设置 flow",
+      "bulkFlowNoChange": "不更改",
+      "bulkFlowDisable": "禁用(清除 flow)",
       "delDepleted": "删除已耗尽",
       "delDepletedConfirmTitle": "删除已耗尽的客户端?",
       "delDepletedConfirmContent": "删除所有流量配额已用尽或已过期的客户端。该操作不可撤销。",

+ 5 - 0
internal/web/translation/zh-TW.json

@@ -718,6 +718,8 @@
       "tabBasics": "基本",
       "tabCredentials": "認證資訊",
       "tabLinks": "連結",
+      "wireguardConfig": "WireGuard 設定",
+      "config": "設定",
       "linksHint": "新增第三方分享連結和遠端訂閱網址,將其包含在此用戶端的訂閱中。",
       "addExternalLink": "新增外部連結",
       "addExternalSubscription": "新增外部訂閱",
@@ -871,6 +873,9 @@
       "bulkAdjustNothing": "套用前請設定天數或流量。",
       "addDays": "新增天數",
       "addTrafficGB": "新增流量 (GB)",
+      "bulkFlow": "設定 flow",
+      "bulkFlowNoChange": "不變更",
+      "bulkFlowDisable": "停用(清除 flow)",
       "delDepleted": "刪除已耗盡",
       "delDepletedConfirmTitle": "刪除已耗盡的客戶端?",
       "delDepletedConfirmContent": "刪除所有流量配額已用盡或已過期的客戶端。此操作無法復原。",