v0.5.166: /export→/v2/export редирект, экспорт только админам
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "ipwhitelist",
|
"name": "ipwhitelist",
|
||||||
"version": "0.5.164",
|
"version": "0.5.166",
|
||||||
"description": "IP WhiteList microservice for cloud provider",
|
"description": "IP WhiteList microservice for cloud provider",
|
||||||
"main": "server.js",
|
"main": "server.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ const { authLimiter } = require('./src/middleware/rateLimit');
|
|||||||
const { createSessionMiddleware } = require('./src/middleware/session');
|
const { createSessionMiddleware } = require('./src/middleware/session');
|
||||||
const { aggregateCIDRs } = require('./src/validators');
|
const { aggregateCIDRs } = require('./src/validators');
|
||||||
const { CSP_DIRECTIVES } = require('./src/middleware/csp');
|
const { CSP_DIRECTIVES } = require('./src/middleware/csp');
|
||||||
// const { createUiRouter } = require('./ui/index'); // ⛔ устарело, всё в v2
|
|
||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
const PORT = process.env.PORT || 3000;
|
const PORT = process.env.PORT || 3000;
|
||||||
@@ -102,28 +101,16 @@ async function start() {
|
|||||||
// JWKS endpoint для валидации токенов внешними сервисами (только в mock-режиме)
|
// JWKS endpoint для валидации токенов внешними сервисами (только в mock-режиме)
|
||||||
if (auth.jwksHandler) app.get('/.well-known/jwks.json', auth.jwksHandler);
|
if (auth.jwksHandler) app.get('/.well-known/jwks.json', auth.jwksHandler);
|
||||||
|
|
||||||
// ⛔ Старый /export — удалён, всё в /v2/export
|
// ── OIDC-роуты (Keycloak) ───────────────────────────────────────────────
|
||||||
// app.get('/export', async (req, res) => { ... });
|
|
||||||
|
|
||||||
// ── OIDC-роуты (Keycloak) — активны ТОЛЬКО когда KC_CLIENT_ID задан ─────
|
|
||||||
// В mock-режиме (сейчас): заглушки, работает ui/routes/auth.js
|
|
||||||
// 🔮 В проде: задать KC_CLIENT_ID + KC_CLIENT_SECRET в .env
|
|
||||||
const { createRouter: createOidcRouter } = require('./src/routes/oidc');
|
const { createRouter: createOidcRouter } = require('./src/routes/oidc');
|
||||||
app.use('/', createOidcRouter({ auth }));
|
app.use('/', createOidcRouter({ auth }));
|
||||||
|
|
||||||
// ⛔ Старый API v1 — удалён, всё в v2
|
// ── V2 — основной код ─────────────────────────────────────────────────
|
||||||
// const { createApiRouter } = require('./src/api/index');
|
|
||||||
// app.use('/api/v1', createApiRouter({ auth, q }));
|
|
||||||
|
|
||||||
// ── UI-слой: SSR через EJS, данные из /api/v1/* ───────────────────────────
|
|
||||||
// Монтируется ПОСЛЕ /api/v1/ — не перехватывает API-запросы.
|
|
||||||
// ── V2 — тестовый роутер (Keycloak → IAM → вывод) ─────────────────
|
|
||||||
// Редирект корня на V2
|
|
||||||
app.get('/', (req, res) => res.redirect('/v2/app'));
|
app.get('/', (req, res) => res.redirect('/v2/app'));
|
||||||
|
// Редирект /export → /v2/export (для обратной совместимости)
|
||||||
|
app.get('/export', (req, res) => res.redirect('/v2/export' + (req.originalUrl.includes('?') ? req.originalUrl.substring(req.originalUrl.indexOf('?')) : '')));
|
||||||
const { createV2Router } = require('./v2/server');
|
const { createV2Router } = require('./v2/server');
|
||||||
app.use('/v2', createV2Router());
|
app.use('/v2', createV2Router());
|
||||||
// ⛔ Старый UI-слой — удалён, всё в v2
|
|
||||||
// app.use('/', createUiRouter({ auth, MOCK_USERS, authLimiter }));
|
|
||||||
|
|
||||||
// ── Общий обработчик ошибок ───────────────────────────────────────────────
|
// ── Общий обработчик ошибок ───────────────────────────────────────────────
|
||||||
// eslint-disable-next-line no-unused-vars
|
// eslint-disable-next-line no-unused-vars
|
||||||
|
|||||||
@@ -45,14 +45,6 @@ const modules = [
|
|||||||
'src/validators.js',
|
'src/validators.js',
|
||||||
'src/middleware/rateLimit.js',
|
'src/middleware/rateLimit.js',
|
||||||
'src/middleware/csrf.js',
|
'src/middleware/csrf.js',
|
||||||
'src/api/index.js',
|
|
||||||
'src/api/routes/entries.js',
|
|
||||||
'src/api/routes/admin.js',
|
|
||||||
'ui/index.js',
|
|
||||||
'ui/routes/auth.js',
|
|
||||||
'ui/routes/entries.js',
|
|
||||||
'ui/routes/admin.js',
|
|
||||||
'ui/routes/export.js',
|
|
||||||
'server.js',
|
'server.js',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
+5
-2
@@ -141,9 +141,12 @@ function createV2Router() {
|
|||||||
router.use('/test', createTestRouter());
|
router.use('/test', createTestRouter());
|
||||||
}
|
}
|
||||||
|
|
||||||
// ── /v2/export — выгрузка CIDR (публичный, без авторизации) ──────
|
// ── /v2/export — выгрузка CIDR (только для админов) ─────────────
|
||||||
const { createExportRouter } = require('./src/export');
|
const { createExportRouter } = require('./src/export');
|
||||||
router.use('/export', createExportRouter());
|
router.use('/export', resolveContext, (req, res, next) => {
|
||||||
|
if (!req.canAdmin) return res.status(403).send('Доступ запрещён — только для администраторов');
|
||||||
|
next();
|
||||||
|
}, createExportRouter());
|
||||||
|
|
||||||
// ── GET /v2/logout — выход только из whitelist (без KC SSO) ─────────
|
// ── GET /v2/logout — выход только из whitelist (без KC SSO) ─────────
|
||||||
router.get('/logout', (req, res) => {
|
router.get('/logout', (req, res) => {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
// ═══════════════════════════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════════════════════════
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
version: '0.5.164',
|
version: '0.5.166',
|
||||||
|
|
||||||
// ── IAM ──────────────────────────────────────────────────────────────────
|
// ── IAM ──────────────────────────────────────────────────────────────────
|
||||||
iamUrl: process.env.V2_IAM_URL || 'https://auth-api.ngcloud.ru/api/v1/auth/user',
|
iamUrl: process.env.V2_IAM_URL || 'https://auth-api.ngcloud.ru/api/v1/auth/user',
|
||||||
|
|||||||
Reference in New Issue
Block a user