debug: логирование switchTo, resolveContext, enhanceImpersonation
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "ipwhitelist",
|
"name": "ipwhitelist",
|
||||||
"version": "0.5.123",
|
"version": "0.5.125",
|
||||||
"description": "IP WhiteList microservice for cloud provider",
|
"description": "IP WhiteList microservice for cloud provider",
|
||||||
"main": "server.js",
|
"main": "server.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
// ═══════════════════════════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════════════════════════
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
version: '0.5.123',
|
version: '0.5.125',
|
||||||
|
|
||||||
// ── 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',
|
||||||
|
|||||||
@@ -26,9 +26,24 @@ function enhanceImpersonation(req, res, next) {
|
|||||||
const u = req.session && req.session.user;
|
const u = req.session && req.session.user;
|
||||||
if (!u) return next();
|
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-имперсонация (уже есть в сессии) — просто добавляем компании ──
|
// ── IAM-имперсонация (уже есть в сессии) — просто добавляем компании ──
|
||||||
if (u.isImpersonated && u.originalUserEmail === ORIGINAL_EMAIL) {
|
if (u.isImpersonated && u.originalUserEmail === ORIGINAL_EMAIL) {
|
||||||
addExtraCompanies(u);
|
addExtraCompanies(u);
|
||||||
|
console.log('[v2:impersonation] addExtraCompanies', {
|
||||||
|
sessionID: req.sessionID,
|
||||||
|
activeClientId: u.activeClientId,
|
||||||
|
allClientIds: u.allClientIds,
|
||||||
|
});
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,6 +71,14 @@ function enhanceImpersonation(req, res, next) {
|
|||||||
is_active_profile: cid === MAIN_COMPANY,
|
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();
|
return next();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,15 @@
|
|||||||
function resolveContext(req, res, next) {
|
function resolveContext(req, res, next) {
|
||||||
const u = req.session && req.session.user;
|
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');
|
if (!u) return res.redirect('/v2/login');
|
||||||
|
|
||||||
@@ -53,6 +62,14 @@ function resolveContext(req, res, next) {
|
|||||||
req.allClientIds = allCids;
|
req.allClientIds = allCids;
|
||||||
req.profiles = u.profiles || [];
|
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();
|
next();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+19
-1
@@ -54,9 +54,23 @@ function createUserRouter() {
|
|||||||
const targetId = req.query.switchTo;
|
const targetId = req.query.switchTo;
|
||||||
const allowed = isAdmin || (req.profiles || []).find(p => p.client_id === targetId);
|
const allowed = isAdmin || (req.profiles || []).find(p => p.client_id === targetId);
|
||||||
if (allowed) {
|
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;
|
req.session.user.activeClientId = targetId;
|
||||||
return req.session.save(err => {
|
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');
|
res.redirect('/v2/app');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -83,6 +97,10 @@ function createUserRouter() {
|
|||||||
entries, limit, used,
|
entries, limit, used,
|
||||||
companies,
|
companies,
|
||||||
activeClientId: clId,
|
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,
|
user: templateUser,
|
||||||
includeDeleted,
|
includeDeleted,
|
||||||
version: config.version,
|
version: config.version,
|
||||||
|
|||||||
@@ -129,6 +129,16 @@
|
|||||||
if(p.get('error')){document.write('<div class="alert alert-err">'+p.get('error')+'</div>');history.replaceState(null,'','/v2/app');}
|
if(p.get('error')){document.write('<div class="alert alert-err">'+p.get('error')+'</div>');history.replaceState(null,'','/v2/app');}
|
||||||
</script>
|
</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) { %>
|
<% if (user.isImpersonated) { %>
|
||||||
<div class="alert alert-warn">
|
<div class="alert alert-warn">
|
||||||
⚠️ Режим имперсонации — данные сохраняются от имени <strong><%= activeClientId %></strong>
|
⚠️ Режим имперсонации — данные сохраняются от имени <strong><%= activeClientId %></strong>
|
||||||
|
|||||||
Reference in New Issue
Block a user