aboutsummaryrefslogtreecommitdiff
path: root/req-params.lua
blob: 077a7e4a8dc03ae0f1e0644b02e0431d12089720 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
-- /var/www/cgi-bin/cgi.lua
-- Simple Lua CGI helper for GET and POST

local params = {}

-- Parse URL-encoded query string into a table
local function parse_query(qs)
    local t = {}
    for k, v in string.gmatch(qs or "", "([^&=]+)=([^&]*)") do
        -- URL-decode
        k = k:gsub("+", " "):gsub("%%(%x%x)", function(h) return string.char(tonumber(h,16)) end)
        v = v:gsub("+", " "):gsub("%%(%x%x)", function(h) return string.char(tonumber(h,16)) end)
        t[k] = v
    end
    return t
end

-- GET parameters
params.get_params = parse_query(os.getenv("QUERY_STRING"))

-- POST parameters
params.post_params = {}
local content_length = tonumber(os.getenv("CONTENT_LENGTH") or 0)
if content_length > 0 then
    local body = io.read(content_length)
    params.post_params = parse_query(body)
end

-- Convenience functions
function params.get(key) return params.get_params[key] end
function params.post(key) return params.post_params[key] end

-- Combine GET+POST if you want
function params.param(key)
    return params.post(key) or params.get(key)
end

return params