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