51 lines
2.4 KiB
JavaScript
51 lines
2.4 KiB
JavaScript
// ═══════════════════════════════════════════════════════════════════════════════
|
||
// V2 — Авто-имперсонация (отдельный модуль)
|
||
//
|
||
// УСЛОВИЯ (все три должны быть заданы):
|
||
// IMPERSONATION_ORIGINAL = email юзера при входе (ntazetdinov@nubes.ru)
|
||
// IMPERSONATION_TARGET = в кого имперсонировать (tazet@narod.ru)
|
||
// IMPERSONATION_COMPANY = компания цели (WZ01325)
|
||
//
|
||
// ОПЦИОНАЛЬНО:
|
||
// IMPERSONATION_EXTRA_COMPANIES = доп. компании через запятую (WZ01112)
|
||
//
|
||
// ЧТО ДЕЛАЕТ:
|
||
// Когда юзер с email === ORIGINAL входит → сессия подменяется:
|
||
// email → TARGET
|
||
// clientId → COMPANY
|
||
// allClientIds → [COMPANY, EXTRA_COMPANIES]
|
||
// isImpersonated → true
|
||
// originalUserEmail → ORIGINAL
|
||
// ═══════════════════════════════════════════════════════════════════════════════
|
||
|
||
const ORIGINAL = process.env.IMPERSONATION_ORIGINAL || '';
|
||
const TARGET = process.env.IMPERSONATION_TARGET || '';
|
||
const COMPANY = process.env.IMPERSONATION_COMPANY || '';
|
||
const EXTRA = (process.env.IMPERSONATION_EXTRA_COMPANIES || '')
|
||
.split(',').map(s => s.trim()).filter(Boolean);
|
||
|
||
// Все три обязательны
|
||
const ENABLED = ORIGINAL && TARGET && COMPANY;
|
||
|
||
function enhanceImpersonation(req, res, next) {
|
||
if (!ENABLED) return next();
|
||
|
||
const u = req.session && req.session.user;
|
||
if (!u || u.email !== ORIGINAL) return next();
|
||
|
||
// Подмена сессии — авто-имперсонация
|
||
const allCids = [COMPANY, ...EXTRA];
|
||
u.originalUserEmail = ORIGINAL; // кто реально вошёл
|
||
u.email = TARGET; // в кого имперсонируем
|
||
u.clientId = COMPANY;
|
||
u.activeClientId = COMPANY;
|
||
u.allClientIds = allCids;
|
||
u.isImpersonated = true;
|
||
u.companyName = COMPANY;
|
||
u.profiles = allCids.map(cid => ({ client_id: cid, company_name: cid }));
|
||
|
||
next();
|
||
}
|
||
|
||
module.exports = { enhanceImpersonation };
|