refactor: шаг 4 — GET /export вынесен в src/routes/export.js
This commit is contained in:
@@ -40,30 +40,19 @@ async function start() {
|
||||
|
||||
// ── Публичные маршруты (до auth.middleware) ──────────────────────────────────
|
||||
|
||||
// k8s liveness probe
|
||||
// k8s liveness probe — простая проверка что сервер жив
|
||||
app.get('/healthz', (req, res) => res.send('OK'));
|
||||
|
||||
// JWKS endpoint для валидации токенов внешними сервисами (только в mock-режиме)
|
||||
if (auth.jwksHandler) app.get('/.well-known/jwks.json', auth.jwksHandler);
|
||||
|
||||
// /export — агрегированный список всех активных CIDR по всем компаниям.
|
||||
// ТЗ: «авторизация не требуется, доступ ограничивается на сетевом уровне».
|
||||
// Маршрут регистрируется ДО auth.middleware чтобы не требовать jwt-cookie.
|
||||
// exportLimiter: не более 20 запросов/мин с одного IP (защита от scraping).
|
||||
app.get('/export', exportLimiter, async (req, res) => {
|
||||
try {
|
||||
// Получаем все активные CIDR без фильтра по компании
|
||||
const cidrs = await q.getExportCIDRs();
|
||||
// Суммаризация: объединяем пересекающиеся диапазоны → минимальный набор
|
||||
const aggregated = aggregateCIDRs(cidrs);
|
||||
res.setHeader('Content-Type', 'text/plain; charset=utf-8');
|
||||
res.setHeader('Content-Disposition', 'inline; filename="whitelist.txt"');
|
||||
res.send(aggregated.join('\n') + (aggregated.length ? '\n' : ''));
|
||||
} catch (e) {
|
||||
console.error('Export error:', e);
|
||||
res.status(500).send('Export error');
|
||||
}
|
||||
});
|
||||
// GET /export: агрегированный список CIDR, без авторизации.
|
||||
// src/routes/export.js содержит логику и комментарии.
|
||||
app.use(require('./src/routes/export').createRouter({
|
||||
q,
|
||||
exportLimiter,
|
||||
aggregateCIDRs,
|
||||
}));
|
||||
|
||||
// Страница входа — отдаём форму выбора мок-пользователя.
|
||||
// Генерируем CSRF-токен и передаём в шаблон для скрытого поля формы.
|
||||
|
||||
Reference in New Issue
Block a user