v2: userFlow action + ENABLE_TEST_API флаг — отключение без удаления кода

This commit is contained in:
2026-06-13 07:25:36 +04:00
parent fe5a7d0d37
commit 9454e9853f
4 changed files with 53 additions and 5 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "ipwhitelist",
"version": "0.5.91",
"version": "0.5.92",
"description": "IP WhiteList microservice for cloud provider",
"main": "server.js",
"scripts": {
+3 -1
View File
@@ -65,9 +65,11 @@ function createV2Router() {
// ── GET /v2/ ─────────────────────────────────────────────────────────────
router.get('/', (req, res) => res.redirect('/v2/app'));
// ── /v2/test/api — тестовый эндпоинт для CRUD
// ── /v2/test — тестовый эндпоинт (отключить: ENABLE_TEST_API=false) ──
if (process.env.ENABLE_TEST_API !== 'false') {
const { createTestRouter } = require('./src/test');
router.use('/test', createTestRouter());
}
// ── GET /v2/logout ───────────────────────────────────────────────────────
+1 -1
View File
@@ -6,7 +6,7 @@
// ═══════════════════════════════════════════════════════════════════════════════
module.exports = {
version: '0.5.91',
version: '0.5.92',
iamUrl: process.env.V2_IAM_API_URL || 'https://auth-api.ngcloud.ru',
appUrl: process.env.V2_APP_URL || 'https://whitelist.nodejsk8s.services.ngcloud.ru',
};
+46
View File
@@ -84,6 +84,52 @@ function createTestRouter() {
return res.json({ ok: true });
}
// ── USERFLOW — полная эмуляция юзера через все слои ──
case 'userFlow': {
const sub = req.query.sub; // add | edit | delete | list
const cidr = req.query.cidr || '';
const comment = req.query.comment || '';
const entryId = parseInt(req.query.id) || null;
// Мок сессии + контекст (как после KC+IAM+resolveContext)
req.session = req.session || {};
req.session.user = {
email, clientId, activeClientId: clientId,
allClientIds: [clientId], companyName: clientId,
isAdmin: user.isAdmin || false,
profiles: [{ client_id: clientId, company_name: clientId }],
fio: 'Test User'
};
req.email = email;
req.clientId = clientId;
req.companyName = clientId;
req.isAdmin = user.isAdmin || false;
req.profiles = [{ client_id: clientId, company_name: clientId }];
req.impersonatedBy = impBy;
try {
if (sub === 'add') {
const r = await crud.add(clientId, cidr, comment, email, impBy);
return res.json({ ok: true, layer: 'user→crud→db', action: 'add', entry: r.entry, wasNormalized: r.wasNormalized });
}
if (sub === 'edit' && entryId) {
const r = await crud.edit(entryId, clientId, cidr, comment, email, impBy);
return res.json({ ok: true, layer: 'user→crud→db', action: 'edit', entry: r.entry, wasNormalized: r.wasNormalized });
}
if (sub === 'delete' && entryId) {
await crud.remove(entryId, clientId, email, impBy);
return res.json({ ok: true, layer: 'user→crud→db', action: 'delete' });
}
if (sub === 'list') {
const { entries, used, limit } = await crud.list(clientId);
return res.json({ ok: true, layer: 'user→crud→db', action: 'list', entries, count: entries.length, used, limit });
}
return res.json({ ok: false, error: 'userFlow sub: add|edit|delete|list (id для edit/delete)' });
} catch (e) {
return res.json({ ok: false, layer: 'user→crud→db', error: e.message });
}
}
default:
return res.json({ ok: false, error: 'unknown action: ' + action });
}