summaryrefslogtreecommitdiffhomepage
path: root/libs/web
diff options
context:
space:
mode:
Diffstat (limited to 'libs/web')
-rw-r--r--libs/web/luasrc/http.lua53
1 files changed, 25 insertions, 28 deletions
diff --git a/libs/web/luasrc/http.lua b/libs/web/luasrc/http.lua
index bb05c680b..37050e478 100644
--- a/libs/web/luasrc/http.lua
+++ b/libs/web/luasrc/http.lua
@@ -7,9 +7,6 @@ HTTP-Header manipulator and form variable preprocessor
FileId:
$Id$
-ToDo:
-- Cookie handling
-
License:
Copyright 2008 Steven Barth <steven@midlink.org>
@@ -51,22 +48,14 @@ function Request.__init__(self, env, sourcein, sinkerr)
params = luci.http.protocol.urldecode_params(env.QUERY_STRING or ""),
}
- setmetatable(self.message.params, {__index =
- function(tbl, key)
- setmetatable(tbl, nil)
-
- luci.http.protocol.parse_message_body(
- self.input,
- self.message,
- self.filehandler
- )
-
- return rawget(tbl, key)
- end
- })
+ self.parsed_input = false
end
function Request.formvalue(self, name, default)
+ if not self.parsed_input then
+ self:_parse_input()
+ end
+
if name then
return self.message.params[name] and tostring(self.message.params[name]) or default
else
@@ -78,6 +67,10 @@ function Request.formvaluetable(self, prefix)
local vals = {}
prefix = prefix and prefix .. "." or "."
+ if not self.parsed_input then
+ self:_parse_input()
+ end
+
local void = self.message.params[nil]
for k, v in pairs(self.message.params) do
if k:find(prefix, 1, true) == 1 then
@@ -88,6 +81,13 @@ function Request.formvaluetable(self, prefix)
return vals
end
+function Request.getcookie(self, name)
+ local c = string.gsub(";" .. (self:getenv("HTTP_COOKIE") or "") .. ";", "%s*;%s*", ";")
+ local p = ";" .. name .. "=(.-);"
+ local i, j, value = cookies:find(p)
+ return value and urldecode(value)
+end
+
function Request.getenv(self, name)
if name then
return self.message.env[name]
@@ -100,6 +100,15 @@ function Request.setfilehandler(self, callback)
self.filehandler = callback
end
+function Request._parse_input(self)
+ luci.http.protocol.parse_message_body(
+ self.input,
+ self.message,
+ self.filehandler
+ )
+ self.parsed_input = true
+end
+
function close()
if not context.eoh then
@@ -177,18 +186,6 @@ function write(content)
coroutine.yield(4, content)
end
-
-function basic_auth(realm, errorpage)
- header("Status", "401 Unauthorized")
- header("WWW-Authenticate", string.format('Basic realm="%s"', realm or ""))
-
- if errorpage then
- errorpage()
- end
-
- close()
-end
-
function redirect(url)
header("Status", "302 Found")
header("Location", url)