Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
} else if (req.headers.hasOwnProperty(mockHeaderKey)) {
mock = parseMockValue('header', responseCodes, req.headers[mockHeaderKey])
} else if (automatic) {
mock = {
origin: 'automatic',
source: '',
specified: false,
statusCode: responseCodes[0] || ''
}
}
// if skipping mock then call next middleware
if (!mock) return next()
const version = _openapi.swagger ? 2 : +/^(\d+)/.exec(_openapi.openapi)[0]
const exception = new Enforcer.Exception('Unable to generate mock response')
exception.statusCode = 400
if (operation.responses.hasOwnProperty(mock.statusCode)) mock.response = operation.responses[mock.statusCode]
req[options.reqMockProperty] = mock
// if a controller is provided then call it
if (!mock.source || mock.source === 'controller') {
if (controller) {
res.set(ENFORCER_HEADER, 'mock:controller')
debug.controllers('executing mock controller')
try {
controller(req, res, next)
} catch (err) {
next(err)
}
return
const rootController = openapi && openapi[xController]
// validate input
let controllersTargetType = typeof controllersTarget
const mockStr = isMock ? 'mock ' : ''
if (controllersTargetType !== 'function' && controllersTargetType !== 'string' && !isNonNullObject(controllersTarget)) {
const exception = new Enforcer.Exception('Unable to load ' + mockStr + 'controllers')
exception.message('Controllers target must be a string, a non-null object, or a function that returns a non-null object')
throw Error(exception.toString())
}
// if the controllers target is a function then execute it
if (controllersTargetType === 'function') {
controllersTarget = controllersTarget.apply(undefined, dependencyInjection)
if (!isNonNullObject(controllersTarget)) {
const exception = new Enforcer.Exception('Unable to load ' + mockStr + 'controllers')
exception.message('Controllers target function must return a non-null object')
throw Error(exception.toString())
}
}
const controllerTargetIsString = typeof controllersTarget === 'string'
const exception = controllerTargetIsString
? new Enforcer.Exception('Unable to load one or more ' + mockStr + 'directory controllers within ' + controllersTarget)
: new Enforcer.Exception('Unable to load one or more ' + mockStr + 'controllers')
Object.keys(openapi.paths).forEach(pathKey => {
const pathItem = openapi.paths[pathKey]
const pathController = pathItem[xController]
pathItem.methods.forEach(method => {
const operation = pathItem && pathItem[method]
}
// if the controllers target is a function then execute it
if (controllersTargetType === 'function') {
controllersTarget = controllersTarget.apply(undefined, dependencyInjection)
if (!isNonNullObject(controllersTarget)) {
const exception = new Enforcer.Exception('Unable to load ' + mockStr + 'controllers')
exception.message('Controllers target function must return a non-null object')
throw Error(exception.toString())
}
}
const controllerTargetIsString = typeof controllersTarget === 'string'
const exception = controllerTargetIsString
? new Enforcer.Exception('Unable to load one or more ' + mockStr + 'directory controllers within ' + controllersTarget)
: new Enforcer.Exception('Unable to load one or more ' + mockStr + 'controllers')
Object.keys(openapi.paths).forEach(pathKey => {
const pathItem = openapi.paths[pathKey]
const pathController = pathItem[xController]
pathItem.methods.forEach(method => {
const operation = pathItem && pathItem[method]
const operationController = operation && operation[xController]
const controllerName = operationController || pathController || rootController
const operationName = operation && (operation[xOperation] || operation.operationId)
if (controllerName && operationName) {
const child = exception.at(controllerName)
let handler
// load controller from file path
if (controllerTargetIsString) {
function mapControllers (openapi, isMock, controllersTarget, dependencyInjection, options) {
const loadedControllers = {}
const map = new Map()
const xController = options.xController
const xOperation = options.xOperation
const rootController = openapi && openapi[xController]
// validate input
let controllersTargetType = typeof controllersTarget
const mockStr = isMock ? 'mock ' : ''
if (controllersTargetType !== 'function' && controllersTargetType !== 'string' && !isNonNullObject(controllersTarget)) {
const exception = new Enforcer.Exception('Unable to load ' + mockStr + 'controllers')
exception.message('Controllers target must be a string, a non-null object, or a function that returns a non-null object')
throw Error(exception.toString())
}
// if the controllers target is a function then execute it
if (controllersTargetType === 'function') {
controllersTarget = controllersTarget.apply(undefined, dependencyInjection)
if (!isNonNullObject(controllersTarget)) {
const exception = new Enforcer.Exception('Unable to load ' + mockStr + 'controllers')
exception.message('Controllers target function must return a non-null object')
throw Error(exception.toString())
}
}
const controllerTargetIsString = typeof controllersTarget === 'string'
const exception = controllerTargetIsString
OpenApiEnforcerMiddleware.prototype.middleware = function () {
const extractValue = Enforcer.v3_0.Schema.extractValue // v2 and v3 extractValue is the same
const options = this.options
return (_req, res, _next) => {
// store original send
const send = res.send
function next (err) {
res.send = send
if (err) return _next(err)
_next()
}
this.promise
.then(openapi => {
// make a copy of the request to be used just within this middleware
const req = Object.create(Object.getPrototypeOf(_req))
Object.assign(req, _req)