2013-07-05 17:26:39 +02:00
|
|
|
local urlcode = require("util.urlcode")
|
|
|
|
|
2013-07-08 13:34:27 +02:00
|
|
|
local M = {}
|
|
|
|
M.__index = M
|
2013-07-05 17:26:39 +02:00
|
|
|
|
2013-07-08 13:34:27 +02:00
|
|
|
local function kvTableFromUrlEncodedString(encodedText)
|
|
|
|
local args = {}
|
|
|
|
if (encodedText ~= nil) then
|
|
|
|
urlcode.parsequery(encodedText, args)
|
|
|
|
end
|
|
|
|
return args
|
|
|
|
end
|
2013-07-05 17:26:39 +02:00
|
|
|
|
2013-07-08 13:34:27 +02:00
|
|
|
local function kvTableFromArray(argArray)
|
|
|
|
local args = {}
|
|
|
|
|
|
|
|
for _, v in ipairs(argArray) do
|
2013-07-05 17:26:39 +02:00
|
|
|
local split = v:find("=")
|
|
|
|
if split ~= nil then
|
2013-07-08 13:34:27 +02:00
|
|
|
args[v:sub(1, split - 1)] = v:sub(split + 1)
|
|
|
|
else
|
|
|
|
args[v] = true
|
2013-07-05 17:26:39 +02:00
|
|
|
end
|
|
|
|
end
|
2013-07-08 13:34:27 +02:00
|
|
|
|
|
|
|
return args
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
setmetatable(M, {
|
|
|
|
__call = function(cls, ...)
|
|
|
|
return cls.new(...)
|
|
|
|
end
|
|
|
|
})
|
|
|
|
|
|
|
|
function M.new(postData, debug)
|
|
|
|
local self = setmetatable({}, M)
|
|
|
|
|
|
|
|
--NOTE: is it correct to assume that absence of REQUEST_METHOD indicates command line invocation?
|
|
|
|
self.requestMethod = os.getenv("REQUEST_METHOD")
|
|
|
|
if self.requestMethod ~= nil then
|
|
|
|
self.remoteHost = os.getenv("REMOTE_HOST")
|
|
|
|
self.remotePort = os.getenv("REMOTE_PORT")
|
|
|
|
self.userAgent = os.getenv("HTTP_USER_AGENT")
|
|
|
|
else
|
|
|
|
self.requestMethod = "CMDLINE"
|
|
|
|
end
|
|
|
|
|
|
|
|
self.cmdLineArgs = kvTableFromArray(arg)
|
|
|
|
self.getArgs = kvTableFromUrlEncodedString(os.getenv("QUERY_STRING"))
|
|
|
|
self.postArgs = kvTableFromUrlEncodedString(postData)
|
|
|
|
|
|
|
|
--TEMP: until these can be extracted from the url path itself
|
|
|
|
self.apiModule = self.getArgs["m"]
|
|
|
|
self.apiFunction = self.getArgs["f"]
|
|
|
|
|
|
|
|
if debug then
|
|
|
|
self.apiModule = self.cmdLineArgs["m"] or self.apiModule
|
|
|
|
self.apiFunction = self.cmdLineArgs["f"] or self.apiFunction
|
|
|
|
end
|
|
|
|
|
2013-07-08 16:53:45 +02:00
|
|
|
if self.apiModule == "" then self.apiModule = nil end
|
|
|
|
if self.apiFunction == "" then self.apiFunction = nil end
|
|
|
|
|
2013-07-08 13:34:27 +02:00
|
|
|
return self
|
|
|
|
end
|
|
|
|
|
|
|
|
function M:getRequestMethod()
|
|
|
|
return self.requestMethod
|
|
|
|
end
|
|
|
|
|
|
|
|
function M:getApiModule()
|
|
|
|
return self.apiModule
|
|
|
|
end
|
|
|
|
|
|
|
|
function M:getApiFunction()
|
|
|
|
return self.apiFunction
|
|
|
|
end
|
|
|
|
|
|
|
|
function M:getBlankArgument()
|
|
|
|
return self.blankArgument
|
|
|
|
end
|
|
|
|
|
|
|
|
function M:setBlankArgument(arg)
|
|
|
|
self.blankArgument = arg
|
|
|
|
end
|
|
|
|
|
|
|
|
function M:getRemoteHost() return self.remoteHost or "" end
|
|
|
|
function M:getRemotePort() return self.remotePort or 0 end
|
|
|
|
function M:getUserAgent() return self.userAgent or "" end
|
|
|
|
|
|
|
|
function M:get(key)
|
|
|
|
if self.requestMethod == "GET" then
|
|
|
|
return self.getArgs[key]
|
|
|
|
elseif self.requestMethod == "POST" then
|
|
|
|
return self.postArgs[key]
|
|
|
|
elseif self.requestMethod == "CMDLINE" then
|
|
|
|
return self.cmdLineArgs[key]
|
|
|
|
else
|
|
|
|
return nil
|
|
|
|
end
|
2013-07-05 17:26:39 +02:00
|
|
|
end
|
2013-07-08 13:34:27 +02:00
|
|
|
|
|
|
|
function M:getAll()
|
|
|
|
if self.requestMethod == "GET" then
|
|
|
|
return self.getArgs
|
|
|
|
elseif self.requestMethod == "POST" then
|
|
|
|
return self.postArgs
|
|
|
|
elseif self.requestMethod == "CMDLINE" then
|
|
|
|
return self.cmdLineArgs
|
|
|
|
else
|
|
|
|
return nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
return M
|