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;