@apideck/portman
Version:
Port OpenAPI Spec to Postman Collection, with contract & variation tests included
714 lines • 44.4 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Fuzzer = void 0;
var tslib_1 = require("tslib");
var types_1 = require("../types");
var legacy_1 = tslib_1.__importDefault(require("neotraverse/legacy"));
var utils_1 = require("../utils");
var PostmanDynamicVarGenerator_1 = require("../services/PostmanDynamicVarGenerator");
var openapi_format_1 = require("openapi-format");
var Fuzzer = (function () {
function Fuzzer(options) {
var testSuite = options.testSuite, variationWriter = options.variationWriter;
this.testSuite = testSuite;
this.variationWriter = variationWriter;
this.fuzzVariations = [];
}
Fuzzer.prototype.injectFuzzRequestBodyVariations = function (pmOperation, oaOperation, variation, variationMeta) {
var _this = this;
var _a, _b, _c, _d;
var fuzzingSet = (variation === null || variation === void 0 ? void 0 : variation.fuzzing) || [];
if (fuzzingSet.length === 0)
return;
if (!((_a = oaOperation === null || oaOperation === void 0 ? void 0 : oaOperation.schema) === null || _a === void 0 ? void 0 : _a.requestBody))
return;
var reqBody = (_b = oaOperation === null || oaOperation === void 0 ? void 0 : oaOperation.schema) === null || _b === void 0 ? void 0 : _b.requestBody;
var jsonContentType = (0, utils_1.getJsonContentType)(Object.keys(reqBody === null || reqBody === void 0 ? void 0 : reqBody.content));
if (!jsonContentType)
return;
var schema = (_d = (_c = reqBody === null || reqBody === void 0 ? void 0 : reqBody.content) === null || _c === void 0 ? void 0 : _c[jsonContentType]) === null || _d === void 0 ? void 0 : _d.schema;
var fuzzItems = this.analyzeFuzzJsonSchema(schema);
var requestBodyExamples = (0, utils_1.getRequestBodyExamples)(reqBody, jsonContentType);
var fuzzReqBodySet = fuzzingSet.filter(function (fuzz) { return fuzz === null || fuzz === void 0 ? void 0 : fuzz.requestBody; });
fuzzReqBodySet.map(function (fuzzItem) {
var fuzzSet = fuzzItem === null || fuzzItem === void 0 ? void 0 : fuzzItem.requestBody;
fuzzSet.map(function (fuzz) {
var _a, _b, _c, _d, _e;
if (((_a = fuzz === null || fuzz === void 0 ? void 0 : fuzz.requiredFields) === null || _a === void 0 ? void 0 : _a.enabled) === true) {
_this.injectFuzzRequiredVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems, requestBodyExamples);
}
if (((_b = fuzz === null || fuzz === void 0 ? void 0 : fuzz.minimumNumberFields) === null || _b === void 0 ? void 0 : _b.enabled) === true) {
_this.injectFuzzMinimumVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems);
}
if (((_c = fuzz === null || fuzz === void 0 ? void 0 : fuzz.maximumNumberFields) === null || _c === void 0 ? void 0 : _c.enabled) === true) {
_this.injectFuzzMaximumVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems);
}
if (((_d = fuzz === null || fuzz === void 0 ? void 0 : fuzz.minLengthFields) === null || _d === void 0 ? void 0 : _d.enabled) === true) {
_this.injectFuzzMinLengthVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems);
}
if (((_e = fuzz === null || fuzz === void 0 ? void 0 : fuzz.maxLengthFields) === null || _e === void 0 ? void 0 : _e.enabled) === true) {
_this.injectFuzzMaxLengthVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems);
}
});
});
};
Fuzzer.prototype.injectFuzzRequestQueryParamsVariations = function (pmOperation, oaOperation, variation, variationMeta) {
var _this = this;
var fuzzingSet = (variation === null || variation === void 0 ? void 0 : variation.fuzzing) || [];
if (fuzzingSet.length === 0)
return;
if (!(oaOperation === null || oaOperation === void 0 ? void 0 : oaOperation.queryParams))
return;
var reqQueryParams = oaOperation === null || oaOperation === void 0 ? void 0 : oaOperation.queryParams;
reqQueryParams.map(function (queryParam) {
var fuzzItems = _this.analyzeQuerySchema(queryParam);
var fuzzQueryParamSet = fuzzingSet.filter(function (fuzz) { return fuzz === null || fuzz === void 0 ? void 0 : fuzz.requestQueryParams; });
fuzzQueryParamSet.map(function (fuzzItem) {
var fuzzSet = fuzzItem === null || fuzzItem === void 0 ? void 0 : fuzzItem.requestQueryParams;
fuzzSet.map(function (fuzz) {
var _a, _b, _c, _d, _e;
if (((_a = fuzz === null || fuzz === void 0 ? void 0 : fuzz.requiredFields) === null || _a === void 0 ? void 0 : _a.enabled) === true) {
_this.injectFuzzRequiredVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems);
}
if (((_b = fuzz === null || fuzz === void 0 ? void 0 : fuzz.minimumNumberFields) === null || _b === void 0 ? void 0 : _b.enabled) === true) {
_this.injectFuzzMinimumVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems);
}
if (((_c = fuzz === null || fuzz === void 0 ? void 0 : fuzz.maximumNumberFields) === null || _c === void 0 ? void 0 : _c.enabled) === true) {
_this.injectFuzzMaximumVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems);
}
if (((_d = fuzz === null || fuzz === void 0 ? void 0 : fuzz.minLengthFields) === null || _d === void 0 ? void 0 : _d.enabled) === true) {
_this.injectFuzzMinLengthVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems);
}
if (((_e = fuzz === null || fuzz === void 0 ? void 0 : fuzz.maxLengthFields) === null || _e === void 0 ? void 0 : _e.enabled) === true) {
_this.injectFuzzMaxLengthVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems);
}
});
});
});
};
Fuzzer.prototype.injectFuzzRequestHeadersVariations = function (pmOperation, oaOperation, variation, variationMeta) {
var _this = this;
var fuzzingSet = (variation === null || variation === void 0 ? void 0 : variation.fuzzing) || [];
if (fuzzingSet.length === 0)
return;
if (!(oaOperation === null || oaOperation === void 0 ? void 0 : oaOperation.requestHeaders))
return;
var reqHeaders = oaOperation === null || oaOperation === void 0 ? void 0 : oaOperation.requestHeaders;
reqHeaders.map(function (header) {
var fuzzItems = _this.analyzeHeaderSchema(header);
var fuzzHeaderSet = fuzzingSet.filter(function (fuzz) { return fuzz === null || fuzz === void 0 ? void 0 : fuzz.requestHeaders; });
fuzzHeaderSet.map(function (fuzzItem) {
var fuzzSet = fuzzItem === null || fuzzItem === void 0 ? void 0 : fuzzItem.requestHeaders;
fuzzSet.map(function (fuzz) {
var _a, _b, _c, _d, _e;
if (((_a = fuzz === null || fuzz === void 0 ? void 0 : fuzz.requiredFields) === null || _a === void 0 ? void 0 : _a.enabled) === true) {
_this.injectFuzzRequiredVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems);
}
if (((_b = fuzz === null || fuzz === void 0 ? void 0 : fuzz.minimumNumberFields) === null || _b === void 0 ? void 0 : _b.enabled) === true) {
_this.injectFuzzMinimumVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems);
}
if (((_c = fuzz === null || fuzz === void 0 ? void 0 : fuzz.maximumNumberFields) === null || _c === void 0 ? void 0 : _c.enabled) === true) {
_this.injectFuzzMaximumVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems);
}
if (((_d = fuzz === null || fuzz === void 0 ? void 0 : fuzz.minLengthFields) === null || _d === void 0 ? void 0 : _d.enabled) === true) {
_this.injectFuzzMinLengthVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems);
}
if (((_e = fuzz === null || fuzz === void 0 ? void 0 : fuzz.maxLengthFields) === null || _e === void 0 ? void 0 : _e.enabled) === true) {
_this.injectFuzzMaxLengthVariation(pmOperation, oaOperation, variation, variationMeta, fuzzItems);
}
});
});
});
};
Fuzzer.prototype.injectFuzzRequiredVariation = function (pmOperation, oaOperation, variation, variationMeta, fuzzItems, requestBodyExamples) {
var _this = this;
var requiredFields = (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.requiredFields) || [];
if (requiredFields.length === 0)
return;
var clonedVariation = JSON.parse(JSON.stringify(variation));
requiredFields.map(function (requiredField) {
var filteredExamples = (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestBody && (requestBodyExamples === null || requestBodyExamples === void 0 ? void 0 : requestBodyExamples.length)
? _this.filterRequestBodyExamples(requestBodyExamples, requiredField)
: [];
var fallbackExamples = requestBodyExamples && requestBodyExamples.length > 0 ? [requestBodyExamples[0]] : [];
var examplePayloads = filteredExamples.length > 0 ? filteredExamples : fallbackExamples;
var examplesToUse = examplePayloads.length > 0 ? examplePayloads : [undefined];
var includeExampleSuffix = examplePayloads.length > 1;
examplesToUse.forEach(function (examplePayload, exampleIndex) {
var exampleSuffix = includeExampleSuffix ? " [example ".concat(exampleIndex + 1, "]") : '';
var variationFuzzName = "".concat(pmOperation.item.name, "[").concat(variation.name, "][required ").concat(requiredField, "]").concat(exampleSuffix);
var operationVariation = pmOperation.clone({
newId: (0, openapi_format_1.changeCase)(variationFuzzName, 'camelCase'),
name: variationFuzzName
});
_this.testSuite.registerOperationTestType(operationVariation, types_1.PortmanTestTypes.variation, false);
var newVariation = JSON.parse(JSON.stringify(clonedVariation));
if (!(newVariation === null || newVariation === void 0 ? void 0 : newVariation.overwrites))
newVariation.overwrites = [];
if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestBody) {
if (examplePayload !== undefined) {
var safeExamplePayload = JSON.parse(JSON.stringify(examplePayload));
var exampleOverwrite = {
key: '.',
value: safeExamplePayload,
overwrite: true
};
_this.addOverwriteRequestBody(newVariation, exampleOverwrite);
}
var fuzzRequestBody = {
key: requiredField,
remove: true
};
_this.addOverwriteRequestBody(newVariation, fuzzRequestBody);
}
if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestQueryParam) {
var fuzzRequestQueryParam = {
key: requiredField,
remove: true
};
_this.addOverwriteRequestQueryParam(newVariation, fuzzRequestQueryParam);
}
if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestHeader) {
var fuzzRequestHeader = {
key: requiredField,
remove: true
};
_this.addOverwriteRequestHeader(newVariation, fuzzRequestHeader);
}
_this.variationWriter.injectVariations(operationVariation, oaOperation, newVariation, variationMeta);
_this.fuzzVariations.push(operationVariation);
});
});
};
Fuzzer.prototype.filterRequestBodyExamples = function (examples, requiredField) {
return examples
.filter(function (example) {
if (example === null || typeof example !== 'object')
return false;
var safeExample = JSON.parse(JSON.stringify(example));
return ((0, utils_1.getByPath)(safeExample, requiredField) !== undefined);
})
.map(function (example) { return JSON.parse(JSON.stringify(example)); });
};
Fuzzer.prototype.injectFuzzMinimumVariation = function (pmOperation, oaOperation, variation, variationMeta, fuzzItems) {
var _this = this;
var minimumNumberFields = (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.minimumNumberFields) || [];
if (minimumNumberFields.length === 0)
return;
if (!(types_1.PortmanFuzzTypes.requestBody === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType)) &&
!(types_1.PortmanFuzzTypes.requestQueryParam === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType)) &&
!(types_1.PortmanFuzzTypes.requestHeader === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType)))
return;
var clonedVariation = JSON.parse(JSON.stringify(variation));
minimumNumberFields.forEach(function (field) {
var variationFuzzName = "".concat(pmOperation.item.name, "[").concat(variation.name, "][minimum number value ").concat(field.path, "]");
var numberVal = typeof field.value === 'number' ? field.value - 1 : Number(field.value) - 1;
var operationVariation = pmOperation.clone({
newId: (0, openapi_format_1.changeCase)(variationFuzzName, 'camelCase'),
name: variationFuzzName
});
_this.testSuite.registerOperationTestType(operationVariation, types_1.PortmanTestTypes.variation, false);
var newVariation = JSON.parse(JSON.stringify(clonedVariation));
if (!(newVariation === null || newVariation === void 0 ? void 0 : newVariation.overwrites))
newVariation.overwrites = [];
if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestBody) {
var fuzzRequestBody = {
key: field.path,
value: numberVal,
overwrite: true
};
_this.addOverwriteRequestBody(newVariation, fuzzRequestBody);
}
if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestQueryParam) {
var fuzzRequestQueryParam = {
key: field.path,
value: numberVal.toString(),
overwrite: true,
disable: false
};
_this.addOverwriteRequestQueryParam(newVariation, fuzzRequestQueryParam);
}
if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestHeader) {
var fuzzRequestHeader = {
key: field.path,
value: numberVal.toString(),
overwrite: true,
disable: false
};
_this.addOverwriteRequestHeader(newVariation, fuzzRequestHeader);
}
_this.variationWriter.injectVariations(operationVariation, oaOperation, newVariation, variationMeta);
_this.fuzzVariations.push(operationVariation);
});
};
Fuzzer.prototype.injectFuzzMaximumVariation = function (pmOperation, oaOperation, variation, variationMeta, fuzzItems) {
var _this = this;
var maximumNumberFields = (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.maximumNumberFields) || [];
if (maximumNumberFields.length === 0)
return;
if (!(types_1.PortmanFuzzTypes.requestBody === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType)) &&
!(types_1.PortmanFuzzTypes.requestQueryParam === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType)) &&
!(types_1.PortmanFuzzTypes.requestHeader === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType)))
return;
var clonedVariation = JSON.parse(JSON.stringify(variation));
maximumNumberFields.forEach(function (field) {
var variationFuzzName = "".concat(pmOperation.item.name, "[").concat(variation.name, "][maximum number value ").concat(field.path, "]");
var numberVal = typeof field.value === 'number' ? field.value + 1 : Number(field.value) + 1;
var operationVariation = pmOperation.clone({
newId: (0, openapi_format_1.changeCase)(variationFuzzName, 'camelCase'),
name: variationFuzzName
});
_this.testSuite.registerOperationTestType(operationVariation, types_1.PortmanTestTypes.variation, false);
var newVariation = JSON.parse(JSON.stringify(clonedVariation));
if (!(newVariation === null || newVariation === void 0 ? void 0 : newVariation.overwrites))
newVariation.overwrites = [];
if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestBody) {
var fuzzRequestBody = {
key: field.path,
value: numberVal,
overwrite: true
};
_this.addOverwriteRequestBody(newVariation, fuzzRequestBody);
}
if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestQueryParam) {
var fuzzRequestQueryParam = {
key: field.path,
value: numberVal.toString(),
overwrite: true,
disable: false
};
_this.addOverwriteRequestQueryParam(newVariation, fuzzRequestQueryParam);
}
if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestHeader) {
var fuzzRequestHeader = {
key: field.path,
value: numberVal.toString(),
overwrite: true,
disable: false
};
_this.addOverwriteRequestHeader(newVariation, fuzzRequestHeader);
}
_this.variationWriter.injectVariations(operationVariation, oaOperation, newVariation, variationMeta);
_this.fuzzVariations.push(operationVariation);
});
};
Fuzzer.prototype.injectFuzzMinLengthVariation = function (pmOperation, oaOperation, variation, variationMeta, fuzzItems) {
var _this = this;
var minLengthFields = (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.minLengthFields) || [];
if (minLengthFields.length === 0)
return;
if (!(types_1.PortmanFuzzTypes.requestBody === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType)) &&
!(types_1.PortmanFuzzTypes.requestQueryParam === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType)) &&
!(types_1.PortmanFuzzTypes.requestHeader === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType)))
return;
var clonedVariation = JSON.parse(JSON.stringify(variation));
minLengthFields.forEach(function (field) {
var _a, _b, _c;
var variationFuzzName = "".concat(pmOperation.item.name, "[").concat(variation.name, "][minimum length ").concat(field.path, "]");
var reqObj, reqValue;
if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestBody) {
reqObj = JSON.parse(((_c = (_b = (_a = pmOperation === null || pmOperation === void 0 ? void 0 : pmOperation.item) === null || _a === void 0 ? void 0 : _a.request) === null || _b === void 0 ? void 0 : _b.body) === null || _c === void 0 ? void 0 : _c.raw) || '');
reqValue = (0, utils_1.getByPath)(reqObj, field.path);
}
if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestQueryParam) {
var queryParams = JSON.parse(JSON.stringify(pmOperation.item.request.url.query));
var pmQueryParam = queryParams.find(function (obj) {
return obj.key === field.field;
});
reqValue = pmQueryParam === null || pmQueryParam === void 0 ? void 0 : pmQueryParam.value;
}
if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestHeader) {
var reqHeaders = JSON.parse(JSON.stringify(pmOperation.item.request.headers));
var pmHeader = reqHeaders.find(function (obj) {
return obj.key === field.field;
});
reqValue = pmHeader === null || pmHeader === void 0 ? void 0 : pmHeader.value;
}
if (typeof reqValue === 'string' && reqValue.includes('{{') && reqValue.includes('}}')) {
if (reqValue.includes('{{$')) {
var pmVarGen = new PostmanDynamicVarGenerator_1.PostmanDynamicVarGenerator();
reqValue = pmVarGen.replaceDynamicVar(reqValue);
}
else {
return;
}
}
var newLenVal;
if (typeof reqValue === 'number' && typeof field.value === 'number') {
newLenVal = Number(reqValue.toString().substr(0, field.value - 1)) || 0;
}
if (typeof reqValue === 'string' && typeof field.value === 'number') {
newLenVal = reqValue.substring(0, field.value - 1);
}
if (Array.isArray(reqValue) && typeof field.value === 'number') {
var newLength = field.value - 1;
newLenVal = reqValue.slice(0, newLength);
}
var operationVariation = pmOperation.clone({
newId: (0, openapi_format_1.changeCase)(variationFuzzName, 'camelCase'),
name: variationFuzzName
});
_this.testSuite.registerOperationTestType(operationVariation, types_1.PortmanTestTypes.variation, false);
var newVariation = JSON.parse(JSON.stringify(clonedVariation));
if (!(newVariation === null || newVariation === void 0 ? void 0 : newVariation.overwrites))
newVariation.overwrites = [];
if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestBody && newLenVal !== undefined) {
var fuzzRequestBody = {
key: field.path,
value: newLenVal,
overwrite: true
};
_this.addOverwriteRequestBody(newVariation, fuzzRequestBody);
}
if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestQueryParam && newLenVal !== undefined) {
var fuzzRequestQueryParam = {
key: field.path,
value: newLenVal.toString(),
overwrite: true,
disable: false
};
_this.addOverwriteRequestQueryParam(newVariation, fuzzRequestQueryParam);
}
if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestHeader) {
var fuzzRequestHeader = {
key: field.path,
value: newLenVal.toString(),
overwrite: true,
disable: false
};
_this.addOverwriteRequestHeader(newVariation, fuzzRequestHeader);
}
_this.variationWriter.injectVariations(operationVariation, oaOperation, newVariation, variationMeta);
_this.fuzzVariations.push(operationVariation);
});
};
Fuzzer.prototype.injectFuzzMaxLengthVariation = function (pmOperation, oaOperation, variation, variationMeta, fuzzItems) {
var _this = this;
var maxLengthFields = (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.maxLengthFields) || [];
if (maxLengthFields.length === 0)
return;
if (!(types_1.PortmanFuzzTypes.requestBody === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType)) &&
!(types_1.PortmanFuzzTypes.requestQueryParam === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType)) &&
!(types_1.PortmanFuzzTypes.requestHeader === (fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType)))
return;
var clonedVariation = JSON.parse(JSON.stringify(variation));
maxLengthFields.forEach(function (field) {
var _a, _b, _c;
var variationFuzzName = "".concat(pmOperation.item.name, "[").concat(variation.name, "][maximum length ").concat(field.path, "]");
var reqObj, reqValue;
if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestBody) {
reqObj = JSON.parse(((_c = (_b = (_a = pmOperation === null || pmOperation === void 0 ? void 0 : pmOperation.item) === null || _a === void 0 ? void 0 : _a.request) === null || _b === void 0 ? void 0 : _b.body) === null || _c === void 0 ? void 0 : _c.raw) || '');
reqValue = (0, utils_1.getByPath)(reqObj, field.path);
}
if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestQueryParam) {
var queryParams = JSON.parse(JSON.stringify(pmOperation.item.request.url.query));
var pmQueryParam = queryParams.find(function (obj) {
return obj.key === field.field;
});
reqValue = pmQueryParam === null || pmQueryParam === void 0 ? void 0 : pmQueryParam.value;
}
if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestHeader) {
var reqHeaders = JSON.parse(JSON.stringify(pmOperation.item.request.headers));
var pmHeader = reqHeaders.find(function (obj) {
return obj.key === field.field;
});
reqValue = pmHeader === null || pmHeader === void 0 ? void 0 : pmHeader.value;
}
if (typeof reqValue === 'string' && reqValue.includes('{{') && reqValue.includes('}}')) {
if (reqValue.includes('{{$')) {
var pmVarGen = new PostmanDynamicVarGenerator_1.PostmanDynamicVarGenerator();
reqValue = pmVarGen.replaceDynamicVar(reqValue);
}
else {
return;
}
}
if (reqValue && typeof reqValue === 'number' && typeof field.value === 'number') {
field.value = Number(reqValue.toString().padEnd(field.value + 1, '0')) || reqValue;
}
if (reqValue && typeof reqValue === 'string' && typeof field.value === 'number' && reqValue) {
field.value = reqValue.padEnd(field.value + 1, reqValue.charAt(0));
}
if (Array.isArray(reqValue) && typeof field.value === 'number') {
field.value = reqValue.concat(Array(field.value + 1).fill(reqValue[0]));
}
var operationVariation = pmOperation.clone({
newId: (0, openapi_format_1.changeCase)(variationFuzzName, 'camelCase'),
name: variationFuzzName
});
_this.testSuite.registerOperationTestType(operationVariation, types_1.PortmanTestTypes.variation, false);
var newVariation = JSON.parse(JSON.stringify(clonedVariation));
if (!(newVariation === null || newVariation === void 0 ? void 0 : newVariation.overwrites))
newVariation.overwrites = [];
if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestBody && reqValue !== undefined) {
var fuzzRequestBody = {
key: field.path,
value: field.value,
overwrite: true
};
_this.addOverwriteRequestBody(newVariation, fuzzRequestBody);
}
if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestQueryParam && reqValue !== undefined) {
var fuzzRequestQueryParam = {
key: field.path,
value: field.value.toString(),
overwrite: true,
disable: false
};
_this.addOverwriteRequestQueryParam(newVariation, fuzzRequestQueryParam);
}
if ((fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.fuzzType) === types_1.PortmanFuzzTypes.requestHeader) {
var fuzzRequestHeader = {
key: field.path,
value: field.value.toString(),
overwrite: true,
disable: false
};
_this.addOverwriteRequestHeader(newVariation, fuzzRequestHeader);
}
_this.variationWriter.injectVariations(operationVariation, oaOperation, newVariation, variationMeta);
_this.fuzzVariations.push(operationVariation);
});
};
Fuzzer.prototype.analyzeFuzzJsonSchema = function (originalJsonSchema) {
var fuzzItems = {
fuzzType: types_1.PortmanFuzzTypes.requestBody,
requiredFields: [],
minimumNumberFields: [],
maximumNumberFields: [],
minLengthFields: [],
maxLengthFields: []
};
if (!originalJsonSchema)
return fuzzItems;
var jsonSchema = tslib_1.__assign({}, originalJsonSchema);
var skipSchemaKeys = ['properties', 'items', 'allOf', 'anyOf', 'oneOf'];
(0, legacy_1.default)(jsonSchema).forEach(function (node) {
var _a, _b, _c, _d, _e, _f, _g, _h;
var path = "";
var requiredPath = "";
var key = this.key;
if ((node === null || node === void 0 ? void 0 : node.allOf) || (node === null || node === void 0 ? void 0 : node.oneOf) || (node === null || node === void 0 ? void 0 : node.anyOf)) {
var SchemaObject_1 = (0, legacy_1.default)(node).clone();
var modelType = SchemaObject_1.anyOf ? 'anyOf' : SchemaObject_1.oneOf ? 'oneOf' : 'allOf';
SchemaObject_1[modelType].forEach(function (s) {
if ('type' in s) {
SchemaObject_1.type = s.type;
}
if ('properties' in s) {
SchemaObject_1.properties = Object.assign(SchemaObject_1.properties || {}, s.properties);
}
if ('required' in s) {
SchemaObject_1.required = tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read((SchemaObject_1.required || [])), false), tslib_1.__read(s.required), false);
}
if (!SchemaObject_1.allOf)
return;
});
delete SchemaObject_1[modelType];
this.update(SchemaObject_1);
node = SchemaObject_1;
}
if (key === 'anyOf' || key === 'oneOf' || key === 'allOf') {
this.delete();
}
if (node &&
(node.hasOwnProperty('minimum') ||
node.hasOwnProperty('maximum') ||
node.hasOwnProperty('minLength') ||
node.hasOwnProperty('maxLength') ||
(node === null || node === void 0 ? void 0 : node.required) ||
(node === null || node === void 0 ? void 0 : node.nullable))) {
this.parents.forEach(function (item) {
var _a, _b, _c;
var itemKey = item.key;
if (itemKey && ((_a = item === null || item === void 0 ? void 0 : item.node) === null || _a === void 0 ? void 0 : _a.type) === 'object' && !skipSchemaKeys.includes(itemKey)) {
path += "".concat(itemKey, ".");
}
if ((item === null || item === void 0 ? void 0 : item.key) && ((_b = item === null || item === void 0 ? void 0 : item.node) === null || _b === void 0 ? void 0 : _b.type) === 'array') {
path += "".concat(itemKey, "[0].");
}
if ((item === null || item === void 0 ? void 0 : item.isRoot) && ((_c = item === null || item === void 0 ? void 0 : item.node) === null || _c === void 0 ? void 0 : _c.type) === 'array') {
path += "[0].";
}
requiredPath = path;
});
}
if (node === null || node === void 0 ? void 0 : node.required) {
if ((node === null || node === void 0 ? void 0 : node.type) === 'object' && key && !skipSchemaKeys.includes(key)) {
requiredPath += "".concat(key, ".");
}
if (key !== 'properties' && Array.isArray(node.required)) {
var requiredFuzz = node.required.map(function (req) { return "".concat(requiredPath).concat(req); });
fuzzItems.requiredFields = fuzzItems.requiredFields.concat(requiredFuzz) || [];
}
}
if ((node === null || node === void 0 ? void 0 : node.nullable) === true && fuzzItems.requiredFields.length > 0) {
fuzzItems.requiredFields = fuzzItems.requiredFields.filter(function (item) { return item !== "".concat(requiredPath).concat(key); });
}
if (key !== 'properties') {
var pathBase = path;
var pathKey = key;
var fieldKey = key;
if (key === 'items' && ((_b = (_a = this === null || this === void 0 ? void 0 : this.parent) === null || _a === void 0 ? void 0 : _a.node) === null || _b === void 0 ? void 0 : _b.type) === 'array' && node.type !== 'object') {
pathBase = path.slice(0, path.length - 1);
pathKey = '';
fieldKey = '[0]';
}
if (node && node.hasOwnProperty('minimum')) {
(_c = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.minimumNumberFields) === null || _c === void 0 ? void 0 : _c.push({
path: "".concat(pathBase).concat(pathKey),
field: fieldKey,
value: node.minimum
});
}
if (node && node.hasOwnProperty('maximum')) {
(_d = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.maximumNumberFields) === null || _d === void 0 ? void 0 : _d.push({
path: "".concat(pathBase).concat(pathKey),
field: fieldKey,
value: node.maximum
});
}
if (node && node.hasOwnProperty('minLength') && !((_e = node === null || node === void 0 ? void 0 : node.type) === null || _e === void 0 ? void 0 : _e.includes('object'))) {
(_f = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.minLengthFields) === null || _f === void 0 ? void 0 : _f.push({
path: "".concat(pathBase).concat(pathKey),
field: fieldKey,
value: node.minLength
});
}
if (node && node.hasOwnProperty('maxLength') && !((_g = node === null || node === void 0 ? void 0 : node.type) === null || _g === void 0 ? void 0 : _g.includes('object'))) {
(_h = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.maxLengthFields) === null || _h === void 0 ? void 0 : _h.push({
path: "".concat(pathBase).concat(pathKey),
field: fieldKey,
value: node.maxLength
});
}
}
});
return fuzzItems;
};
Fuzzer.prototype.analyzeQuerySchema = function (queryParam) {
var _a, _b, _c, _d, _e;
var fuzzItems = {
fuzzType: types_1.PortmanFuzzTypes.requestQueryParam,
requiredFields: [],
minimumNumberFields: [],
maximumNumberFields: [],
minLengthFields: [],
maxLengthFields: []
};
if (!(queryParam === null || queryParam === void 0 ? void 0 : queryParam.schema) || !queryParam.name)
return fuzzItems;
var schema = queryParam === null || queryParam === void 0 ? void 0 : queryParam.schema;
if (queryParam === null || queryParam === void 0 ? void 0 : queryParam.required) {
(_a = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.requiredFields) === null || _a === void 0 ? void 0 : _a.push(queryParam.name);
}
if (schema && schema.hasOwnProperty('minimum')) {
(_b = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.minimumNumberFields) === null || _b === void 0 ? void 0 : _b.push({
path: queryParam.name,
field: queryParam.name,
value: schema.minimum
});
}
if (schema && schema.hasOwnProperty('maximum')) {
(_c = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.maximumNumberFields) === null || _c === void 0 ? void 0 : _c.push({
path: queryParam.name,
field: queryParam.name,
value: schema.maximum
});
}
if (schema && schema.hasOwnProperty('minLength')) {
(_d = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.minLengthFields) === null || _d === void 0 ? void 0 : _d.push({
path: queryParam.name,
field: queryParam.name,
value: schema.minLength
});
}
if (schema && schema.hasOwnProperty('maxLength')) {
(_e = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.maxLengthFields) === null || _e === void 0 ? void 0 : _e.push({
path: queryParam.name,
field: queryParam.name,
value: schema.maxLength
});
}
return fuzzItems;
};
Fuzzer.prototype.analyzeHeaderSchema = function (header) {
var _a, _b, _c, _d, _e;
var fuzzItems = {
fuzzType: types_1.PortmanFuzzTypes.requestHeader,
requiredFields: [],
minimumNumberFields: [],
maximumNumberFields: [],
minLengthFields: [],
maxLengthFields: []
};
if (!(header === null || header === void 0 ? void 0 : header.schema) || !header.name)
return fuzzItems;
var schema = header === null || header === void 0 ? void 0 : header.schema;
if (header === null || header === void 0 ? void 0 : header.required) {
(_a = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.requiredFields) === null || _a === void 0 ? void 0 : _a.push(header.name);
}
if (schema && schema.hasOwnProperty('minimum')) {
(_b = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.minimumNumberFields) === null || _b === void 0 ? void 0 : _b.push({
path: header.name,
field: header.name,
value: schema.minimum
});
}
if (schema && schema.hasOwnProperty('maximum')) {
(_c = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.maximumNumberFields) === null || _c === void 0 ? void 0 : _c.push({
path: header.name,
field: header.name,
value: schema.maximum
});
}
if (schema && schema.hasOwnProperty('minLength')) {
(_d = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.minLengthFields) === null || _d === void 0 ? void 0 : _d.push({
path: header.name,
field: header.name,
value: schema.minLength
});
}
if (schema && schema.hasOwnProperty('maxLength')) {
(_e = fuzzItems === null || fuzzItems === void 0 ? void 0 : fuzzItems.maxLengthFields) === null || _e === void 0 ? void 0 : _e.push({
path: header.name,
field: header.name,
value: schema.maxLength
});
}
return fuzzItems;
};
Fuzzer.prototype.addOverwriteRequestBody = function (variation, fuzzRequestBody) {
var idx = variation.overwrites.findIndex(function (obj) { return obj.overwriteRequestBody; });
if (idx === -1) {
variation.overwrites.push({ overwriteRequestBody: [fuzzRequestBody] });
}
else {
variation.overwrites[idx].overwriteRequestBody.push(fuzzRequestBody);
}
return variation;
};
Fuzzer.prototype.addOverwriteRequestQueryParam = function (variation, fuzzRequestQueryParam) {
var idx = variation.overwrites.findIndex(function (obj) { return obj.overwriteRequestQueryParams; });
if (idx === -1) {
variation.overwrites.push({ overwriteRequestQueryParams: [fuzzRequestQueryParam] });
}
else {
variation.overwrites[idx].overwriteRequestQueryParams.push(fuzzRequestQueryParam);
}
return variation;
};
Fuzzer.prototype.addOverwriteRequestHeader = function (variation, fuzzRequestHeader) {
var idx = variation.overwrites.findIndex(function (obj) { return obj.overwriteRequestHeaders; });
if (idx === -1) {
variation.overwrites.push({ overwriteRequestHeaders: [fuzzRequestHeader] });
}
else {
variation.overwrites[idx].overwriteRequestHeaders.push(fuzzRequestHeader);
}
return variation;
};
return Fuzzer;
}());
exports.Fuzzer = Fuzzer;
//# sourceMappingURL=Fuzzer.js.map