in scripts/lua/routing.lua [87:166]
function _M.processCall(dataStore)
local requestHeaders = ngx.req.get_headers()
local tenantId = ngx.var.tenant
if SNAPSHOTTING == 'true' then
dataStore:setSnapshotId(tenantId)
end
local gatewayPath = ngx.var.gatewayPath
local _ , j = ngx.var.request_uri:find("/api/([^/]+)")
ngx.var.analyticsUri = ngx.var.request_uri:sub(j+1)
if ngx.req.get_headers()["x-debug-mode"] == "true" then
setRequestLogs()
end
local redisKey = _M.findResource(dataStore, tenantId, gatewayPath)
if redisKey == nil then
request.err(404, 'Not found.')
end
local resource = dataStore:getResource(redisKey, "resources")
if resource == nil then
request.err(404, 'Snapshot not found.')
end
local obj = cjson.decode(resource)
cors.processCall(obj)
ngx.var.tenantNamespace = obj.tenantNamespace
ngx.var.tenantInstance = obj.tenantInstance
ngx.var.apiId = obj.apiId
for verb, opFields in pairs(obj.operations) do
if string.upper(verb) == ngx.req.get_method() then
local key
if (opFields.security) then
for _, sec in ipairs(opFields.security) do
local result = security.process(dataStore, sec)
if key == nil and sec.type ~= "oauth2" then
key = result
end
end
end
if opFields.backendMethod ~= nil then
setVerb(opFields.backendMethod)
end
backendRouting.setRoute(opFields.backendUrl, gatewayPath)
local requestScheme = requestHeaders["X-Forwarded-Proto"]
if requestScheme == nil or requestScheme == "" then
requestScheme = ngx.var.scheme
end
local requestHost = requestHeaders["X-Forwarded-Host"]
if requestHost == nil or requestHost == "" then
requestHost = ngx.var.host
end
local requestUrl = utils.concatStrings({requestScheme, "://", requestHost})
local prefix = requestHeaders["X-Forwarded-Prefix"]
if prefix ~= nil and prefix ~= "" then
requestUrl = utils.concatStrings({requestUrl, prefix})
end
local requestUri = requestHeaders["X-Forwarded-Uri"]
if requestUri == nil or requestUri == "" then
requestUri = ngx.var.request_uri
end
ngx.req.set_header("X-Forwarded-Url", utils.concatStrings({requestUrl, requestUri}))
if opFields.policies ~= nil then
parsePolicies(dataStore, opFields.policies, key)
end
if requestHeaders["x-debug-mode"] == "true" then
setRequestLogs()
end
dataStore:close()
return nil
end
end
request.err(404, 'Whoops. Verb not supported.')
end