diff options
Diffstat (limited to 'libs/web')
-rw-r--r-- | libs/web/luasrc/http.lua | 53 |
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) |