in scripts/lua/management/lib/swagger.lua [213:260]
function _M.parseSwagger(swagger)
local backends = parseBackends(swagger)
local policies = parsePolicies(swagger)
local security = parseSecurity(swagger)
local corsObj = parseCors(swagger)
local decoded = {
name = swagger.info.title,
basePath = swagger.basePath,
resources = {}
}
for path, verbObj in pairs(swagger.paths) do
decoded.resources[path] = { operations = {} }
decoded.resources[path].cors = corsObj
for verb, value in pairs(verbObj) do
decoded.resources[path].operations[verb] = {}
local verbObj = decoded.resources[path].operations[verb]
verbObj.policies = utils.deepCloneTable(policies) or {}
verbObj.security = security
if backends ~= nil then
local backend = (backends["all"] ~= nil) and backends["all"] or backends[value.operationId]
verbObj.backendUrl = backend.backendUrl
verbObj.backendMethod = (backend.backendMethod == 'keep') and verb or backend.backendMethod
if backend.policy ~= nil then
local globalReqMappingPolicy = nil;
for _, policy in pairs(verbObj.policies) do
if policy.type == 'reqMapping' then
globalReqMappingPolicy = policy;
end
end
if globalReqMappingPolicy ~= nil then
for _, v in pairs(backend.policy.value) do
globalReqMappingPolicy.value[#globalReqMappingPolicy.value+1] = v
end
else
verbObj.policies[#verbObj.policies+1] = {
type = 'reqMapping',
value = backend.policy.value
}
end
end
else
verbObj.backendUrl = ''
verbObj.backendMethod = verb
end
end
end
return decoded
end