* libs/web: Fixed Luci template cache
* libs/web: Added luci.http.urlencode, luci.http.urldecode * Minor enhancements
This commit is contained in:
parent
cdd871d834
commit
f8925eefa3
3 changed files with 24 additions and 7 deletions
|
@ -27,7 +27,6 @@ limitations under the License.
|
|||
module("luci.fs", package.seeall)
|
||||
|
||||
require("posix")
|
||||
posix.umask("rwx------")
|
||||
|
||||
-- Glob
|
||||
glob = posix.glob
|
||||
|
|
|
@ -43,4 +43,20 @@ function build_querystring(table)
|
|||
end
|
||||
|
||||
return s
|
||||
end
|
||||
|
||||
function urldecode(str)
|
||||
str = str:gsub("+", " ")
|
||||
str = str:gsub("%%(%x%x)",
|
||||
function(h) return string.char(tonumber(h,16)) end)
|
||||
str = str:gsub("\r\n", "\n")
|
||||
return str
|
||||
end
|
||||
|
||||
function urlencode(str)
|
||||
str = str:gsub("\n", "\r\n")
|
||||
str = str:gsub("([^%w ])",
|
||||
function (c) return string.format ("%%%02X", string.byte(c)) end)
|
||||
str = str:gsub(" ", "+")
|
||||
return str
|
||||
end
|
|
@ -35,6 +35,9 @@ luci.config.template = luci.config.template or {}
|
|||
viewdir = luci.config.template.viewdir or luci.sys.libpath() .. "/view"
|
||||
compiledir = luci.config.template.compiledir or luci.sys.libpath() .. "/view"
|
||||
|
||||
-- Enforce cache security
|
||||
compiledir = compiledir .. "/" .. luci.sys.process.info("uid")
|
||||
|
||||
|
||||
-- Compile modes:
|
||||
-- none: Never compile, only use precompiled data from files
|
||||
|
@ -147,12 +150,16 @@ function Template.__init__(self, name)
|
|||
|
||||
-- Compile and build
|
||||
local sourcefile = viewdir .. "/" .. name .. ".htm"
|
||||
local compiledfile = compiledir .. "/" .. name .. ".lua"
|
||||
local compiledfile = compiledir .. "/" .. luci.http.urlencode(name) .. ".lua"
|
||||
local err
|
||||
|
||||
if compiler_mode == "file" then
|
||||
local tplmt = luci.fs.mtime(sourcefile)
|
||||
local commt = luci.fs.mtime(compiledfile)
|
||||
|
||||
if not luci.fs.mtime(compiledir) then
|
||||
luci.fs.mkdir(compiledir, true)
|
||||
end
|
||||
|
||||
-- Build if there is no compiled file or if compiled file is outdated
|
||||
if ((commt == nil) and not (tplmt == nil))
|
||||
|
@ -163,11 +170,6 @@ function Template.__init__(self, name)
|
|||
if source then
|
||||
local compiled, err = compile(source)
|
||||
|
||||
local compiledfile_dir = luci.fs.dirname(compiledfile)
|
||||
if not luci.fs.mtime(compiledfile_dir) then
|
||||
luci.fs.mkdir(compiledfile_dir)
|
||||
end
|
||||
|
||||
luci.fs.writefile(compiledfile, luci.util.dump(compiled))
|
||||
self.template = compiled
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue