fix: add filter manager
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 6m5s
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 6m5s
This commit is contained in:
+40
-34
@@ -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
|
// Generate MikroTik configuration from server filters
|
||||||
app.post('/api/server-filters/generate-config', async (req, res) => {
|
app.post('/api/server-filters/generate-config', async (req, res) => {
|
||||||
|
console.log('Received generate-config request with filters:', req.body);
|
||||||
const { filters } = req.body;
|
const { filters } = req.body;
|
||||||
|
|
||||||
if (!Array.isArray(filters) || filters.length === 0) {
|
if (!Array.isArray(filters) || filters.length === 0) {
|
||||||
|
console.log('No filters provided, returning empty config');
|
||||||
return res.json({ config: '// No filters to generate configuration' });
|
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);
|
gatewayGroups[filter.gateway].push(filter.community);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
console.log('Grouped filters by gateway:', gatewayGroups);
|
||||||
|
|
||||||
let config = '// Frouting filter configuration for MikroTik 7.14+\n';
|
let config = '// Frouting filter configuration for MikroTik 7.14+\n';
|
||||||
config += '// Generated automatically\n';
|
config += '// Generated automatically\n';
|
||||||
config += `// Date: ${new Date().toISOString()}\n\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 });
|
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
|
// The "catchall" handler: for any request that doesn't
|
||||||
// match one above, send back React's index.html file.
|
// match one above, send back React's index.html file.
|
||||||
app.get('*', (req, res) => {
|
app.get('*', (req, res) => {
|
||||||
|
|||||||
@@ -136,14 +136,18 @@ function FilterManager() {
|
|||||||
|
|
||||||
const handleSaveServerConfig = async (serverId) => {
|
const handleSaveServerConfig = async (serverId) => {
|
||||||
try {
|
try {
|
||||||
|
console.log('Starting to save server config for serverId:', serverId);
|
||||||
const config = await generateMikrotikConfig();
|
const config = await generateMikrotikConfig();
|
||||||
|
|
||||||
|
console.log('Generated config:', config);
|
||||||
|
|
||||||
// Проверяем, что конфигурация не пустая
|
// Проверяем, что конфигурация не пустая
|
||||||
if (!config || config === '// Сначала выберите сервер' || config === '// Нет фильтров для генерации конфигурации') {
|
if (!config || config === '// Сначала выберите сервер' || config === '// Нет фильтров для генерации конфигурации') {
|
||||||
setError('Нет данных для сохранения конфигурации. Убедитесь, что выбран сервер и есть фильтры.');
|
setError('Нет данных для сохранения конфигурации. Убедитесь, что выбран сервер и есть фильтры.');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log('Sending config to save:', { config });
|
||||||
await axios.post(`${API_URL}/server-configs/${serverId}`, { config });
|
await axios.post(`${API_URL}/server-configs/${serverId}`, { config });
|
||||||
|
|
||||||
setSuccess(`Конфигурация для сервера "${servers.find(s => s.id === serverId)?.name}" сохранена!`);
|
setSuccess(`Конфигурация для сервера "${servers.find(s => s.id === serverId)?.name}" сохранена!`);
|
||||||
@@ -392,10 +396,15 @@ function FilterManager() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
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`, {
|
const response = await axios.post(`${API_URL}/server-filters/generate-config`, {
|
||||||
filters: serverFilters
|
filters: serverFilters
|
||||||
});
|
});
|
||||||
|
|
||||||
|
console.log('Response from generate-config:', response.data);
|
||||||
|
console.log('Response status:', response.status);
|
||||||
|
|
||||||
if (response.data && response.data.config) {
|
if (response.data && response.data.config) {
|
||||||
return response.data.config;
|
return response.data.config;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user