feat(NetworkConfigManager): normalize interface names and descriptions to uppercase for consistency; enhance data handling during interface creation and updates
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m39s
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m39s
This commit is contained in:
@@ -415,9 +415,10 @@ function NetworkConfigManager() {
|
||||
return;
|
||||
}
|
||||
|
||||
// Очищаем пустые parentGateways и удаляем старое поле parentGatewayId
|
||||
// Преобразуем description в верхний регистр
|
||||
const cleanedData = {
|
||||
...gatewayData,
|
||||
description: gatewayData.description ? gatewayData.description.toUpperCase() : '',
|
||||
parentGateways: gatewayData.type === 'recursive'
|
||||
? (gatewayData.parentGateways || []).filter(p => p && p.id)
|
||||
: [],
|
||||
@@ -505,7 +506,7 @@ function NetworkConfigManager() {
|
||||
}
|
||||
|
||||
const prefixPart = prefix ? `${prefix}-` : '';
|
||||
return `${prefixPart}${name}`;
|
||||
return `${prefixPart}${name}`.toUpperCase();
|
||||
};
|
||||
|
||||
// === Создание интерфейса из шаблона ===
|
||||
@@ -551,8 +552,8 @@ function NetworkConfigManager() {
|
||||
// Генерируем имена интерфейсов
|
||||
const baseName1 = generateInterfaceName(server1, server2, templateType, templateNamePrefix);
|
||||
const baseName2 = generateInterfaceName(server2, server1, templateType, templateNamePrefix);
|
||||
const name1 = pair.name1?.trim() || baseName1;
|
||||
const name2 = pair.name2?.trim() || baseName2;
|
||||
const name1 = (pair.name1?.trim() || baseName1).toUpperCase();
|
||||
const name2 = (pair.name2?.trim() || baseName2).toUpperCase();
|
||||
|
||||
// Используем настройки из пары или глобальные
|
||||
const pairIpsecPasswordId = pair.ipsecPasswordId || templateIpsecPasswordId;
|
||||
@@ -657,8 +658,8 @@ function NetworkConfigManager() {
|
||||
}
|
||||
|
||||
// Генерируем имена интерфейсов (используем опциональные имена если указаны)
|
||||
const name1 = templateName1.trim() || generateInterfaceName(server1, server2, templateType, templateNamePrefix);
|
||||
const name2 = templateName2.trim() || generateInterfaceName(server2, server1, templateType, templateNamePrefix);
|
||||
const name1 = (templateName1.trim() || generateInterfaceName(server1, server2, templateType, templateNamePrefix)).toUpperCase();
|
||||
const name2 = (templateName2.trim() || generateInterfaceName(server2, server1, templateType, templateNamePrefix)).toUpperCase();
|
||||
|
||||
// Генерируем IP адреса
|
||||
const localIp = generateFreePrivateIp(null, false, null, templateIpPoolId || null);
|
||||
@@ -1116,10 +1117,17 @@ function NetworkConfigManager() {
|
||||
}, [ipRegistry, ipRegistrySearch]);
|
||||
|
||||
const handleSaveInterface = (ifaceData) => {
|
||||
// Преобразуем имена интерфейсов в верхний регистр
|
||||
const normalizedData = {
|
||||
...ifaceData,
|
||||
name: ifaceData.name ? ifaceData.name.toUpperCase() : '',
|
||||
name2: ifaceData.name2 ? ifaceData.name2.toUpperCase() : '',
|
||||
};
|
||||
|
||||
// Валидация: проверка пересечений IP адресов
|
||||
const conflicts = checkInterfaceIpConflict(
|
||||
ifaceData,
|
||||
interfaceModalMode === 'edit' ? ifaceData.id : null
|
||||
normalizedData,
|
||||
interfaceModalMode === 'edit' ? normalizedData.id : null
|
||||
);
|
||||
|
||||
if (conflicts.length > 0) {
|
||||
@@ -1134,13 +1142,13 @@ function NetworkConfigManager() {
|
||||
if (interfaceModalMode === 'add') {
|
||||
setConfig(prev => ({
|
||||
...prev,
|
||||
tunnelInterfaces: [...prev.tunnelInterfaces, ifaceData],
|
||||
tunnelInterfaces: [...prev.tunnelInterfaces, normalizedData],
|
||||
}));
|
||||
notify.success('Интерфейс добавлен');
|
||||
} else {
|
||||
setConfig(prev => ({
|
||||
...prev,
|
||||
tunnelInterfaces: prev.tunnelInterfaces.map(i => i.id === ifaceData.id ? ifaceData : i),
|
||||
tunnelInterfaces: prev.tunnelInterfaces.map(i => i.id === normalizedData.id ? normalizedData : i),
|
||||
}));
|
||||
notify.success('Интерфейс обновлён');
|
||||
}
|
||||
@@ -3643,8 +3651,8 @@ function NetworkConfigManager() {
|
||||
|
||||
const autoName1 = generateInterfaceName(server1, server2, templateType, templateNamePrefix);
|
||||
const autoName2 = generateInterfaceName(server2, server1, templateType, templateNamePrefix);
|
||||
const previewName1 = templateName1.trim() || autoName1;
|
||||
const previewName2 = templateName2.trim() || autoName2;
|
||||
const previewName1 = (templateName1.trim() || autoName1).toUpperCase();
|
||||
const previewName2 = (templateName2.trim() || autoName2).toUpperCase();
|
||||
const previewLocalIp = generateFreePrivateIp(null, false, null, templateIpPoolId || null);
|
||||
const previewRemoteIp = previewLocalIp ? generateFreePrivateIp(null, true, previewLocalIp, templateIpPoolId || null) : null;
|
||||
|
||||
@@ -3701,8 +3709,8 @@ function NetworkConfigManager() {
|
||||
|
||||
const baseName1 = generateInterfaceName(server1, server2, templateType, templateNamePrefix);
|
||||
const baseName2 = generateInterfaceName(server2, server1, templateType, templateNamePrefix);
|
||||
const previewName1 = pair.name1?.trim() || baseName1;
|
||||
const previewName2 = pair.name2?.trim() || baseName2;
|
||||
const previewName1 = (pair.name1?.trim() || baseName1).toUpperCase();
|
||||
const previewName2 = (pair.name2?.trim() || baseName2).toUpperCase();
|
||||
|
||||
// Используем настройки из пары или глобальные для предпросмотра
|
||||
const pairIpPoolId = pair.ipPoolId || templateIpPoolId;
|
||||
|
||||
Reference in New Issue
Block a user