touch up cgi.lua

This commit is contained in:
Neale Pickett 2015-04-17 17:13:34 -06:00
parent 9c17766c64
commit f81fa989c9
2 changed files with 44 additions and 20 deletions

View File

@ -3,7 +3,28 @@
local cgi = {} local cgi = {}
cgi.POST_MAX = 512 cgi.POST_MAX = 512
local getc = {}
local CL = tonumber(os.getenv("CONTENT_LENGTH")) or 0
function getc_post()
if (CL > 0) then
CL = CL - 1
return io.read(1)
else
return nil
end
end
local query = os.getenv("QUERY_STRING") or ""
local query_len = query:len()
local query_pos = 0
function getc_get()
if (query_pos < query_len) then
query_pos = query_pos + 1
return string.sub(query, query_pos, query_pos)
else
return nil
end
end
function cgi.http_error(code, name, info) function cgi.http_error(code, name, info)
print(code .. " " .. name) print(code .. " " .. name)
@ -22,19 +43,11 @@ function cgi.init()
cgi.http_error(415, "Unsupported content-type", "You are sending me data in a format I can't process") cgi.http_error(415, "Unsupported content-type", "You are sending me data in a format I can't process")
end end
local CL = tonumber(os.getenv("CONTENT_LENGTH")) or 0
if (CL > cgi.POST_MAX) then if (CL > cgi.POST_MAX) then
cgi.http_error(413, "Post Data Too Long", "You are sending me more data than I'm prepared to handle") cgi.http_error(413, "Post Data Too Long", "You are sending me more data than I'm prepared to handle")
end end
function getc() getc = getc_post
if (CL > 0) then
CL = CL - 1
return io.read(1)
else
return nil
end
end
elseif (method == "GET") then elseif (method == "GET") then
local query = os.getenv("QUERY_STRING") or "" local query = os.getenv("QUERY_STRING") or ""
local query_pos = 0 local query_pos = 0
@ -43,14 +56,7 @@ function cgi.init()
cgi.http_error(413, "Query Data Too Long", "You are sending me more data than I'm prepared to handle") cgi.http_error(413, "Query Data Too Long", "You are sending me more data than I'm prepared to handle")
end end
function getc() getc = getc_get
if (query_pos < query_len) then
query_pos = query_pos + 1
return string.sub(query, query_pos, query_pos)
else
return nil
end
end
else else
cgi.http_error(405, "Method not allowed", "I only do GET and POST.") cgi.http_error(405, "Method not allowed", "I only do GET and POST.")
end end
@ -79,6 +85,20 @@ function cgi.item()
end end
end end
function cgi.fields()
local ret = {}
while (true) do
local k = cgi.item()
local v = cgi.item()
if (k == "") then
return ret
end
ret[k] = v
end
end
function cgi.escape(s) function cgi.escape(s)
s = string.gsub(s, "&", "&amp;") s = string.gsub(s, "&", "&amp;")
s = string.gsub(s, "<", "&lt;") s = string.gsub(s, "<", "&lt;")
@ -87,4 +107,3 @@ function cgi.escape(s)
end end
return cgi return cgi

View File

@ -3,4 +3,9 @@
local cgi = require "cgi" local cgi = require "cgi"
cgi.init() cgi.init()
print(cgi.item()) fields = cgi.fields()
print("Content-type: text/html")
print()
print("<pre>")
print(fields["t"])
print("</pre>")