fix: add filter manager
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 6m5s

This commit is contained in:
2025-07-14 11:50:48 +07:00
parent 71ab7b24d3
commit d059892d7e
2 changed files with 49 additions and 34 deletions
+40 -34
View File
@@ -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) => {