X-Git-Url: https://git.rvb.name/lua-filemanager.git/blobdiff_plain/2ab2f7398805613c07c9d31c2968537928b87a39..8ae76db7435b037ba94af69023adc7f795f51691:/usr/lib/lua/luafm.lua diff --git a/usr/lib/lua/luafm.lua b/usr/lib/lua/luafm.lua new file mode 100644 index 0000000..2de767a --- /dev/null +++ b/usr/lib/lua/luafm.lua @@ -0,0 +1,102 @@ +#!/usr/bin/lua + +local uci = require "uci" +local fs = require "nixio.fs" +local u_c = uci.cursor() +local basepath = u_c.get("filemanager","config","basedir") + +local _M = {} + +local bp = basepath:match("(.*)/") +if bp and bp ~= "" then + basepath = bp +end +_M.basepath = basepath; + +function _M.is_in_dir(file, dir) + if file == dir then + return true + else + return file:sub(1, #dir) == dir + end +end + +function _M.path_valid(path) + return _M.is_in_dir(path,_M.basepath) and fs.access(path,"r") +end + +function _M.dir_path_valid(path) + return _M.is_in_dir(path,_M.basepath) and fs.stat(path,"type")=="dir" and fs.access(path,"w") +end + +function _M.new_path_valid(path) + local dirpath = fs.dirname(path) + return _M.is_in_dir(dirpath,_M.basepath) and fs.access(dirpath,"w") +end + +function _M.make_path(path) + local realpath = fs.realpath(_M.basepath..'/'..path) + if _M.path_valid(realpath) then + return realpath + else + return nil + end +end + +function _M.make_new_path(path) + local realpath = fs.realpath(fs.dirname(_M.basepath..'/'..path))..'/'..fs.basename(path) + if _M.new_path_valid(realpath) then + return realpath + else + return nil + end +end + +function _M.make_dir_path(path) + local realpath = fs.realpath(_M.basepath..'/'..path) + if _M.dir_path_valid(realpath) then + return realpath + else + return nil + end +end + +function _M.rm(item) + local ftype = fs.stat(item,"type") + if ftype == "reg" then + return fs.remove(item) + elseif ftype == "dir" then + local dir = fs.dir(item) + for file in dir do + if not _M.rm(item..'/'..file) then + return false + end + end + return fs.rmdir(item) + else + return false + end +end + +function _M.chmod(item,mode,recursive) + local result = fs.chmod(item,mode) + if result and recursive then + local dir = fs.dir(item) + if dir then + for file in dir do + local ftype = fs.stat(item..'/'..file,"type") + if ftype == "dir" then + result = _M.chmod(item..'/'..file,mode,recursive) + elseif ftype == "reg" then + result = _M.chmod(item..'/'..file,string.gsub(mode,"x","-"),false) + end + if not result then + break + end + end + end + end + return result +end + +return _M