diff --git a/backend/routes/mikrotikConfigRoutes.js b/backend/routes/mikrotikConfigRoutes.js index 92340fc..73f71fb 100644 --- a/backend/routes/mikrotikConfigRoutes.js +++ b/backend/routes/mikrotikConfigRoutes.js @@ -72,9 +72,9 @@ async function loadPasswordMap() { return map; } -/** Получить MikroTik credentials из сервера (jumphost) */ +/** Получить MikroTik credentials из сервера (jumphost или home — входной роутер) */ function getMikrotikCredentials(server) { - if (!server || server.type !== 'jumphost') return null; + if (!server || (server.type !== 'jumphost' && server.type !== 'home')) return null; const host = server.mikrotikHost || server.ip || server.dns; if (!host) return null; const port = server.mikrotikPort; @@ -182,8 +182,8 @@ async function testMikrotikConnection(req, res) { if (serverId) { const servers = await readServersFromS3(); const server = servers.find(s => (s.id || s.dns || s.ip) === serverId); - if (!server || server.type !== 'jumphost') { - return sendError(res, 400, 'Jumphost server not found', 'E_NOT_FOUND'); + if (!server || (server.type !== 'jumphost' && server.type !== 'home')) { + return sendError(res, 400, 'Сервер (jumphost или входной роутер) не найден', 'E_NOT_FOUND'); } creds = getMikrotikCredentials(server); if (!creds) { diff --git a/backend/routes/serversRoutes.js b/backend/routes/serversRoutes.js index 5ab6fa7..403ef4f 100644 --- a/backend/routes/serversRoutes.js +++ b/backend/routes/serversRoutes.js @@ -1,6 +1,6 @@ /** * Кастомные роуты для серверов с поддержкой зашифрованных MikroTik учётных данных - * Для jumphost: mikrotikHost, mikrotikPort, mikrotikUser, encryptedMikrotikPassword + * Для jumphost и home (входной роутер): mikrotikHost, mikrotikPort, mikrotikUser, encryptedMikrotikPassword */ const { GetObjectCommand, PutObjectCommand, HeadObjectCommand } = require('@aws-sdk/client-s3'); @@ -80,10 +80,11 @@ async function getServers(req, res) { const servers = await readServersFromS3(); const sanitized = servers.map(s => { const out = { ...s }; - if (s.type === 'jumphost' && out.encryptedMikrotikPassword) { + const hasMikrotikApi = s.type === 'jumphost' || s.type === 'home'; + if (hasMikrotikApi && out.encryptedMikrotikPassword) { out.hasMikrotikPassword = true; delete out.encryptedMikrotikPassword; - } else if (s.type === 'jumphost') { + } else if (hasMikrotikApi) { out.hasMikrotikPassword = false; } return out; @@ -121,7 +122,7 @@ async function postServers(req, res) { const toSave = items.map((srv) => { const current = findCurrent(srv); - if (srv.type === 'jumphost') { + if (srv.type === 'jumphost' || srv.type === 'home') { const out = { ...srv }; if (srv.mikrotikPassword !== undefined && srv.mikrotikPassword !== null && String(srv.mikrotikPassword).trim() !== '') { try { diff --git a/frontend/src/components/server/ServerModal.jsx b/frontend/src/components/server/ServerModal.jsx index f98465a..35b22ff 100644 --- a/frontend/src/components/server/ServerModal.jsx +++ b/frontend/src/components/server/ServerModal.jsx @@ -565,8 +565,8 @@ function ServerModal({ show, mode = 'add', server, onSave, onClose, error: exter )} - {/* MikroTik — только для jumphost */} - {localServer.type === 'jumphost' && ( + {/* MikroTik RouterOS API — для jumphost и домашних (входных) роутеров */} + {(localServer.type === 'jumphost' || localServer.type === 'home') && (