vulcain-corejs
Version:
Vulcain micro-service framework
74 lines (72 loc) • 2.25 kB
JavaScript
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
;