Files
router-lists-ui/backend/utils/mikrotikConfig.js
T

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,
};