@tableau/taco-toolkit
Version:
Tableau Connector Toolkit
63 lines • 4.19 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.isLocalhost = exports.ProtocolRule = exports.HostnameRule = void 0;
var ipaddr_js_1 = __importDefault(require("ipaddr.js"));
var HostnameRule = /** @class */ (function () {
function HostnameRule(config) {
this.allowLocalhost = config.allowLocalhost;
}
HostnameRule.prototype.test = function (url) {
var hostname = url.hostname;
if (!this.allowLocalhost && isLocalhost(hostname)) {
return {
success: false,
reason: 'localhost access is disallowed',
};
}
return {
success: true,
};
};
return HostnameRule;
}());
exports.HostnameRule = HostnameRule;
var ProtocolRule = /** @class */ (function () {
function ProtocolRule(protocols) {
this.protocols = new Set(protocols.map(function (protocol) { return "".concat(protocol, ":"); }));
}
ProtocolRule.prototype.test = function (url) {
var protocol = url.protocol;
if (!this.protocols.has(protocol)) {
return {
success: false,
reason: "Invalid or disallowed protocol: ".concat(protocol),
};
}
return {
success: true,
};
};
return ProtocolRule;
}());
exports.ProtocolRule = ProtocolRule;
var privateRangeTypes = new Set(['linkLocal', 'loopback', 'private', 'reserved']);
function isLocalhost(hostname) {
if (hostname === 'localhost') {
return true;
}
if (hostname.at(0) === '[' && hostname.at(-1) === ']') {
hostname = hostname.substring(1, hostname.length - 1);
}
try {
var type = ipaddr_js_1.default.parse(hostname).range();
return privateRangeTypes.has(type);
}
catch (e) {
return false;
}
}
exports.isLocalhost = isLocalhost;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay1ydWxlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9lcHMvbW9kdWxlcy9uZXR3b3JrLWFkYXB0ZXItdXRpbHMvbmV0d29yay1ydWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx3REFBOEI7QUFvQjlCO0lBR0Usc0JBQVksTUFBMEI7UUFDcEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFBO0lBQzdDLENBQUM7SUFFRCwyQkFBSSxHQUFKLFVBQUssR0FBUTtRQUNILElBQUEsUUFBUSxHQUFLLEdBQUcsU0FBUixDQUFRO1FBRXhCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNqRCxPQUFPO2dCQUNMLE9BQU8sRUFBRSxLQUFLO2dCQUNkLE1BQU0sRUFBRSxnQ0FBZ0M7YUFDekMsQ0FBQTtTQUNGO1FBRUQsT0FBTztZQUNMLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQTtJQUNILENBQUM7SUFDSCxtQkFBQztBQUFELENBQUMsQUFyQkQsSUFxQkM7QUFyQlksb0NBQVk7QUF1QnpCO0lBR0Usc0JBQVksU0FBNEI7UUFDdEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQUMsUUFBUSxJQUFLLE9BQUEsVUFBRyxRQUFRLE1BQUcsRUFBZCxDQUFjLENBQUMsQ0FBQyxDQUFBO0lBQ3ZFLENBQUM7SUFFRCwyQkFBSSxHQUFKLFVBQUssR0FBUTtRQUNILElBQUEsUUFBUSxHQUFLLEdBQUcsU0FBUixDQUFRO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNqQyxPQUFPO2dCQUNMLE9BQU8sRUFBRSxLQUFLO2dCQUNkLE1BQU0sRUFBRSwwQ0FBbUMsUUFBUSxDQUFFO2FBQ3RELENBQUE7U0FDRjtRQUVELE9BQU87WUFDTCxPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUE7SUFDSCxDQUFDO0lBQ0gsbUJBQUM7QUFBRCxDQUFDLEFBcEJELElBb0JDO0FBcEJZLG9DQUFZO0FBc0J6QixJQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQTtBQUVuRixTQUFnQixXQUFXLENBQUMsUUFBZ0I7SUFDMUMsSUFBSSxRQUFRLEtBQUssV0FBVyxFQUFFO1FBQzVCLE9BQU8sSUFBSSxDQUFBO0tBQ1o7SUFFRCxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7UUFDckQsUUFBUSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUE7S0FDdEQ7SUFFRCxJQUFJO1FBQ0YsSUFBTSxJQUFJLEdBQUcsbUJBQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDM0MsT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7S0FDbkM7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE9BQU8sS0FBSyxDQUFBO0tBQ2I7QUFDSCxDQUFDO0FBZkQsa0NBZUMifQ==