From d059892d7e76f9b75bd0f07136e350da787f9a45 Mon Sep 17 00:00:00 2001 From: Denis Shatskiy Date: Mon, 14 Jul 2025 11:50:48 +0700 Subject: [PATCH] fix: add filter manager --- backend/server.js | 74 ++++++++++++++++++---------------- frontend/src/FilterManager.jsx | 9 +++++ 2 files changed, 49 insertions(+), 34 deletions(-) diff --git a/backend/server.js b/backend/server.js index bbdbb8d..7630cb0 100644 --- a/backend/server.js +++ b/backend/server.js @@ -684,45 +684,13 @@ app.get('/api/server-filters/:serverId', async (req, res) => { } }); -// Update server filters -app.post('/api/server-filters/:serverId', async (req, res) => { - const { serverId } = req.params; - const { filters } = req.body; - - // Validate filters structure - if (!Array.isArray(filters)) { - return res.status(400).send('Filters must be an array'); - } - - // Validate each filter has required fields - for (let i = 0; i < filters.length; i++) { - const filter = filters[i]; - if (!filter.community || !filter.gateway) { - return res.status(400).send(`Filter at index ${i} is missing required fields`); - } - } - - const params = { - Bucket: BUCKET_NAME, - Key: `server-filters-${serverId}.json`, - Body: JSON.stringify(filters, null, 2), // Pretty print JSON - ContentType: 'application/json', - }; - - try { - await s3.putObject(params).promise(); - res.send('Server filters updated successfully'); - } catch (error) { - console.error(error); - res.status(500).send('Error writing server filters to S3'); - } -}); - // Generate MikroTik configuration from server filters app.post('/api/server-filters/generate-config', async (req, res) => { + console.log('Received generate-config request with filters:', req.body); const { filters } = req.body; if (!Array.isArray(filters) || filters.length === 0) { + console.log('No filters provided, returning empty config'); return res.json({ config: '// No filters to generate configuration' }); } @@ -735,6 +703,8 @@ app.post('/api/server-filters/generate-config', async (req, res) => { gatewayGroups[filter.gateway].push(filter.community); }); + console.log('Grouped filters by gateway:', gatewayGroups); + let config = '// Frouting filter configuration for MikroTik 7.14+\n'; config += '// Generated automatically\n'; config += `// Date: ${new Date().toISOString()}\n\n`; @@ -776,9 +746,45 @@ app.post('/api/server-filters/generate-config', async (req, res) => { }); } + console.log('Generated config:', config); + console.log('Sending response:', { config }); res.json({ config }); }); +// Update server filters +app.post('/api/server-filters/:serverId', async (req, res) => { + const { serverId } = req.params; + const { filters } = req.body; + + // Validate filters structure + if (!Array.isArray(filters)) { + return res.status(400).send('Filters must be an array'); + } + + // Validate each filter has required fields + for (let i = 0; i < filters.length; i++) { + const filter = filters[i]; + if (!filter.community || !filter.gateway) { + return res.status(400).send(`Filter at index ${i} is missing required fields`); + } + } + + const params = { + Bucket: BUCKET_NAME, + Key: `server-filters-${serverId}.json`, + Body: JSON.stringify(filters, null, 2), // Pretty print JSON + ContentType: 'application/json', + }; + + try { + await s3.putObject(params).promise(); + res.send('Server filters updated successfully'); + } catch (error) { + console.error(error); + res.status(500).send('Error writing server filters to S3'); + } +}); + // The "catchall" handler: for any request that doesn't // match one above, send back React's index.html file. app.get('*', (req, res) => { diff --git a/frontend/src/FilterManager.jsx b/frontend/src/FilterManager.jsx index ca73441..4215ae0 100644 --- a/frontend/src/FilterManager.jsx +++ b/frontend/src/FilterManager.jsx @@ -136,14 +136,18 @@ function FilterManager() { const handleSaveServerConfig = async (serverId) => { try { + console.log('Starting to save server config for serverId:', serverId); const config = await generateMikrotikConfig(); + console.log('Generated config:', config); + // Проверяем, что конфигурация не пустая if (!config || config === '// Сначала выберите сервер' || config === '// Нет фильтров для генерации конфигурации') { setError('Нет данных для сохранения конфигурации. Убедитесь, что выбран сервер и есть фильтры.'); return; } + console.log('Sending config to save:', { config }); await axios.post(`${API_URL}/server-configs/${serverId}`, { config }); setSuccess(`Конфигурация для сервера "${servers.find(s => s.id === serverId)?.name}" сохранена!`); @@ -392,10 +396,15 @@ function FilterManager() { } try { + console.log('Sending filters to generate config:', serverFilters); + console.log('Making request to:', `${API_URL}/server-filters/generate-config`); const response = await axios.post(`${API_URL}/server-filters/generate-config`, { filters: serverFilters }); + console.log('Response from generate-config:', response.data); + console.log('Response status:', response.status); + if (response.data && response.data.config) { return response.data.config; } else {