diff --git a/backend/routes/ipsecPasswordsRoutes.js b/backend/routes/ipsecPasswordsRoutes.js index 522c8bb..cfcd5e4 100644 --- a/backend/routes/ipsecPasswordsRoutes.js +++ b/backend/routes/ipsecPasswordsRoutes.js @@ -137,7 +137,7 @@ async function createIpsecPassword(req, res) { // Сохраняем в S3 const meta = await writeS3JsonObject(S3_KEY, passwords); - // Возвращаем без расшифрованного пароля + // Возвращаем без расшифрованного пароля, но с ID res.json({ id: newPassword.id, name: newPassword.name, diff --git a/frontend/src/NetworkConfigManager.jsx b/frontend/src/NetworkConfigManager.jsx index a18cdbb..f1f007f 100644 --- a/frontend/src/NetworkConfigManager.jsx +++ b/frontend/src/NetworkConfigManager.jsx @@ -885,13 +885,16 @@ function NetworkConfigManager() { } try { + let savedPasswordId = null; if (ipsecPasswordModalMode === 'add') { - await api.post('/ipsec-passwords', { + const response = await api.post('/ipsec-passwords', { name: editingIpsecPassword.name, password: editingIpsecPassword.password, description: editingIpsecPassword.description || '' }); notify.success('IPSec пароль создан'); + // Получаем ID созданного пароля из ответа + savedPasswordId = response.data?.id || null; } else { await api.put(`/ipsec-passwords/${editingIpsecPassword.id}`, { name: editingIpsecPassword.name, @@ -899,10 +902,29 @@ function NetworkConfigManager() { description: editingIpsecPassword.description || '' }); notify.success('IPSec пароль обновлён'); + savedPasswordId = editingIpsecPassword.id; } + await fetchIpsecPasswords(); + + // Закрываем модал создания/редактирования пароля setIpsecPasswordModalOpen(false); setEditingIpsecPassword(null); + + // Если модал списка паролей открыт, закрываем его + if (ipsecPasswordsListModalOpen) { + setIpsecPasswordsListModalOpen(false); + } + + // Если создан новый пароль и открыт шаблон интерфейса, автоматически выбираем его + if (savedPasswordId && interfaceTemplateModalOpen && templateType === 'IPSec') { + setTemplateIpsecPasswordId(savedPasswordId); + } + + // Если создан новый пароль и открыт модал интерфейса с типом IPSec, автоматически выбираем его + if (savedPasswordId && interfaceModalOpen && editingInterface?.type === 'IPSec') { + setEditingInterface({ ...editingInterface, ipsecPasswordId: savedPasswordId }); + } } catch (error) { console.error('Error saving IPSec password:', error); notify.error('Не удалось сохранить пароль'); @@ -3136,55 +3158,6 @@ function NetworkConfigManager() { )} - {/* IPSec Password Modal */} - { - setIpsecPasswordModalOpen(false); - setEditingIpsecPassword(null); - }} - onSubmit={handleSaveIpsecPassword} - title={ipsecPasswordModalMode === 'add' ? 'Добавить IPSec пароль' : 'Редактировать IPSec пароль'} - submitLabel={ipsecPasswordModalMode === 'add' ? 'Создать' : 'Сохранить'} - submitIcon={ipsecPasswordModalMode === 'add' ? IconPlus : IconEdit} - > - {editingIpsecPassword && ( -
-
- setEditingIpsecPassword({ ...editingIpsecPassword, name: val })} - placeholder="Основной IPSec пароль" - required - /> -
-
- setEditingIpsecPassword({ ...editingIpsecPassword, password: val })} - placeholder="Введите пароль" - required - /> -
Пароль будет зашифрован перед сохранением в S3
-
-
- setEditingIpsecPassword({ ...editingIpsecPassword, description: val })} - placeholder="Описание использования пароля" - /> -
-
- )} -
- {/* IPSec Passwords List Modal */} {ipsecPasswordsListModalOpen && (