2015-08-05 22:22:06 +02:00
|
|
|
#!/usr/bin/lua
|
|
|
|
|
|
|
|
local host = os.getenv("HTTP_HOST")
|
|
|
|
local proto = os.getenv("SERVER_PROTOCOL")
|
|
|
|
local query = os.getenv("QUERY_STRING")
|
|
|
|
local method = os.getenv("REQUEST_METHOD")
|
|
|
|
local clength = os.getenv("CONTENT_LENGTH")
|
|
|
|
local ctype = os.getenv("CONTENT_TYPE")
|
|
|
|
|
2015-09-24 19:09:08 +02:00
|
|
|
function http_print(s)
|
|
|
|
if s then
|
|
|
|
io.stdout:write(tostring(s).."\r\n")
|
|
|
|
else
|
|
|
|
io.stdout:write("\r\n")
|
|
|
|
end
|
2015-08-05 22:22:06 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
function SendError(err,desc)
|
2015-09-24 19:09:08 +02:00
|
|
|
http_print(proto.." "..err)
|
|
|
|
http_print("Content-Type: text/html")
|
|
|
|
http_print()
|
2015-08-05 22:22:06 +02:00
|
|
|
local file = io.open("e404.html")
|
|
|
|
if file then
|
|
|
|
local tmp = file:read("*a")
|
|
|
|
tmp = string.gsub(tmp,"404 Not Found",err .. " " .. desc)
|
2015-09-24 19:09:08 +02:00
|
|
|
http_print(tmp)
|
2015-08-05 22:22:06 +02:00
|
|
|
file:close()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2015-09-24 19:09:08 +02:00
|
|
|
if arg[1] then
|
|
|
|
query = arg[1]
|
|
|
|
if query == "get" then query = "" end
|
|
|
|
proto = "HTTP/1.0"
|
|
|
|
host = "local"
|
|
|
|
end
|
|
|
|
|
2015-08-05 22:22:06 +02:00
|
|
|
local path = nil
|
|
|
|
local tmp = "/var/tmp/xxxx"
|
|
|
|
|
|
|
|
if method ~= "POST" or not clength or not ctype then
|
|
|
|
SendError("404","?")
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
if not string.match(ctype,"multipart/form%-data") then
|
|
|
|
SendError("404","??")
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
local boundary = string.match(ctype,"boundary=(.*)")
|
|
|
|
if not boundary then
|
|
|
|
SendError("404","???")
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
local filename = nil
|
|
|
|
|
|
|
|
while true do
|
|
|
|
local line = io.stdin:read()
|
|
|
|
line = string.gsub(line,"\r","")
|
|
|
|
if line == "" then break end
|
|
|
|
if not filename then
|
|
|
|
filename = string.match(line,'filename=%"(.*)%"')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
data = io.stdin:read("*a")
|
|
|
|
data = string.sub(data,1,#data - #boundary - 4)
|
|
|
|
|
|
|
|
local file = io.open("/tmp/"..filename,"w")
|
|
|
|
if file then
|
|
|
|
file:write(data)
|
|
|
|
file:close()
|
|
|
|
end
|
|
|
|
|
|
|
|
if string.match(filename,"%.tar%.gz$") then
|
|
|
|
os.execute("rm -rf /config/channels;mkdir /config/channels;cd /config/channels;gunzip -c /tmp/"..filename.."|tar -xf -");
|
|
|
|
elseif string.match(filename,"%.zip$") then
|
|
|
|
os.execute("rm -rf /config/channels;mkdir /config/channels;cd /config/channels;unzip -q /tmp/"..filename);
|
|
|
|
end
|
|
|
|
|
|
|
|
os.remove("/tmp/"..filename)
|
|
|
|
|
|
|
|
-- TODO validate
|
|
|
|
|
2015-09-24 19:09:08 +02:00
|
|
|
http_print(proto.." 303")
|
|
|
|
http_print("Location: http://"..host.."/reboot.html")
|
|
|
|
http_print()
|
2015-08-05 22:22:06 +02:00
|
|
|
|