refactor(MikrotikConfig): extend MikroTik credentials handling to support home routers and update related error messages for improved clarity
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m40s
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m40s
This commit is contained in:
@@ -72,9 +72,9 @@ async function loadPasswordMap() {
|
|||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Получить MikroTik credentials из сервера (jumphost) */
|
/** Получить MikroTik credentials из сервера (jumphost или home — входной роутер) */
|
||||||
function getMikrotikCredentials(server) {
|
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;
|
const host = server.mikrotikHost || server.ip || server.dns;
|
||||||
if (!host) return null;
|
if (!host) return null;
|
||||||
const port = server.mikrotikPort;
|
const port = server.mikrotikPort;
|
||||||
@@ -182,8 +182,8 @@ async function testMikrotikConnection(req, res) {
|
|||||||
if (serverId) {
|
if (serverId) {
|
||||||
const servers = await readServersFromS3();
|
const servers = await readServersFromS3();
|
||||||
const server = servers.find(s => (s.id || s.dns || s.ip) === serverId);
|
const server = servers.find(s => (s.id || s.dns || s.ip) === serverId);
|
||||||
if (!server || server.type !== 'jumphost') {
|
if (!server || (server.type !== 'jumphost' && server.type !== 'home')) {
|
||||||
return sendError(res, 400, 'Jumphost server not found', 'E_NOT_FOUND');
|
return sendError(res, 400, 'Сервер (jumphost или входной роутер) не найден', 'E_NOT_FOUND');
|
||||||
}
|
}
|
||||||
creds = getMikrotikCredentials(server);
|
creds = getMikrotikCredentials(server);
|
||||||
if (!creds) {
|
if (!creds) {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Кастомные роуты для серверов с поддержкой зашифрованных MikroTik учётных данных
|
* Кастомные роуты для серверов с поддержкой зашифрованных MikroTik учётных данных
|
||||||
* Для jumphost: mikrotikHost, mikrotikPort, mikrotikUser, encryptedMikrotikPassword
|
* Для jumphost и home (входной роутер): mikrotikHost, mikrotikPort, mikrotikUser, encryptedMikrotikPassword
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const { GetObjectCommand, PutObjectCommand, HeadObjectCommand } = require('@aws-sdk/client-s3');
|
const { GetObjectCommand, PutObjectCommand, HeadObjectCommand } = require('@aws-sdk/client-s3');
|
||||||
@@ -80,10 +80,11 @@ async function getServers(req, res) {
|
|||||||
const servers = await readServersFromS3();
|
const servers = await readServersFromS3();
|
||||||
const sanitized = servers.map(s => {
|
const sanitized = servers.map(s => {
|
||||||
const out = { ...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;
|
out.hasMikrotikPassword = true;
|
||||||
delete out.encryptedMikrotikPassword;
|
delete out.encryptedMikrotikPassword;
|
||||||
} else if (s.type === 'jumphost') {
|
} else if (hasMikrotikApi) {
|
||||||
out.hasMikrotikPassword = false;
|
out.hasMikrotikPassword = false;
|
||||||
}
|
}
|
||||||
return out;
|
return out;
|
||||||
@@ -121,7 +122,7 @@ async function postServers(req, res) {
|
|||||||
const toSave = items.map((srv) => {
|
const toSave = items.map((srv) => {
|
||||||
const current = findCurrent(srv);
|
const current = findCurrent(srv);
|
||||||
|
|
||||||
if (srv.type === 'jumphost') {
|
if (srv.type === 'jumphost' || srv.type === 'home') {
|
||||||
const out = { ...srv };
|
const out = { ...srv };
|
||||||
if (srv.mikrotikPassword !== undefined && srv.mikrotikPassword !== null && String(srv.mikrotikPassword).trim() !== '') {
|
if (srv.mikrotikPassword !== undefined && srv.mikrotikPassword !== null && String(srv.mikrotikPassword).trim() !== '') {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -565,8 +565,8 @@ function ServerModal({ show, mode = 'add', server, onSave, onClose, error: exter
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* MikroTik — только для jumphost */}
|
{/* MikroTik RouterOS API — для jumphost и домашних (входных) роутеров */}
|
||||||
{localServer.type === 'jumphost' && (
|
{(localServer.type === 'jumphost' || localServer.type === 'home') && (
|
||||||
<div className="mt-4 pt-3 border-top">
|
<div className="mt-4 pt-3 border-top">
|
||||||
<label className="form-label d-flex align-items-center gap-2">
|
<label className="form-label d-flex align-items-center gap-2">
|
||||||
<IconRouter size={18} />
|
<IconRouter size={18} />
|
||||||
|
|||||||
Reference in New Issue
Block a user