46d047ea026b841c4ad24a711b37af0e091067fe
[lua-filemanager.git] / www / cgi-bin / fs-upload
1 #!/usr/bin/lua
2
3 local cgi = require "cgi"
4 local uci = require("uci")
5 local fs = require("nixio.fs")
6 local os = require("os")
7 local json = require("json")
8
9 local req = {}
10
11 local function is_in_dir(file, dir)
12   if file == dir then
13     return true
14   else   
15     return file:sub(1, #dir) == dir
16   end  
17 end
18
19 print("\r")
20
21 cgi.new(req)
22
23 if req.boundary then
24    ret, msg = cgi.parse_request_body(req)
25 end
26
27 destfile=io.open(req.post["destination"][1]["tempname"],"r")
28 destination=destfile:read("*all")
29
30 local u_c = uci.cursor()
31 local basepath = u_c.get("filemanager","config","basedir")
32
33 for k, v in pairs(req.post) do
34   for j, v in pairs(req.post[k]) do
35     if v["filename"] then
36       path = basepath..destination..'/'..v.filename
37       dir = fs.realpath(fs.dirname(path))
38       if dir and is_in_dir(dir,basepath) then
39         fs.copy(req.post[k][j].tempname, path)
40       end
41     end
42   end
43 end
44
45 cgi.cleanup(req)
46
47 print('{ "result": { "success": true, "error": null } }')