98 lines
4.7 KiB
JavaScript
98 lines
4.7 KiB
JavaScript
/**
|
|
* src/config.js — общие константы и утилиты приложения.
|
|
*
|
|
* Вынесено из server.js чтобы:
|
|
* 1. Роуты могли импортировать MOCK_USERS и backUrl без циклических зависимостей.
|
|
* 2. Конфигурация была в одном месте — проще менять и тестировать.
|
|
*
|
|
* Этот файл не зависит ни от Express, ни от БД — чистые данные и функции.
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
// ── IAM API ───────────────────────────────────────────────────────────────────
|
|
// URL IAM-сервиса для получения профилей пользователя (GET /api/v1/auth/user)
|
|
// и переключения активной компании (POST /api/v1/user/switch-profile).
|
|
const IAM_API_URL = (process.env.IAM_API_URL || process.env.IAM_API_BASE || 'https://auth-api.ngcloud.ru').replace(/\/$/, '');
|
|
|
|
// ── Мок-пользователи (только dev/staging) ─────────────────────────────────────
|
|
// В продакшене этот список не используется — вход через Keycloak.
|
|
// clientId соответствует WZ-номеру компании в Nubes.
|
|
// companyId — UUID клиента (из Keycloak-токена в продакшене).
|
|
const MOCK_USERS = [
|
|
{
|
|
id: 'admin',
|
|
label: 'АДМИН (WZ01112)',
|
|
role: 'admin',
|
|
isAdmin: true,
|
|
clientId: 'WZ01112',
|
|
companyId: 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee',
|
|
companyName: 'Nubes',
|
|
email: 'admin@nubes.ru',
|
|
},
|
|
{
|
|
id: 'alfa',
|
|
label: 'АЛЬФА (WZ88888)',
|
|
role: 'user',
|
|
isAdmin: false,
|
|
clientId: 'WZ88888',
|
|
companyId: '11111111-aaaa-aaaa-aaaa-111111111111',
|
|
companyName: 'АЛЬФА',
|
|
email: 'alfa@example.com',
|
|
},
|
|
{
|
|
id: 'multi',
|
|
label: 'АЛЬФА+БЕТА (WZ88888, WZ77777)',
|
|
role: 'user',
|
|
isAdmin: false,
|
|
clientId: 'WZ88888, WZ77777',
|
|
companyId: '11111111-aaaa-aaaa-aaaa-111111111111',
|
|
companyName: 'АЛЬФА+БЕТА',
|
|
email: 'multi@example.com',
|
|
},
|
|
{
|
|
id: 'beta',
|
|
label: 'БЕТА (WZ77777)',
|
|
role: 'user',
|
|
isAdmin: false,
|
|
clientId: 'WZ77777',
|
|
companyId: '22222222-bbbb-bbbb-bbbb-222222222222',
|
|
companyName: 'БЕТА',
|
|
email: 'beta@example.com',
|
|
},
|
|
];
|
|
|
|
// ── backUrl — строит URL для редиректа после мутирующего действия ──────────────
|
|
//
|
|
// Логика:
|
|
// • admin всегда видит страницу в контексте конкретной компании (?company=<id>).
|
|
// Поэтому после POST /add, /edit, /delete редиректим туда же.
|
|
// • Обычный пользователь видит только свою страницу — просто /.
|
|
//
|
|
// extra — дополнительные query-параметры, например { message: 'Добавлено' }
|
|
// или { error: 'Лимит исчерпан' }.
|
|
//
|
|
// Примеры:
|
|
// backUrl(true, 42, { message: 'OK' }) → '/?company=42&message=OK'
|
|
// backUrl(false, 42, { error: 'Err' }) → '/?error=Err'
|
|
// backUrl(false, null, {}) → '/'
|
|
function backUrl(isAdmin, companyId, extra = {}) {
|
|
const qs = new URLSearchParams();
|
|
|
|
// Добавляем company только для admin и только если companyId задан
|
|
if (isAdmin && companyId) qs.set('company', companyId);
|
|
|
|
// Добавляем все дополнительные параметры (message, error, wasNormalized и др.)
|
|
for (const [k, v] of Object.entries(extra)) qs.set(k, String(v));
|
|
|
|
const str = qs.toString();
|
|
return str ? '/?' + str : '/';
|
|
}
|
|
|
|
// ── Версия приложения (из package.json) ──────────────────────────────────────
|
|
// Читается один раз при загрузке модуля — require кешируется Node.js.
|
|
// Передаётся в шаблоны через app.locals чтобы отображаться в UI.
|
|
const { version: APP_VERSION } = require('../package.json');
|
|
|
|
module.exports = { MOCK_USERS, backUrl, APP_VERSION, IAM_API_URL: (process.env.IAM_API_URL || process.env.IAM_API_BASE || 'https://auth-api.ngcloud.ru').replace(/\/$/, '') };
|