refactor(MikrotikConfigRoutes): improve address list retrieval by filtering after fetching all entries
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m54s

This commit is contained in:
2026-02-21 18:40:42 +07:00
parent f9ac5ac3a3
commit c3c30b1c75
+19 -6
View File
@@ -1171,16 +1171,29 @@ async function getAddressLists(req, res) {
const client = createRosClient(creds);
const path = 'ip/firewall/address-list';
const [ban, banCounter] = await Promise.all([
rosPrint(client, path, { list: 'ban' }),
rosPrint(client, path, { list: 'ban_counter' }),
]);
// REST API не всегда поддерживает фильтр по list — загружаем все и фильтруем по полю list
let all = await rosPrint(client, path);
if (Array.isArray(all) && all.length === 1 && all[0] && typeof all[0] === 'object' && Array.isArray(all[0].ret)) {
all = all[0].ret;
} else if (all && typeof all === 'object' && !Array.isArray(all) && Array.isArray(all.ret)) {
all = all.ret;
}
const listRaw = Array.isArray(all) ? all : [];
const getListName = (entry) => {
if (!entry || typeof entry !== 'object') return '';
const name = entry.list ?? entry.List ?? '';
return String(name).trim().toLowerCase();
};
const ban = listRaw.filter((e) => getListName(e) === 'ban');
const banCounter = listRaw.filter((e) => getListName(e) === 'ban_counter');
return sendOk(res, {
serverId,
serverLabel: server.dns || server.ip || serverId,
ban: Array.isArray(ban) ? ban : [],
ban_counter: Array.isArray(banCounter) ? banCounter : [],
ban,
ban_counter: banCounter,
});
} catch (error) {
const msg = error.response?.data?.detail || error.response?.data?.message || error.message || 'Ошибка получения address-list';