UNPKG

vulcain-corejs

Version:
74 lines (72 loc) 2.25 kB
"use strict"; const system_1 = require("../../configurations/globals/system"); const requestContext_1 = require("../requestContext"); /** * Default policy * * @export * @class DefaultPolicy */ class DefaultTenantPolicy { resolveFromHeader(ctx, req) { let tenant = req.headers["X-VULCAIN-TENANT"]; if (!tenant) return; if (tenant === "?") { // from load-balancer so resolve from hostname // Get the first sub-domain let pos = ctx.hostName.indexOf('.'); tenant = pos > 0 ? ctx.hostName.substr(0, pos) : ctx.hostName; // Remove port pos = tenant.indexOf(':'); if (pos > 0) { tenant = tenant.substr(0, pos); } return tenant; } let parts = tenant.split(':'); if (parts.length !== 2 || parts[0] !== "pattern") { return tenant; } let patterns = parts[1].split(','); for (let pattern of patterns) { try { const regex = new RegExp(pattern.trim()); const groups = regex.exec(ctx.hostName); if (groups && groups.length > 0) { return groups[1]; } } catch (e) { ctx.logError(e, "TENANT pattern cannot be resolved " + pattern); } } } resolveTenant(ctx, req) { let tenant; // 1 - tenant in url (test only) tenant = (system_1.System.isTestEnvironnment && req.query.$tenant); if (tenant) { return tenant; } // 2 - Header tenant = this.resolveFromHeader(ctx, req); if (tenant) { return tenant; } // 3 - Environnement variable if (system_1.System.defaultTenant) { return system_1.System.defaultTenant; } // 4 - test mode if (system_1.System.isTestEnvironnment) { return requestContext_1.RequestContext.TestTenant; } else { // 5 - default return "vulcain"; } } } exports.DefaultTenantPolicy = DefaultTenantPolicy; //# sourceMappingURL=defaultTenantPolicy.js.map