Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 2m37s
54 lines
1.8 KiB
JavaScript
54 lines
1.8 KiB
JavaScript
/**
|
|
* Утилиты для генерации конфигурации MikroTik
|
|
* Устраняют дублирование кода генерации конфигурации
|
|
* Поддерживает форматы: 'text' (как раньше) и 'json' (структурированные данные для API)
|
|
*/
|
|
|
|
const { buildNestedGatewayBlocks } = require('./helpers');
|
|
|
|
/**
|
|
* Генерация конфигурации MikroTik из массива фильтров
|
|
* @param {Array} filters - Массив фильтров с полями {community, gateway}
|
|
* @param {object} options - { format: 'text'|'json' }
|
|
* @returns {string|object} Сгенерированная конфигурация (строка или объект)
|
|
*/
|
|
function generateMikrotikConfig(filters, options = {}) {
|
|
const { format = 'text' } = options;
|
|
|
|
if (!Array.isArray(filters) || filters.length === 0) {
|
|
if (format === 'json') return { gatewayGroups: {}, config: null };
|
|
return '// No filters to generate configuration';
|
|
}
|
|
|
|
// Группировка фильтров по gateway
|
|
const gatewayGroups = {};
|
|
filters.forEach(filter => {
|
|
if (!gatewayGroups[filter.gateway]) {
|
|
gatewayGroups[filter.gateway] = [];
|
|
}
|
|
gatewayGroups[filter.gateway].push(filter.community);
|
|
});
|
|
|
|
if (format === 'json') {
|
|
return {
|
|
gatewayGroups,
|
|
filterName: 'bgp-in-tmp',
|
|
generatedAt: new Date().toISOString(),
|
|
};
|
|
}
|
|
|
|
let config = '// Frouting filter configuration for MikroTik 7.14+\n';
|
|
config += '// Generated automatically\n';
|
|
config += `// Date: ${new Date().toISOString()}\n\n`;
|
|
config += '/routing filter bgp-in-tmp {\n';
|
|
config += buildNestedGatewayBlocks(gatewayGroups, 4);
|
|
config += '}\n';
|
|
|
|
return config;
|
|
}
|
|
|
|
module.exports = {
|
|
generateMikrotikConfig,
|
|
};
|
|
|