Приведение в более приличный вид с выносом используемых базовых функций в отдельную...
[lua-filemanager.git] / usr / lib / lua / luafm.lua
diff --git a/usr/lib/lua/luafm.lua b/usr/lib/lua/luafm.lua
new file mode 100644 (file)
index 0000000..2de767a
--- /dev/null
@@ -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