diff --git a/server.js b/server.js index a59b7ed..0b84b5f 100644 --- a/server.js +++ b/server.js @@ -76,24 +76,7 @@ async function start() { // JWKS endpoint для валидации токенов внешними сервисами (только в mock-режиме) if (auth.jwksHandler) app.get('/.well-known/jwks.json', auth.jwksHandler); - // ── ВРЕМЕННЫЙ публичный endpoint /exp (без авторизации) ────────────────── - // TODO: убрать когда /export станет публичным по ТЗ п. 4.7 - { - const { exportLimiter } = require('./src/middleware/rateLimit'); - const { aggregateCIDRs } = require('./src/validators'); - app.get('/exp', exportLimiter, async (req, res) => { - try { - const cidrs = await q.getExportCIDRs(null); // null = все компании - 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('/exp error:', e); - res.status(500).send('Export error'); - } - }); - } + app.use(require('./src/routes/exp')); // TODO: удалить (временный /exp без авторизации) // ── REST API v1 (Bearer JWT, без сессий/CSRF) ───────────────────────────── const { createApiRouter } = require('./src/api/index'); diff --git a/src/routes/exp.js b/src/routes/exp.js new file mode 100644 index 0000000..e155070 --- /dev/null +++ b/src/routes/exp.js @@ -0,0 +1,25 @@ +// ВРЕМЕННЫЙ публичный endpoint GET /exp — без авторизации, все компании. +// TODO: удалить этот файл + строку в server.js когда /export станет публичным (ТЗ п. 4.7) +'use strict'; + +const { Router } = require('express'); +const { exportLimiter } = require('../middleware/rateLimit'); +const { aggregateCIDRs } = require('../validators'); +const q = require('../queries'); + +const router = Router(); + +router.get('/exp', exportLimiter, async (req, res) => { + try { + const cidrs = await q.getExportCIDRs(null); // null = все компании + 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('/exp error:', e); + res.status(500).send('Export error'); + } +}); + +module.exports = router;