function _M.processCall()

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