diff --git a/backend/routes/mikrotikConfigRoutes.js b/backend/routes/mikrotikConfigRoutes.js index 714d1f9..ded9a56 100644 --- a/backend/routes/mikrotikConfigRoutes.js +++ b/backend/routes/mikrotikConfigRoutes.js @@ -103,6 +103,26 @@ function getMikrotikCredentials(server) { return { host, port: restPort, user, password, secure: false }; } +/** + * Учётные данные для удалённого конца (speed-test): любой сервер с host, + * пароль может быть пустым (доступ по IP без пароля). + */ +function getRemoteMikrotikCredentials(server) { + if (!server) return null; + const host = server.mikrotikHost || server.ip || server.dns; + if (!host) return null; + const user = server.mikrotikUser || 'admin'; + let password = ''; + if (server.encryptedMikrotikPassword) { + try { + password = decrypt(server.encryptedMikrotikPassword); + } catch (_) { + return null; + } + } + return { user, password }; +} + /** * POST /api/mikrotik/generate * Body: { format?, type?, serverId?, config?, servers? } @@ -941,7 +961,7 @@ async function speedTestViaTunnel(req, res) { } const localCreds = getMikrotikCredentials(localServer); - const remoteCreds = getMikrotikCredentials(remoteServer); + const remoteCreds = getRemoteMikrotikCredentials(remoteServer); if (!localCreds) { return sendError( @@ -955,7 +975,7 @@ async function speedTestViaTunnel(req, res) { return sendError( res, 400, - 'MikroTik credentials not configured for remote server', + 'Удалённый сервер не найден или не задан host (ip/dns)', 'E_REMOTE_CREDENTIALS' ); }