From e68e1a483c68a2a366f3c816570c8e71c8cb858b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Tue, 16 Jun 2026 13:50:05 +0400 Subject: [PATCH] v0.5.146: /iam_response_test, /iam_response_dev --- package.json | 2 +- v2/server.js | 65 ++++++++++++++++++++++++++++++++++++------ v2/src/config/index.js | 2 +- 3 files changed, 59 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 981a845..471b91f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ipwhitelist", - "version": "0.5.145", + "version": "0.5.146", "description": "IP WhiteList microservice for cloud provider", "main": "server.js", "scripts": { diff --git a/v2/server.js b/v2/server.js index 4d70723..48e38af 100644 --- a/v2/server.js +++ b/v2/server.js @@ -58,19 +58,38 @@ function createV2Router() { const mainAuth = require('../src/auth'); const iamData = await mainAuth.fetchIamUser(token); res.set('Content-Type', 'text/html; charset=utf-8'); - res.send('\nIAM Raw' - + '' - + '

Сырой ответ IAM

' - + '
' + JSON.stringify(iamData.raw, null, 2).replace(/'
-        + '

← Сессия | CRUD

' - + ''); + res.send(rawPage('IAM PROD', iamData.raw)); } catch (e) { res.send('

Ошибка IAM

' + e.message + '
'); } }); + // ── GET /v2/iam_response_test — IAM test стенд ────────────────────── + router.get('/iam_response_test', async (req, res) => { + const token = req.session && req.session.token; + if (!token) return res.send('

Нет токена

Войти

'); + try { + const raw = await iamFetch(token, 'https://auth-api-test.ngcloud.ru/api/v1/auth/user'); + res.set('Content-Type', 'text/html; charset=utf-8'); + res.send(rawPage('IAM TEST', raw)); + } catch (e) { + res.send('

Ошибка IAM Test

' + e.message + '
'); + } + }); + + // ── GET /v2/iam_response_dev — IAM dev стенд ──────────────────────── + router.get('/iam_response_dev', async (req, res) => { + const token = req.session && req.session.token; + if (!token) return res.send('

Нет токена

Войти

'); + try { + const raw = await iamFetch(token, 'https://auth-api-dev.ngcloud.ru/api/v1/auth/user'); + res.set('Content-Type', 'text/html; charset=utf-8'); + res.send(rawPage('IAM DEV', raw)); + } catch (e) { + res.send('

Ошибка IAM Dev

' + e.message + '
'); + } + }); + // ── /v2/app — пользовательский CRUD (только с сессией) ────────────── router.use('/app', enhanceImpersonation, resolveContext, createUserRouter()); @@ -97,6 +116,36 @@ function createV2Router() { return router; } +// ── Хелпер: HTTP-запрос к IAM ──────────────────────────────────────────────── +async function iamFetch(token, url) { + const https = require('https'); + const u = new URL(url); + return new Promise((resolve, reject) => { + https.get({ + hostname: u.hostname, port: 443, path: u.pathname, + headers: { Authorization: 'Bearer ' + token, Accept: 'application/json' }, + }, res => { + let data = ''; + res.on('data', c => data += c); + res.on('end', () => { + if (res.statusCode !== 200) return reject(new Error(res.statusCode + ': ' + data.slice(0, 200))); + try { resolve(JSON.parse(data)); } catch (e) { reject(e); } + }); + }).on('error', reject); + }); +} + +function rawPage(title, data) { + return '\n' + title + '' + + '' + + '

Сырой ответ ' + title + '

' + + '
' + JSON.stringify(data, null, 2).replace(/'
+    + '

← Сессия | CRUD

' + + ''; +} + function debugPage(u, version) { return ` V2 — IAM diff --git a/v2/src/config/index.js b/v2/src/config/index.js index 0c503c6..ae7a0d5 100644 --- a/v2/src/config/index.js +++ b/v2/src/config/index.js @@ -9,7 +9,7 @@ // ═══════════════════════════════════════════════════════════════════════════════ module.exports = { - version: '0.5.145', + version: '0.5.146', // ── IAM ────────────────────────────────────────────────────────────────── iamUrl: process.env.V2_IAM_URL || 'https://auth-api.ngcloud.ru/api/v1/auth/user',