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.
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 2m5s

This commit is contained in:
2025-12-07 00:13:40 +07:00
parent 7bc5b48af7
commit cfa08dd32f
+17 -2
View File
@@ -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;