debug: логирование switchTo, resolveContext, enhanceImpersonation

This commit is contained in:
2026-06-15 16:30:23 +04:00
parent e2aaf3f425
commit 3493d45065
6 changed files with 71 additions and 3 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "ipwhitelist",
"version": "0.5.123",
"version": "0.5.125",
"description": "IP WhiteList microservice for cloud provider",
"main": "server.js",
"scripts": {
+1 -1
View File
@@ -9,7 +9,7 @@
// ═══════════════════════════════════════════════════════════════════════════════
module.exports = {
version: '0.5.123',
version: '0.5.125',
// ── IAM ──────────────────────────────────────────────────────────────────
iamUrl: process.env.V2_IAM_URL || 'https://auth-api.ngcloud.ru/api/v1/auth/user',
+23
View File
@@ -26,9 +26,24 @@ function enhanceImpersonation(req, res, next) {
const u = req.session && req.session.user;
if (!u) return next();
console.log('[v2:impersonation] enter', {
sessionID: req.sessionID,
email: u.email,
activeClientId: u.activeClientId,
clientId: u.clientId,
isImpersonated: u.isImpersonated,
originalUserEmail: u.originalUserEmail,
path: req.originalUrl,
});
// ── IAM-имперсонация (уже есть в сессии) — просто добавляем компании ──
if (u.isImpersonated && u.originalUserEmail === ORIGINAL_EMAIL) {
addExtraCompanies(u);
console.log('[v2:impersonation] addExtraCompanies', {
sessionID: req.sessionID,
activeClientId: u.activeClientId,
allClientIds: u.allClientIds,
});
return next();
}
@@ -56,6 +71,14 @@ function enhanceImpersonation(req, res, next) {
is_active_profile: cid === MAIN_COMPANY,
}));
console.log('[v2:impersonation] applied test impersonation', {
sessionID: req.sessionID,
activeClientId: u.activeClientId,
clientId: u.clientId,
originalUserEmail: u.originalUserEmail,
allClientIds: u.allClientIds,
});
return next();
}
+17
View File
@@ -29,6 +29,15 @@
function resolveContext(req, res, next) {
const u = req.session && req.session.user;
console.log('[v2:resolveContext] enter', {
sessionID: req.sessionID,
hasSession: !!req.session,
hasUser: !!u,
sessionActiveClientId: u ? u.activeClientId : null,
sessionClientId: u ? u.clientId : null,
url: req.originalUrl,
});
// Нет сессии — нет доступа
if (!u) return res.redirect('/v2/login');
@@ -53,6 +62,14 @@ function resolveContext(req, res, next) {
req.allClientIds = allCids;
req.profiles = u.profiles || [];
console.log('[v2:resolveContext] exit', {
sessionID: req.sessionID,
reqClientId: req.clientId,
reqEmail: req.email,
canAdmin: req.canAdmin,
isImpersonated: req.isImpersonated,
});
next();
}
+19 -1
View File
@@ -54,9 +54,23 @@ function createUserRouter() {
const targetId = req.query.switchTo;
const allowed = isAdmin || (req.profiles || []).find(p => p.client_id === targetId);
if (allowed) {
console.log('[v2:switchTo] before save', {
sessionID: req.sessionID,
oldActiveClientId: req.session && req.session.user ? req.session.user.activeClientId : null,
oldClientId: req.session && req.session.user ? req.session.user.clientId : null,
targetId,
email: req.email,
});
req.session.user.activeClientId = targetId;
return req.session.save(err => {
if (err) console.error('[switchTo] save error:', err.message);
if (err) {
console.error('[v2:switchTo] save error:', err.message);
} else {
console.log('[v2:switchTo] after save', {
sessionID: req.sessionID,
savedActiveClientId: req.session && req.session.user ? req.session.user.activeClientId : null,
});
}
res.redirect('/v2/app');
});
}
@@ -83,6 +97,10 @@ function createUserRouter() {
entries, limit, used,
companies,
activeClientId: clId,
debugClientId: clId,
sessionId: req.sessionID || '',
sessionActiveClientId: req.session && req.session.user ? (req.session.user.activeClientId || '') : '',
sessionClientId: req.session && req.session.user ? (req.session.user.clientId || '') : '',
user: templateUser,
includeDeleted,
version: config.version,
+10
View File
@@ -129,6 +129,16 @@
if(p.get('error')){document.write('<div class="alert alert-err">'+p.get('error')+'</div>');history.replaceState(null,'','/v2/app');}
</script>
<div class="card" style="margin-bottom:1rem;border-style:dashed;">
<div class="card-body" style="font-size:.85rem;color:var(--muted);">
<div><strong>DEBUG</strong></div>
<div>sessionID: <%= (typeof sessionId !== 'undefined' && sessionId) ? sessionId : 'n/a' %></div>
<div>session.activeClientId: <%= (typeof sessionActiveClientId !== 'undefined' && sessionActiveClientId) ? sessionActiveClientId : 'n/a' %></div>
<div>req.clientId: <%= (typeof debugClientId !== 'undefined' && debugClientId) ? debugClientId : activeClientId %></div>
<div>req.session.user.clientId: <%= (typeof sessionClientId !== 'undefined' && sessionClientId) ? sessionClientId : 'n/a' %></div>
</div>
</div>
<% if (user.isImpersonated) { %>
<div class="alert alert-warn">
⚠️ Режим имперсонации — данные сохраняются от имени <strong><%= activeClientId %></strong>