Files
ipwhitelist-app/v2/src/impersonation/index.js
T

51 lines
2.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ═══════════════════════════════════════════════════════════════════════════════
// 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 };