summaryrefslogtreecommitdiffhomepage
path: root/libs/sgi-webuci
diff options
context:
space:
mode:
authorSteven Barth <steven@midlink.org>2008-06-14 14:12:12 +0000
committerSteven Barth <steven@midlink.org>2008-06-14 14:12:12 +0000
commit855b7582d3576f45693e3a48fdb253c813cf4dce (patch)
treeb912f63dc43f3b696385083542c801dba8c53976 /libs/sgi-webuci
parent50fd29841540bb8b1735291b72853454679e9e62 (diff)
* Rewrote Luci to be coroutine-safe allowing the use of non-forking webservers
* Setting base version to 0.7
Diffstat (limited to 'libs/sgi-webuci')
-rw-r--r--libs/sgi-webuci/luasrc/sgi/webuci.lua113
-rw-r--r--libs/sgi-webuci/root/usr/lib/boa/luci.lua3
2 files changed, 29 insertions, 87 deletions
diff --git a/libs/sgi-webuci/luasrc/sgi/webuci.lua b/libs/sgi-webuci/luasrc/sgi/webuci.lua
index a40888e7e..abe279d05 100644
--- a/libs/sgi-webuci/luasrc/sgi/webuci.lua
+++ b/libs/sgi-webuci/luasrc/sgi/webuci.lua
@@ -24,93 +24,36 @@ limitations under the License.
]]--
module("luci.sgi.webuci", package.seeall)
-
-local status_set = false
-
--- Initialize the environment
-function initenv(env, vars)
- luci.http.env = env
- luci.http.vars = vars
-end
-
--- Enforces user authentification
-function luci.http.basic_auth(verify_callback, realm)
- local user = luci.http.env.auth_user
- local pass = luci.http.env.auth_password
- realm = realm or ""
+require("luci.http")
+require("luci.util")
+require("luci.dispatcher")
+
+function run(env, vars)
+ local r = luci.http.Request()
+ r.env = env
+ r.request = vars
- if not user or not verify_callback(user, pass) then
- luci.http.status("401", "Unauthorized")
- luci.http.header("WWW-Authenticate", string.format('Basic realm="%s"', realm))
- return false
- else
- return true
- end
-end
-
--- Returns the main dispatcher URL
-function luci.http.dispatcher()
- return luci.http.env.SCRIPT_NAME or ""
-end
-
--- Returns the upload dispatcher URL
-function luci.http.dispatcher_upload()
- -- To be implemented
-end
-
--- Returns a table of all COOKIE, GET and POST Parameters
-function luci.http.formvalues()
- return luci.http.vars
-end
-
--- Gets form value from key
-function luci.http.formvalue(key, default)
- return luci.http.formvalues()[key] or default
-end
-
--- Gets a table of values with a certain prefix
-function luci.http.formvaluetable(prefix)
- local vals = {}
- prefix = prefix and prefix .. "." or "."
+ local x = coroutine.create(luci.dispatcher.httpdispatch)
- for k, v in pairs(luci.http.formvalues()) do
- if k:find(prefix, 1, true) == 1 then
- vals[k:sub(#prefix + 1)] = v
+ while coroutine.status(x) ~= "dead" do
+ local res, id, data1, data2 = coroutine.resume(x, r)
+
+ if not res then
+ print(env.SERVER_PROTOCOL .. " 500 Internal Server Error")
+ print("Content-Type: text/plain\n")
+ print(id)
+ break;
end
+
+ if id == 1 then
+ io.write(env.SERVER_PROTOCOL .. " " .. tostring(data1) .. " " .. data2 .. "\n")
+ elseif id == 2 then
+ io.write(data1 .. ": " .. data2 .. "\n")
+ elseif id == 3 then
+ io.write("\n")
+ elseif id == 4 then
+ io.write(data1)
+ end
+
end
-
- return vals
-end
-
--- Sends a custom HTTP-Header
-function luci.http.header(key, value)
- print(key .. ": " .. value)
-end
-
--- Set Content-Type
-function luci.http.prepare_content(type)
- if not status_set then
- luci.http.status(200, "OK")
- end
-
- print("Content-Type: "..type.."\n")
-end
-
--- Asks the browser to redirect to "url"
-function luci.http.redirect(url)
- luci.http.status(302, "Found")
- luci.http.header("Location", url)
- print()
-end
-
--- Returns the path of an uploaded file
--- WARNING! File uploads can be easily spoofed! Do additional sanity checks!
-function luci.http.upload(name)
- -- To be implemented
-end
-
--- Sets HTTP-Status-Header
-function luci.http.status(code, message)
- print(luci.http.env.SERVER_PROTOCOL .. " " .. tostring(code) .. " " .. message)
- status_set = true
end
diff --git a/libs/sgi-webuci/root/usr/lib/boa/luci.lua b/libs/sgi-webuci/root/usr/lib/boa/luci.lua
index 39cee1c60..879ef19b4 100644
--- a/libs/sgi-webuci/root/usr/lib/boa/luci.lua
+++ b/libs/sgi-webuci/root/usr/lib/boa/luci.lua
@@ -60,6 +60,5 @@ function handle_req(context)
env.SERVER_ADDR = context.server_addr
env.SCRIPT_NAME = env.REQUEST_URI:sub(1, #env.REQUEST_URI - #env.PATH_INFO)
- luci.sgi.webuci.initenv(env, vars)
- luci.dispatcher.httpdispatch()
+ luci.sgi.webuci.run(env, vars)
end