local var = {} local post_var = {} local header = {} local req_header = {} local resp_body = nil local function cookie_time(time) return tostring(time) end local function now() return 1626546790.456 end local function set_req_header(k, v) req_header[k] = v var["http_" .. k:lower()] = v end local function get_req_header(_, k) return req_header[k] end local function reset_req_header() req_header = {} end local function set_header(_, k, v) if k == "Set-Cookie" then header[k] = {v = v, link = header[k]} else header[k] = v end end local function get_header(_, k) return header[k] end local function reset_header() header = {} end local function set_var(_, k, v) var[k] = v end local function get_var(_, k) return var[k] end local function reset_var() var = {} end local function set_post_var(_, k, v) post_var[k] = v end local function get_post_var(_, k) return post_var[k] end local function reset_post_var() post_var = {} end local function decode_args(argstr) local params = {} for p in argstr:gmatch("([^?&=]+[^?&]*)") do local eq, _ = p:find("=") if eq then params[p:sub(1, eq - 1)] = p:sub(eq + 1):lower() -- lower → fake URL-decoding else params[p] = true end end return params end local function escape_uri(uri) return uri end local function exit(status) return status end local function redirect(url, status) return tostring(status) .. ":" .. url end local function reset_resp_body() resp_body = nil end local function say(set_or_get) if set_or_get then resp_body = set_or_get else return resp_body end end local function log(level, message) print(level .. message) end return { cookie_time = cookie_time, decode_args = decode_args, exit = exit, escape_uri = escape_uri, header = setmetatable({}, {__newindex = set_header, __index = get_header}), log = log, DEBUG = "DEBUG: ", INFO = "INFO: ", ERROR = "ERROR: ", now = now, post_var = setmetatable({}, {__newindex = set_post_var, __index = get_post_var}), redirect = redirect, req = { get_post_args = function() return post_var end, header = setmetatable({}, {__newindex = function(_,k,v) set_req_header(k,v) end, __index = get_req_header}), read_body = function() end, reset = reset_req_header, set_header = set_req_header, }, reset_header = reset_header, reset_post_var = reset_post_var, reset_resp_body = reset_resp_body, reset_var = reset_var, say = say, var = setmetatable({}, {__newindex = set_var, __index = get_var}), }