v0.5.172: удалён /debug-session, UNIQUE индекс, убраны test/dev IAM
This commit is contained in:
@@ -65,34 +65,6 @@ function createV2Router() {
|
||||
}
|
||||
});
|
||||
|
||||
// ── GET /v2/iam_response_test — IAM test стенд (только админ) ─────
|
||||
router.get('/iam_response_test', resolveContext, async (req, res) => {
|
||||
if (!req.canAdmin) return res.status(403).send('Доступ запрещён');
|
||||
const token = req.session && req.session.token;
|
||||
if (!token) return res.redirect('/v2/login');
|
||||
try {
|
||||
const raw = await iamFetch(token, config.iamApiBase + '/auth/user');
|
||||
res.set('Content-Type', 'text/html; charset=utf-8');
|
||||
res.send(rawPage('IAM TEST', raw));
|
||||
} catch (e) {
|
||||
res.send('<h2>Ошибка IAM Test</h2><pre>' + e.message + '</pre>');
|
||||
}
|
||||
});
|
||||
|
||||
// ── GET /v2/iam_response_dev — IAM dev стенд (только админ) ───────
|
||||
router.get('/iam_response_dev', resolveContext, async (req, res) => {
|
||||
if (!req.canAdmin) return res.status(403).send('Доступ запрещён');
|
||||
const token = req.session && req.session.token;
|
||||
if (!token) return res.redirect('/v2/login');
|
||||
try {
|
||||
const raw = await iamFetch(token, config.iamApiBase + '/auth/user');
|
||||
res.set('Content-Type', 'text/html; charset=utf-8');
|
||||
res.send(rawPage('IAM DEV', raw));
|
||||
} catch (e) {
|
||||
res.send('<h2>Ошибка IAM Dev</h2><pre>' + e.message + '</pre>');
|
||||
}
|
||||
});
|
||||
|
||||
// ── GET /v2/iam-gateway-test — сравнение API (только админ) ────────
|
||||
router.get('/iam-gateway-test', resolveContext, async (req, res) => {
|
||||
if (!req.canAdmin) return res.status(403).send('Доступ запрещён');
|
||||
@@ -279,8 +251,6 @@ function iamComparePage(results) {
|
||||
html += '<a href="/v2/app">CRUD</a>';
|
||||
html += '<a href="/v2/admin">Админка</a>';
|
||||
html += '<a href="/v2/iam_response">IAM PROD</a>';
|
||||
html += '<a href="/v2/iam_response_test">IAM TEST</a>';
|
||||
html += '<a href="/v2/iam_response_dev">IAM DEV</a>';
|
||||
html += '</div>';
|
||||
|
||||
for (const [name, r] of Object.entries(results)) {
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
// ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
module.exports = {
|
||||
version: '0.5.171',
|
||||
version: '0.5.172',
|
||||
|
||||
// ── IAM ──────────────────────────────────────────────────────────────────
|
||||
iamUrl: process.env.V2_IAM_URL || 'https://auth-api.ngcloud.ru/api/v1/auth/user',
|
||||
|
||||
@@ -41,6 +41,11 @@ async function ensureSchema(pool) {
|
||||
deleted_at TIMESTAMPTZ
|
||||
);
|
||||
|
||||
-- Защита от дублей: уникальный CIDR в компании среди активных записей
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS idx_whitelist_entries_active_cidr
|
||||
ON whitelist_entries(company_id, value_cidr)
|
||||
WHERE deleted_at IS NULL;
|
||||
|
||||
-- Аудит: каждое действие с возможностью отследить имперсонацию
|
||||
CREATE TABLE IF NOT EXISTS audit_log (
|
||||
id SERIAL PRIMARY KEY,
|
||||
|
||||
Reference in New Issue
Block a user