n8n
Version:
n8n Workflow Automation Tool
156 lines • 5.98 kB
JavaScript
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateMetadata = validateMetadata;
exports.validateResponse = validateResponse;
const typedi_1 = require("typedi");
const Logger_1 = require("../../Logger");
let xml;
let xmldsigCore;
let xmlXenc;
let xmlMetadata;
let xmlAssertion;
let xmlProtocol;
let xmllintWasm;
async function loadSchemas() {
if (!xml || xml.contents === '') {
typedi_1.Container.get(Logger_1.Logger).debug('Loading XML schema files for SAML validation into memory');
const f = await Promise.resolve().then(() => __importStar(require('./schema/xml.xsd')));
xml = {
fileName: 'xml.xsd',
contents: f.xsdXml,
};
}
if (!xmldsigCore || xmldsigCore.contents === '') {
const f = await Promise.resolve().then(() => __importStar(require('./schema/xmldsig-core-schema.xsd')));
xmldsigCore = {
fileName: 'xmldsig-core-schema.xsd',
contents: f.xsdXmldsigCore,
};
}
if (!xmlXenc || xmlXenc.contents === '') {
const f = await Promise.resolve().then(() => __importStar(require('./schema/xenc-schema.xsd')));
xmlXenc = {
fileName: 'xenc-schema.xsd',
contents: f.xsdXenc,
};
}
if (!xmlMetadata || xmlMetadata.contents === '') {
const f = await Promise.resolve().then(() => __importStar(require('./schema/saml-schema-metadata-2.0.xsd')));
xmlMetadata = {
fileName: 'saml-schema-metadata-2.0.xsd',
contents: f.xsdSamlSchemaMetadata20,
};
}
if (!xmlAssertion || xmlAssertion.contents === '') {
const f = await Promise.resolve().then(() => __importStar(require('./schema/saml-schema-assertion-2.0.xsd')));
xmlAssertion = {
fileName: 'saml-schema-assertion-2.0.xsd',
contents: f.xsdSamlSchemaAssertion20,
};
}
if (!xmlProtocol || xmlProtocol.contents === '') {
const f = await Promise.resolve().then(() => __importStar(require('./schema/saml-schema-protocol-2.0.xsd')));
xmlProtocol = {
fileName: 'saml-schema-protocol-2.0.xsd',
contents: f.xsdSamlSchemaProtocol20,
};
}
}
async function loadXmllintWasm() {
if (xmllintWasm === undefined) {
typedi_1.Container.get(Logger_1.Logger).debug('Loading xmllint-wasm library into memory');
xmllintWasm = await Promise.resolve().then(() => __importStar(require('xmllint-wasm')));
}
}
async function validateMetadata(metadata) {
const logger = typedi_1.Container.get(Logger_1.Logger);
try {
await loadXmllintWasm();
await loadSchemas();
const validationResult = await (xmllintWasm === null || xmllintWasm === void 0 ? void 0 : xmllintWasm.validateXML({
xml: [
{
fileName: 'metadata.xml',
contents: metadata,
},
],
extension: 'schema',
schema: [xmlMetadata],
preload: [xmlProtocol, xmlAssertion, xmldsigCore, xmlXenc, xml],
}));
if (validationResult === null || validationResult === void 0 ? void 0 : validationResult.valid) {
logger.debug('SAML Metadata is valid');
return true;
}
else {
logger.warn('SAML Validate Metadata: Invalid metadata');
logger.warn(validationResult
? validationResult.errors
.map((error) => `${error.message} - ${error.rawMessage}`)
.join('\n')
: '');
}
}
catch (error) {
logger.warn(error);
}
return false;
}
async function validateResponse(response) {
const logger = typedi_1.Container.get(Logger_1.Logger);
try {
await loadXmllintWasm();
await loadSchemas();
const validationResult = await (xmllintWasm === null || xmllintWasm === void 0 ? void 0 : xmllintWasm.validateXML({
xml: [
{
fileName: 'response.xml',
contents: response,
},
],
extension: 'schema',
schema: [xmlProtocol],
preload: [xmlMetadata, xmlAssertion, xmldsigCore, xmlXenc, xml],
}));
if (validationResult === null || validationResult === void 0 ? void 0 : validationResult.valid) {
logger.debug('SAML Response is valid');
return true;
}
else {
logger.warn('SAML Validate Response: Failed');
logger.warn(validationResult
? validationResult.errors
.map((error) => `${error.message} - ${error.rawMessage}`)
.join('\n')
: '');
}
}
catch (error) {
logger.warn(error);
}
return false;
}
//# sourceMappingURL=samlValidator.js.map
;