From cfa08dd32f374134f692bdf4984a7e5e46664be5 Mon Sep 17 00:00:00 2001 From: shats Date: Sun, 7 Dec 2025 00:13:40 +0700 Subject: [PATCH] feat: Improve gateway handling in ServerManager by enforcing validation for jumphost and exit server types, ensuring at least one primary gateway is specified during server addition and updates. --- frontend/src/ServerManager.jsx | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/frontend/src/ServerManager.jsx b/frontend/src/ServerManager.jsx index ec8e44b..a85df52 100644 --- a/frontend/src/ServerManager.jsx +++ b/frontend/src/ServerManager.jsx @@ -223,7 +223,8 @@ function ServerManager() { provider: '', tunnel: 'GRE', type: 'jumphost', - gateway: '' + gateway: '', + gateways: [makeGateway({ primary: true })], }); }; @@ -244,7 +245,8 @@ function ServerManager() { provider: '', tunnel: 'GRE', type: 'jumphost', - gateway: '' + gateway: '', + gateways: [makeGateway({ primary: true })], }); setCustomProvider(''); setError(''); @@ -277,11 +279,20 @@ function ServerManager() { // Используем customProvider если выбран "Другой" const finalProvider = newServer.provider === 'Другой' ? customProvider : newServer.provider; const nextId = `srv-${servers.length + 1}`; + const normalizedGws = NEEDS_GATEWAYS(newServer.type) + ? normalizeGateways(newServer.gateways, newServer.gateway || newServer.dns || newServer.ip) + : []; + if (NEEDS_GATEWAYS(newServer.type) && (!normalizedGws || normalizedGws.length === 0)) { + setError('Для jumphost/exit добавьте хотя бы один gateway и отметьте основной.'); + return; + } + const serverToAdd = { ...newServer, provider: finalProvider, id: newServer.id || nextId, type: normalizeServerType(newServer.type), + gateways: normalizedGws, }; setServers([...servers, serverToAdd]); @@ -319,6 +330,10 @@ function ServerManager() { type: normalizeServerType(updatedServer.type), gateways: NEEDS_GATEWAYS(updatedServer.type) ? normalizeGateways(updatedServer.gateways, updatedServer.gateway || updatedServer.dns || updatedServer.ip) : [], }; + if (NEEDS_GATEWAYS(normalizedServer.type) && normalizedServer.gateways.length === 0) { + setError('Для jumphost/exit необходим хотя бы один gateway с признаком основного.'); + return; + } setServers(servers.map(s => { const sameId = s.id && updatedServer.id ? s.id === updatedServer.id : false; const sameIp = s.ip === updatedServer.ip;