+
+ -- Init template engine
+ local tpl = require("luci.template")
+ local viewns = {}
+ tpl.context.viewns = viewns
+ viewns.write = luci.http.write
+ viewns.translate = function(...) return require("luci.i18n").translate(...) end
+ viewns.striptags = luci.util.striptags
+ viewns.controller = luci.http.getenv("SCRIPT_NAME")
+ viewns.media = luci.config.main.mediaurlbase
+ viewns.resource = luci.config.main.resourcebase
+ viewns.REQUEST_URI = (luci.http.getenv("SCRIPT_NAME") or "") .. (luci.http.getenv("PATH_INFO") or "")
+
+ if track.dependent then
+ local stat, err = pcall(assert, not track.auto)
+ if not stat then
+ error500(err)
+ return
+ end
+ end
+
+ if track.sysauth then
+ require("luci.sauth")
+ local authen = type(track.sysauth_authenticator) == "function"
+ and track.sysauth_authenticator
+ or authenticator[track.sysauth_authenticator]
+ local def = (type(track.sysauth) == "string") and track.sysauth
+ local accs = def and {track.sysauth} or track.sysauth
+ local sess = luci.http.getcookie("sysauth")
+ sess = sess and sess:match("^[A-F0-9]+$")
+ local user = luci.sauth.read(sess)
+
+ if not luci.util.contains(accs, user) then
+ if authen then
+ local user = authen(luci.sys.user.checkpasswd, accs, def)
+ if not user or not luci.util.contains(accs, user) then
+ return
+ else
+ local sid = luci.sys.uniqueid(16)
+ luci.http.header("Set-Cookie", "sysauth=" .. sid.."; path=/")
+ luci.sauth.write(sid, user)
+ end
+ else
+ luci.http.status(403, "Forbidden")
+ return
+ end
+ end
+ end