UNPKG

vulcain-corejs

Version:
72 lines (70 loc) 2.21 kB
"use strict"; const system_1 = require("../../configurations/globals/system"); const requestContext_1 = require("../requestContext"); const abstractAdapter_1 = require("../abstractAdapter"); /** * Default policy * * @export * @class DefaultPolicy */ class DefaultTenantPolicy { resolveFromHeader(ctx, req) { let tenant = req.headers[abstractAdapter_1.VulcainHeaderNames.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; } if (!tenant.startsWith("pattern:")) { return tenant; } let pattern = tenant.substr("pattern:".length); 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