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
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m54s
This commit is contained in:
@@ -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';
|
||||
|
||||
Reference in New Issue
Block a user