diff options
55 files changed, 609 insertions, 523 deletions
diff --git a/applications/community-halle/Makefile b/applications/community-halle/Makefile new file mode 100644 index 0000000000..81a96f6a83 --- /dev/null +++ b/applications/community-halle/Makefile @@ -0,0 +1,2 @@ +include ../../build/config.mk +include ../../build/module.mk
\ No newline at end of file diff --git a/applications/community-halle/root/etc/uci-defaults/ffluci-community-halle b/applications/community-halle/root/etc/uci-defaults/ffluci-community-halle new file mode 100644 index 0000000000..8e4286a57b --- /dev/null +++ b/applications/community-halle/root/etc/uci-defaults/ffluci-community-halle @@ -0,0 +1,16 @@ +#!/bin/sh +uci batch <<-EOF + set freifunk.community.name='Freifunk Halle' + set freifunk.community.homepage=http://halle.freifunk.net + set freifunk.community.essid=halle.freifunk.net + set freifunk.community.bssid=02:CA:FF:EE:BA:BE + set freifunk.community.realm=pool.freifunk-halle.net + set freifunk.community.channel=1 + set freifunk.community.net=104.0.0.0 + set freifunk.community.mask=255.0.0.0 + set freifunk.community.dhcp=10.0.0.0 + set freifunk.community.dhcpmask=255.255.255.0 + set freifunk.community.dns='88.198.178.18 141.54.1.1 212.204.49.83 208.67.220.220 208.67.222.222' + commit freifunk +EOF + diff --git a/applications/luci-fw/src/controller/luci_fw/luci_fw.lua b/applications/luci-fw/src/controller/luci_fw/luci_fw.lua new file mode 100644 index 0000000000..864455ca8f --- /dev/null +++ b/applications/luci-fw/src/controller/luci_fw/luci_fw.lua @@ -0,0 +1,18 @@ +module("ffluci.controller.luci_fw.luci_fw", package.seeall) + +function index() + local page = node("admin", "network", "portfw") + page.target = cbi("luci_fw/portfw") + page.title = "Portweiterleitung" + page.order = 70 + + local page = node("admin", "network", "routing") + page.target = cbi("luci_fw/routing") + page.title = "Routing" + page.order = 72 + + local page = node("admin", "network", "firewall") + page.target = cbi("luci_fw/firewall") + page.title = "Firewall" + page.order = 74 +end
\ No newline at end of file diff --git a/applications/luci-fw/src/model/cbi/admin_network/firewall.lua b/applications/luci-fw/src/model/cbi/luci_fw/firewall.lua index 7c89d07c55..7c89d07c55 100644 --- a/applications/luci-fw/src/model/cbi/admin_network/firewall.lua +++ b/applications/luci-fw/src/model/cbi/luci_fw/firewall.lua diff --git a/applications/luci-fw/src/model/cbi/admin_network/portfw.lua b/applications/luci-fw/src/model/cbi/luci_fw/portfw.lua index 90ebb4c24d..90ebb4c24d 100644 --- a/applications/luci-fw/src/model/cbi/admin_network/portfw.lua +++ b/applications/luci-fw/src/model/cbi/luci_fw/portfw.lua diff --git a/applications/luci-fw/src/model/cbi/admin_network/routing.lua b/applications/luci-fw/src/model/cbi/luci_fw/routing.lua index 5805b1d3f7..5805b1d3f7 100644 --- a/applications/luci-fw/src/model/cbi/admin_network/routing.lua +++ b/applications/luci-fw/src/model/cbi/luci_fw/routing.lua diff --git a/applications/luci-fw/src/model/menu/50luci-fw.lua b/applications/luci-fw/src/model/menu/50luci-fw.lua deleted file mode 100644 index b7543b0621..0000000000 --- a/applications/luci-fw/src/model/menu/50luci-fw.lua +++ /dev/null @@ -1,4 +0,0 @@ -sel("admin", "network") -act("portfw", "Portweiterleitung") -act("routing", "Routing") -act("firewall", "Firewall")
\ No newline at end of file diff --git a/applications/luci-splash/src/controller/splash/splash.lua b/applications/luci-splash/src/controller/splash/splash.lua index 62088be52d..7d837cd34d 100644 --- a/applications/luci-splash/src/controller/splash/splash.lua +++ b/applications/luci-splash/src/controller/splash/splash.lua @@ -1,5 +1,16 @@ module("ffluci.controller.splash.splash", package.seeall) +function index() + local page = node("admin", "services", "splash") + page.target = cbi("splash/splash") + page.title = "Client-Splash" + + node("splash", "splash", "activate").target = action_activate + node("splash", "splash", "allowed").target = action_allowed + node("splash", "splash", "unknown").target = action_unknown + node("splash", "splash", "splash").target = template("splash_splash/splash") +end + function action_activate() local mac = ffluci.sys.net.ip4mac(ffluci.http.env.REMOTE_ADDR) if mac and ffluci.http.formvalue("accept") then @@ -10,7 +21,7 @@ function action_activate() end end -function action_accepted() +function action_allowed() ffluci.http.redirect(ffluci.dispatcher.build_url()) end diff --git a/applications/luci-splash/src/model/cbi/admin_services/splash.lua b/applications/luci-splash/src/model/cbi/splash/splash.lua index fe4d2c3ee8..fe4d2c3ee8 100644 --- a/applications/luci-splash/src/model/cbi/admin_services/splash.lua +++ b/applications/luci-splash/src/model/cbi/splash/splash.lua diff --git a/applications/luci-splash/src/model/menu/50luci-splash.lua b/applications/luci-splash/src/model/menu/50luci-splash.lua deleted file mode 100644 index 99f7caa52b..0000000000 --- a/applications/luci-splash/src/model/menu/50luci-splash.lua +++ /dev/null @@ -1,2 +0,0 @@ -sel("admin", "services") -act("splash", "Client-Splash")
\ No newline at end of file diff --git a/applications/sgi-haserl/root/www/cgi-bin/ffluci b/applications/sgi-haserl/root/www/cgi-bin/ffluci index 183a6ad412..f3d85df642 100755 --- a/applications/sgi-haserl/root/www/cgi-bin/ffluci +++ b/applications/sgi-haserl/root/www/cgi-bin/ffluci @@ -1,4 +1,3 @@ #!/usr/bin/haserl --shell=luac -package.path = "/usr/lib/lua/?.lua;/usr/lib/lua/?/init.lua;" .. package.path -package.cpath = "/usr/lib/lua/?.so;" .. package.cpath -require("ffluci.dispatcher").httpdispatch()
\ No newline at end of file +require("ffluci.dispatcher").createindex() +ffluci.dispatcher.httpdispatch()
\ No newline at end of file diff --git a/applications/sgi-webuci/root/lib/webuci/main.lua b/applications/sgi-webuci/root/lib/webuci/main.lua index 50ac8184b7..f21934e0a8 100644 --- a/applications/sgi-webuci/root/lib/webuci/main.lua +++ b/applications/sgi-webuci/root/lib/webuci/main.lua @@ -1,11 +1,9 @@ -package.path = "/usr/lib/lua/?.lua;/usr/lib/lua/?/init.lua;" .. package.path -package.cpath = "/usr/lib/lua/?.so;" .. package.cpath module("webuci", package.seeall) function prepare_req(uri) env = {} env.REQUEST_URI = uri - require("ffluci.menu").get() + require("ffluci.dispatcher").createindex() end function init_req(context) @@ -19,5 +17,5 @@ function init_req(context) end function handle_req(context) - require("ffluci.dispatcher").httpdispatch() + ffluci.dispatcher.httpdispatch() end
\ No newline at end of file diff --git a/build/config.mk b/build/config.mk index af0b443d53..372fc8a570 100644 --- a/build/config.mk +++ b/build/config.mk @@ -1,3 +1,3 @@ LUAC = luac LUAC_OPTIONS = -s -LUCI_INSTALLDIR = /usr/lib/lua/ffluci
\ No newline at end of file +LUCI_INSTALLDIR = /usr/lib/lua/5.1/ffluci
\ No newline at end of file diff --git a/contrib/package/ffluci/Makefile b/contrib/package/ffluci/Makefile index ca75402611..34c796e2d2 100644 --- a/contrib/package/ffluci/Makefile +++ b/contrib/package/ffluci/Makefile @@ -5,7 +5,7 @@ PKG_SOURCE_URL:=https://dev.leipzig.freifunk.net/svn/ff-luci/$(PKG_BRANCH) PKG_REV:=$(shell LC_ALL=C svn info ${PKG_SOURCE_URL} | sed -ne's/^Last Changed Rev: //p') PKG_NAME:=ffluci -PKG_VERSION:=0.4+svn$(PKG_REV) +PKG_VERSION:=0.5+svn$(PKG_REV) PKG_RELEASE:=1 PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) diff --git a/contrib/package/lua-luci/patches/200-lua-path.patch b/contrib/package/lua-luci/patches/200-lua-path.patch index 62dd00e399..60797e98de 100644 --- a/contrib/package/lua-luci/patches/200-lua-path.patch +++ b/contrib/package/lua-luci/patches/200-lua-path.patch @@ -1,15 +1,36 @@ ---- b/src/luaconf.h 2008-05-06 20:10:46.000000000 +0200 -+++ a/src/luaconf.h 2008-05-06 20:10:27.000000000 +0200 -@@ -95,9 +95,9 @@ - ".\\?.dll;" LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll" - +diff -ur lua-5.1.3/etc/lua.pc lua-5.1.3-new/etc/lua.pc +--- lua-5.1.3/etc/lua.pc 2008-01-11 14:12:59.000000000 +0100 ++++ lua-5.1.3-new/etc/lua.pc 2008-05-18 22:09:24.000000000 +0200 +@@ -8,7 +8,7 @@ + R= 5.1.3 + + # grep '^INSTALL_.*=' ../Makefile | sed 's/INSTALL_TOP/prefix/' +-prefix= /usr/local ++prefix= /usr + INSTALL_BIN= ${prefix}/bin + INSTALL_INC= ${prefix}/include + INSTALL_LIB= ${prefix}/lib +diff -ur lua-5.1.3/Makefile lua-5.1.3-new/Makefile +--- lua-5.1.3/Makefile 2008-05-18 22:06:55.000000000 +0200 ++++ lua-5.1.3-new/Makefile 2008-05-18 22:09:13.000000000 +0200 +@@ -12,7 +12,7 @@ + # doc directory.) You may want to make these paths consistent with LUA_ROOT, + # LUA_LDIR, and LUA_CDIR in luaconf.h (and also with etc/lua.pc). + # +-INSTALL_TOP= /usr/local ++INSTALL_TOP= /usr + INSTALL_BIN= $(INSTALL_TOP)/bin + INSTALL_INC= $(INSTALL_TOP)/include + INSTALL_LIB= $(INSTALL_TOP)/lib +diff -ur lua-5.1.3/src/luaconf.h lua-5.1.3-new/src/luaconf.h +--- lua-5.1.3/src/luaconf.h 2008-05-18 22:07:11.000000000 +0200 ++++ lua-5.1.3-new/src/luaconf.h 2008-05-18 22:09:50.000000000 +0200 +@@ -95,7 +95,7 @@ + ".\\?.dll;" LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll" + #else --#define LUA_ROOT "/usr/local/" --#define LUA_LDIR LUA_ROOT "share/lua/5.1/" --#define LUA_CDIR LUA_ROOT "lib/lua/5.1/" -+#define LUA_ROOT "/usr/" -+#define LUA_LDIR LUA_ROOT "share/lua/" -+#define LUA_CDIR LUA_ROOT "lib/lua/" +-#define LUA_ROOT "/usr/local/" ++#define LUA_ROOT "/usr/" + #define LUA_LDIR LUA_ROOT "share/lua/5.1/" + #define LUA_CDIR LUA_ROOT "lib/lua/5.1/" #define LUA_PATH_DEFAULT \ - "./?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \ - LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua" diff --git a/core/root/etc/config/luci b/core/root/etc/config/luci index b15b152894..7a7aa333e8 100644 --- a/core/root/etc/config/luci +++ b/core/root/etc/config/luci @@ -1,10 +1,9 @@ config core main - option lang de - option mediaurlbase /ffluci/media - option imagebase /ffluci/images - -config core category_privileges - option public nobody:nogroup + option lang de + option mediaurlbase /ffluci/media + option resourcebase /ffluci/images + option title "Freifunk Kamikaze" + option subtitle Fledermausedition config extern flash_keep option uci "/etc/config" diff --git a/core/src/dispatcher.lua b/core/src/dispatcher.lua index 0a66ccd3ad..84c665edab 100644 --- a/core/src/dispatcher.lua +++ b/core/src/dispatcher.lua @@ -4,63 +4,6 @@ FFLuCI - Dispatcher Description: The request dispatcher and module dispatcher generators - -The dispatching process: - For a detailed explanation of the dispatching process we assume: - You have installed the FFLuCI CGI-Dispatcher in /cgi-bin/ffluci - - To enforce a higher level of security only the CGI-Dispatcher - resides inside the web server's document root, everything else - stays inside an external directory, we assume this is /lua/ffluci - for this explanation. - - All controllers and action are reachable as sub-objects of /cgi-bin/ffluci - as if they were virtual folders and files - e.g.: /cgi-bin/ffluci/public/info/about - /cgi-bin/ffluci/admin/network/interfaces - and so on. - - The PATH_INFO variable holds the dispatch path and - will be split into three parts: /category/module/action - - Category: This is the category in which modules are stored in - By default there are two categories: - "public" - which is the default public category - "admin" - which is the default protected category - - As FFLuCI itself does not implement authentication - you should make sure that "admin" and other sensitive - categories are protected by the webserver. - - E.g. for busybox add a line like: - /cgi-bin/ffluci/admin:root:$p$root - to /etc/httpd.conf to protect the "admin" category - - - Module: This is the controller which will handle the request further - It is always a submodule of ffluci.controller, so a module - called "helloworld" will be stored in - /lua/ffluci/controller/helloworld.lua - You are free to submodule your controllers any further. - - Action: This is action that will be invoked after loading the module. - The kind of how the action will be dispatched depends on - the module dispatcher that is defined in the controller. - See the description of the default module dispatcher down - on this page for some examples. - - - The main dispatcher at first searches for the module by trying to - include ffluci.controller.category.module - (where "category" is the category name and "module" is the module name) - If this fails a 404 status code will be send to the client and FFLuCI exits - - Then the main dispatcher calls the module dispatcher - ffluci.controller.category.module.dispatcher with the request object - as the only argument. The module dispatcher is then responsible - for the further dispatching process. - - FileId: $Id$ @@ -80,48 +23,24 @@ See the License for the specific language governing permissions and limitations under the License. ]]-- - module("ffluci.dispatcher", package.seeall) require("ffluci.http") -require("ffluci.template") -require("ffluci.config") require("ffluci.sys") +require("ffluci.fs") --- Sets privilege for given category -function assign_privileges(category) - local cp = ffluci.config.category_privileges - if cp and cp[category] then - local u, g = cp[category]:match("([^:]+):([^:]+)") - ffluci.sys.process.setuser(u) - ffluci.sys.process.setgroup(g) - end -end +-- Local dispatch database +local tree = {nodes={}} +-- Global request object +request = {} --- Builds a URL from a triple of category, module and action -function build_url(category, module, action) - category = category or "public" - module = module or "index" - action = action or "index" - - local pattern = ffluci.http.dispatcher() .. "/%s/%s/%s" - return pattern:format(category, module, action) -end +-- Active dispatched node +dispatched = nil --- Dispatches the "request" -function dispatch(req) - request = req - local m = "ffluci.controller." .. request.category .. "." .. request.module - local stat, module = pcall(require, m) - if not stat then - return error404() - else - module.request = request - module.dispatcher = module.dispatcher or dynamic - setfenv(module.dispatcher, module) - return module.dispatcher(request) - end +-- Builds a URL +function build_url(...) + return ffluci.http.dispatcher() .. "/" .. table.concat(arg, "/") end -- Sends a 404 error code and renders the "error404" template if available @@ -129,6 +48,7 @@ function error404(message) ffluci.http.status(404, "Not Found") message = message or "Not Found" + require("ffluci.template") if not pcall(ffluci.template.render, "error404") then ffluci.http.prepare_content("text/plain") print(message) @@ -140,6 +60,7 @@ end function error500(message) ffluci.http.status(500, "Internal Server Error") + require("ffluci.template") if not pcall(ffluci.template.render, "error500", {message=message}) then ffluci.http.prepare_content("text/plain") print(message) @@ -147,154 +68,124 @@ function error500(message) return false end - -- Dispatches a request depending on the PATH_INFO variable function httpdispatch() local pathinfo = ffluci.http.env.PATH_INFO or "" - local parts = pathinfo:gmatch("/[%w-]+") + local c = tree - local sanitize = function(s, default) - return s and s:sub(2) or default + for s in pathinfo:gmatch("/([%w-]+)") do + table.insert(request, s) end - local cat = sanitize(parts(), "public") - local mod = sanitize(parts(), "index") - local act = sanitize(parts(), "index") - - assign_privileges(cat) - dispatch({category=cat, module=mod, action=act}) -end - - --- Dispatchers -- - - --- The Action Dispatcher searches the module for any function called --- action_"request.action" and calls it -function action(...) - local disp = require("ffluci.dispatcher") - if not disp._action(...) then - disp.error404() - end + dispatch() end --- The CBI dispatcher directly parses and renders the CBI map which is --- placed in ffluci/modles/cbi/"request.module"/"request.action" -function cbi(...) - local disp = require("ffluci.dispatcher") - if not disp._cbi(...) then - disp.error404() +function dispatch() + local c = tree + local track = {} + + for i, s in ipairs(request) do + c = c.nodes[s] + if not c then + break + end + + for k, v in pairs(c) do + track[k] = v + end end -end - --- The dynamic dispatcher chains the action, submodule, simpleview and CBI dispatcher --- in this particular order. It is the default dispatcher. -function dynamic(...) - local disp = require("ffluci.dispatcher") - if not disp._action(...) - and not disp._submodule(...) - and not disp._simpleview(...) - and not disp._cbi(...) then - disp.error404() + + + if track.i18n then + require("ffluci.i18n").loadc(track.i18n) end -end - --- The Simple View Dispatcher directly renders the template --- which is placed in ffluci/views/"request.module"/"request.action" -function simpleview(...) - local disp = require("ffluci.dispatcher") - if not disp._simpleview(...) then - disp.error404() + + if track.setuser then + ffluci.sys.process.setuser(track.setuser) end -end - - --- The submodule dispatcher tries to load a submodule of the controller --- and calls its "action"-function -function submodule(...) - local disp = require("ffluci.dispatcher") - if not disp._submodule(...) then - disp.error404() + + if track.setgroup then + ffluci.sys.process.setgroup(track.setgroup) end -end - - --- Internal Dispatcher Functions -- - -function _action(request) - local action = getfenv(2)["action_" .. request.action:gsub("-", "_")] - local i18n = require("ffluci.i18n") - if action then - i18n.loadc(request.category .. "_" .. request.module) - i18n.loadc(request.category .. "_" .. request.module .. "_" .. request.action) - action() - return true + + if c and type(c.target) == "function" then + dispatched = c + + stat, err = pcall(c.target) + if not stat then + error500(err) + end else - return false + error404() end end -function _cbi(request) - local disp = require("ffluci.dispatcher") - local tmpl = require("ffluci.template") - local cbi = require("ffluci.cbi") - local i18n = require("ffluci.i18n") - - local path = request.category.."_"..request.module.."/"..request.action +-- Calls the index function of all available controllers +function createindex() + local root = ffluci.sys.libpath() .. "/controller/" + local suff = ".lua" + for i,c in ipairs(ffluci.fs.glob(root .. "*/*" .. suff)) do + c = "ffluci.controller." .. c:sub(#root+1, #c-#suff):gsub("/", ".", 1) + stat, mod = pcall(require, c) - local stat, map = pcall(cbi.load, path) - if stat and map then - local stat, err = pcall(map.parse, map) - if not stat then - disp.error500(err) - return true + if stat and mod and type(mod.index) == "function" then + ffluci.util.updfenv(mod.index, ffluci.dispatcher) + pcall(mod.index) end - i18n.loadc(request.category .. "_" .. request.module) - i18n.loadc(request.category .. "_" .. request.module .. "_" .. request.action) - tmpl.render("cbi/header") - map:render() - tmpl.render("cbi/footer") - return true - elseif not stat then - disp.error500(map) - return true - else - return false end end -function _simpleview(request) - local i18n = require("ffluci.i18n") - local tmpl = require("ffluci.template") +-- Fetch a dispatching node +function node(...) + local c = tree - local path = request.category.."_"..request.module.."/"..request.action + for k,v in ipairs(arg) do + if not c.nodes[v] then + c.nodes[v] = {nodes={}} + end + + c = c.nodes[v] + end - local stat, t = pcall(tmpl.Template, path) - if stat then - i18n.loadc(request.category .. "_" .. request.module) - i18n.loadc(request.category .. "_" .. request.module .. "_" .. request.action) - t:render() - return true - else - return false + return c +end + +-- Subdispatchers -- +function alias(...) + local req = arg + return function() + request = req + dispatch() end end +function template(name) + require("ffluci.template") + return function() ffluci.template.render(name) end +end -function _submodule(request) - local i18n = require("ffluci.i18n") - local m = "ffluci.controller." .. request.category .. "." .. - request.module .. "." .. request.action - local stat, module = pcall(require, m) +function cbi(model) + require("ffluci.cbi") + require("ffluci.template") - if stat and module.action then - i18n.loadc(request.category .. "_" .. request.module) - i18n.loadc(request.category .. "_" .. request.module .. "_" .. request.action) - return pcall(module.action) + return function() + local stat, res = pcall(ffluci.cbi.load, model) + if not stat then + error500(res) + return true + end + + local stat, err = pcall(res.parse, res) + if not stat then + error500(err) + return true + end + + ffluci.template.render("cbi/header") + res:render() + ffluci.template.render("cbi/footer") end - - return false end
\ No newline at end of file diff --git a/core/src/i18n/default.en b/core/src/i18n/default.en index 726095ae76..d76b770e96 100644 --- a/core/src/i18n/default.en +++ b/core/src/i18n/default.en @@ -10,13 +10,5 @@ apply = "Apply" changes = "Changes" revert = "Revert" -index = "Overview" -system = "System" -services = "Services" -network = "Network" -wifi = "Wifi" -status = "Status" -statistic = "Statistic" - config = "Configuration" path = "Path"
\ No newline at end of file diff --git a/core/src/init.lua b/core/src/init.lua index 8d4cea2e96..f54854e4e5 100644 --- a/core/src/init.lua +++ b/core/src/init.lua @@ -25,5 +25,5 @@ limitations under the License. ]]-- module("ffluci", package.seeall) -__version__ = "0.4" +__version__ = "0.5" __appname__ = "FFLuCI" diff --git a/core/src/menu.lua b/core/src/menu.lua index d6f65116e4..9328e332c2 100644 --- a/core/src/menu.lua +++ b/core/src/menu.lua @@ -28,6 +28,7 @@ module("ffluci.menu", package.seeall) require("ffluci.fs") require("ffluci.util") require("ffluci.sys") +require("ffluci.dispatcher") -- Default modelpath modelpattern = ffluci.sys.libpath() .. "/model/menu/*.lua" @@ -39,98 +40,7 @@ scope = { isfile = ffluci.fs.isfile } --- Local menu database -local menu = nil - --- The current pointer -local menuc = {} - --- Adds a menu category to the current menu and selects it -function add(cat, controller, title, order) - order = order or 100 - if not menu[cat] then - menu[cat] = {} - end - - local entry = {} - entry[".descr"] = title - entry[".order"] = order - entry[".contr"] = controller - - menuc = entry - - local i = 0 - for k,v in ipairs(menu[cat]) do - if v[".order"] > entry[".order"] then - break - end - i = k - end - table.insert(menu[cat], i+1, entry) - - return true -end - --- Adds an action to the current menu -function act(action, title) - table.insert(menuc, {action = action, descr = title}) - return true -end - --- Selects a menu category -function sel(cat, controller) - if not menu[cat] then - return nil - end - menuc = menu[cat] - - local stat = nil - for k,v in ipairs(menuc) do - if v[".contr"] == controller then - menuc = v - stat = true - end - end - - return stat -end - - --- Collect all menu information provided in the model dir -function collect() - local generators = {} - - local m = ffluci.fs.glob(modelpattern) or {} - for k, menu in pairs(m) do - local f = loadfile(menu) - if f then - table.insert(generators, f) - end - end - - return generators -end - --- Parse the collected information -function parse(generators) - menu = {} - for i, f in pairs(generators) do - local env = ffluci.util.clone(scope) - - env.add = add - env.sel = sel - env.act = act - - setfenv(f, env) - f() - end - return menu -end - -- Returns the menu information function get() - if not menu then - menu = parse(collect()) - end return menu end
\ No newline at end of file diff --git a/core/src/template.lua b/core/src/template.lua index 6f4e4adb03..a56b49d83a 100644 --- a/core/src/template.lua +++ b/core/src/template.lua @@ -55,7 +55,7 @@ viewns = { controller = ffluci.http.dispatcher(), uploadctrl = ffluci.http.dispatcher_upload(), media = ffluci.config.main.mediaurlbase, - images = ffluci.config.main.imagebase, + resource = ffluci.config.main.resourcebase, write = io.write, include = function(name) Template(name):render(getfenv(2)) end, } diff --git a/core/src/view/footer.htm b/core/src/view/footer.htm index 67856771b4..f324408a1c 100644 --- a/core/src/view/footer.htm +++ b/core/src/view/footer.htm @@ -2,6 +2,6 @@ <div class="clear"></div> </div></div> -<div class="separator magenta bold"><a href="http://luci.freifunk-halle.net">FFLuCI 0.3 - Freifunk Lua Configuration Interface</a></div> +<div class="separator magenta bold"><a href="http://luci.freifunk-halle.net"><%=require("ffluci").__appname__ .. " " .. ffluci.__version__%> - Freifunk Lua Configuration Interface</a></div> </body> </html>
\ No newline at end of file diff --git a/core/src/view/header.htm b/core/src/view/header.htm index 9bb8b8be99..99b43805d3 100644 --- a/core/src/view/header.htm +++ b/core/src/view/header.htm @@ -1,21 +1,33 @@ <% require("ffluci.sys") local load1, load5, load15 = ffluci.sys.loadavg() -local req = require("ffluci.dispatcher").request -local menu = require("ffluci.menu").get()[req.category] -menu = menu or {} + +local request = require("ffluci.dispatcher").request +local category = request[1] +local tree = ffluci.dispatcher.node() +local cattree = category and ffluci.dispatcher.node(category) +local node = ffluci.dispatcher.dispatched + +local c = tree +for i,r in ipairs(request) do + if c.nodes and c.nodes[r] then + c = c.nodes[r] + c._menu_selected = true + end +end + require("ffluci.i18n").loadc("default") + require("ffluci.http").prepare_content("text/html") %><?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <link rel="stylesheet" type="text/css" href="<%=media%>/cascade.css" /> - <link rel="stylesheet" type="text/css" href="<%=media%>/css/<%=req.category%>_<%=req.module%>.css" /> - <link rel="stylesheet" type="text/css" href="<%=media%>/css/<%=req.category%>_<%=req.module%>_<%=req.action%>.css" /> + <% if node and node.css then %><link rel="stylesheet" type="text/css" href="<%=resource%>/<%=node.css%>" /><% end %> <meta http-equiv="content-type" content="text/xhtml+xml; charset=utf-8" /> <meta http-equiv="content-script-type" content="text/javascript" /> - <title>FFLuCI</title> + <title>FFLuCI - Freifunk Lua Configuration Interface</title> </head> <body> <div id="header"> @@ -27,37 +39,82 @@ require("ffluci.http").prepare_content("text/html") <%:hostname Hostname%>: <%=ffluci.sys.hostname()%> </div> <div> - <span class="headertitle">Freifunk Kamikaze</span><br /> - <span class="whitetext bold"><%:batmanedition Fledermausedition%></span> + <span class="headertitle"><%~luci.main.title%></span><br /> + <span class="whitetext bold"><%~luci.main.subtitle%></span> </div> </div> <div class="separator yellow bold"> -<%:path Pfad%>: <a href="<%=controller .. "/" .. req.category%>"><%=translate(req.category, req.category)%></a> -» <a href="<%=controller .. "/" .. req.category .. "/" .. req.module %>"><%=translate(req.module, req.module)%></a> -» <a href="<%=controller .. "/" .. req.category .. "/" .. req.module .. "/" .. req.action %>"><%=translate(req.action, req.action)%></a> +<%:path Pfad%>: <% +local c = tree +local url = controller +for k,v in pairs(request) do + if c.nodes and c.nodes[v] then + c = c.nodes[v] + url = url .. "/" .. v + %><a href="<%=url%>"><%=c.title or v%></a> <% if k ~= #request then %>» <% end + end +end +%> </div> <div id="columns"><div id="columnswrapper"> <div class="sidebar left"> - <% for k,v in pairs(menu) do %> - <div<% if v[".contr"] == req.module then %> class="yellowtext"<% end %>><a href="<%=controller.."/"..req.category.."/"..v[".contr"]%>"><%=translate(v[".contr"], v[".descr"])%></a><% - if v[".contr"] == req.module then %> - <ul><% for key,val in ipairs(v) do %> - <li<% if val.action == req.action then %> class="yellowtext"<% end %>><a href="<%=controller.."/"..req.category.."/"..req.module.."/"..val.action%>"><%=translate(val.action, val.descr)%></a></li> - <% end %></ul> - <% end %></div> +<% +local function submenu(prefix, node) + if not node._menu_selected or not node.nodes then + return false + end + local index = {} + for k, n in pairs(node.nodes) do + table.insert(index, {name=k, order=n.order or 100}) + end + + table.sort(index, function(a, b) return a.order < b.order end) +%> + <ul> + <% for j, v in pairs(index) do + local nnode = node.nodes[v.name]%> + <li> + <span<% if nnode._menu_selected then %> class="yellowtext"<%end%>><a href="<%=controller .. prefix .. v.name%>"><%=nnode.title%></a></span> + <% submenu(prefix .. v.name .. "/", nnode) %> + </li> <% end %> + </ul> +<% +end + +if cattree and cattree.nodes then + local index = {} + for k, node in pairs(cattree.nodes) do + table.insert(index, {name=k, order=node.order or 100}) + end + + table.sort(index, function(a, b) return a.order < b.order end) + + for i, k in ipairs(index) do + node = cattree.nodes[k.name] + if node.title then %> + <div<% if node._menu_selected then %> class="yellowtext"<%end%>><a href="<%=controller%>/<%=category%>/<%=k.name%>"><%=node.title%></a> + <%submenu("/" .. category .. "/" .. k.name .. "/", node)%> + </div> +<% end + end +end +%> </div> <div class="sidebar right"> <div><%:webif Weboberfläche%> - <ul> - <li<% if "public" == req.category then %> class="yellowtext"<% end %>><a href="<%=controller%>/public"><%:public Öffentlich%></a></li> - <li<% if "admin" == req.category then %> class="yellowtext"<% end %>><a href="<%=controller%>/admin"><%:admin Verwaltung%></a></li> + <ul><% + for k,node in pairs(tree.nodes) do + if node.title then %> + <li<% if request[1] == k then %> class="yellowtext"<%end%>><a href="<%=controller%>/<%=k%>"><%=node.title%></a></li> +<% end + end%> </ul> </div> <% - if "admin" == req.category then + if "admin" == request[1] then require("ffluci.model.uci") local ucic = ffluci.model.uci.changes() if ucic then diff --git a/modules/admin-core/src/controller/admin/index.lua b/modules/admin-core/src/controller/admin/index.lua index b4a7720f8b..89545f1d57 100644 --- a/modules/admin-core/src/controller/admin/index.lua +++ b/modules/admin-core/src/controller/admin/index.lua @@ -1 +1,24 @@ -module("ffluci.controller.admin.index", package.seeall)
\ No newline at end of file +module("ffluci.controller.admin.index", package.seeall) + +function index() + local root = node() + if not root.target then + root.target = alias("admin") + end + + local page = node("admin") + page.target = alias("admin", "index") + page.title = "Administration" + page.order = 10 + + local page = node("admin", "index") + page.target = template("admin_index/index") + page.title = "Übersicht" + page.order = 10 + + local page = node("admin", "index", "luci") + page.target = cbi("admin_index/luci") + page.title = "Oberfläche" + + +end
\ No newline at end of file diff --git a/modules/admin-core/src/controller/admin/network.lua b/modules/admin-core/src/controller/admin/network.lua index 0e3165f085..8f11c28489 100644 --- a/modules/admin-core/src/controller/admin/network.lua +++ b/modules/admin-core/src/controller/admin/network.lua @@ -1 +1,39 @@ -module("ffluci.controller.admin.network", package.seeall)
\ No newline at end of file +module("ffluci.controller.admin.network", package.seeall) + +function index() + local page = node("admin", "network") + page.target = template("admin_network/index") + page.title = "Netzwerk" + page.order = 50 + + local page = node("admin", "network", "vlan") + page.target = cbi("admin_network/vlan") + page.title = "Switch" + page.order = 10 + + local page = node("admin", "network", "ifaces") + page.target = cbi("admin_network/ifaces") + page.title = "Schnittstellen" + page.order = 20 + + local page = node("admin", "network", "dhcp") + page.target = cbi("admin_network/dhcp") + page.title = "DHCP-Server" + page.order = 30 + + local page = node("admin", "network", "ptp") + page.target = cbi("admin_network/ptp") + page.title = "PPPoE / PPTP" + page.order = 40 + + local page = node("admin", "network", "routes") + page.target = cbi("admin_network/routes") + page.title = "Statische Routen" + page.order = 50 + + if ffluci.fs.isfile("/etc/config/qos") then + local page = node("admin", "network", "qos") + page.target = cbi("admin_network/qos") + page.title = "Quality of Service" + end +end
\ No newline at end of file diff --git a/modules/admin-core/src/controller/admin/services.lua b/modules/admin-core/src/controller/admin/services.lua index 42181212bd..cb7c170a06 100644 --- a/modules/admin-core/src/controller/admin/services.lua +++ b/modules/admin-core/src/controller/admin/services.lua @@ -1 +1,29 @@ -module("ffluci.controller.admin.services", package.seeall)
\ No newline at end of file +module("ffluci.controller.admin.services", package.seeall) + +function index() + local page = node("admin", "services") + page.target = template("admin_services/index") + page.title = "Dienste" + page.order = 40 + + local page = node("admin", "services", "httpd") + page.target = cbi("admin_services/httpd") + page.title = "HTTP-Server" + page.order = 10 + + local page = node("admin", "services", "dropbear") + page.target = cbi("admin_services/dropbear") + page.title = "SSH-Server" + page.order = 20 + + local page = node("admin", "services", "dnsmasq") + page.target = cbi("admin_services/dnsmasq") + page.title = "Dnsmasq" + page.order = 30 + + if ffluci.fs.isfile("/etc/config/olsr") then + local page = node("admin", "services", "olsr") + page.target = cbi("admin_services/olsrd") + page.title = "OLSR" + end +end
\ No newline at end of file diff --git a/modules/admin-core/src/controller/admin/status.lua b/modules/admin-core/src/controller/admin/status.lua index fa9fe65bde..1c26257e98 100644 --- a/modules/admin-core/src/controller/admin/status.lua +++ b/modules/admin-core/src/controller/admin/status.lua @@ -1,5 +1,16 @@ module("ffluci.controller.admin.status", package.seeall) +function index() + local page = node("admin", "status") + page.target = template("admin_status/index") + page.title = "Status" + page.order = 20 + + local page = node("admin", "status", "syslog") + page.target = action_syslog + page.title = "Systemprotokoll" +end + function action_syslog() local syslog = ffluci.sys.syslog() ffluci.template.render("admin_status/syslog", {syslog=syslog}) diff --git a/modules/admin-core/src/controller/admin/system.lua b/modules/admin-core/src/controller/admin/system.lua index a612660092..fb108c90ae 100644 --- a/modules/admin-core/src/controller/admin/system.lua +++ b/modules/admin-core/src/controller/admin/system.lua @@ -7,6 +7,52 @@ require("ffluci.fs") require("ffluci.model.ipkg") require("ffluci.model.uci") +function index() + local page = node("admin", "system") + page.target = template("admin_system/index") + page.title = "System" + page.order = 30 + + local page = node("admin", "system", "packages") + page.target = action_packages + page.title = "Paketverwaltung" + page.order = 10 + + local page = node("admin", "system", "packages", "ipkg") + page.target = action_ipkg + page.title = "IPKG-Konfiguration" + + local page = node("admin", "system", "passwd") + page.target = action_passwd + page.title = "Passwort ändern" + page.order = 20 + + local page = node("admin", "system", "sshkeys") + page.target = action_sshkeys + page.title = "SSH-Schlüssel" + page.order = 30 + + local page = node("admin", "system", "hostname") + page.target = cbi("admin_system/hostname") + page.title = "Hostname" + page.order = 40 + + local page = node("admin", "system", "fstab") + page.target = cbi("admin_system/fstab") + page.title = "Einhängepunkte" + page.order = 50 + + local page = node("admin", "system", "upgrade") + page.target = action_upgrade + page.title = "Firmwareupgrade" + page.order = 60 + + local page = node("admin", "system", "reboot") + page.target = action_reboot + page.title = "Neu starten" + page.order = 70 +end + function action_editor() local file = ffluci.http.formvalue("file", "") local data = ffluci.http.formvalue("data") diff --git a/modules/admin-core/src/controller/admin/uci.lua b/modules/admin-core/src/controller/admin/uci.lua index cb4a95ba5c..7443a16b0b 100644 --- a/modules/admin-core/src/controller/admin/uci.lua +++ b/modules/admin-core/src/controller/admin/uci.lua @@ -2,6 +2,12 @@ module("ffluci.controller.admin.uci", package.seeall) require("ffluci.util") require("ffluci.sys") +function index() + node("admin", "uci", "changes").target = template("admin_uci/changes") + node("admin", "uci", "revert").target = action_revert + node("admin", "uci", "apply").target = action_apply +end + -- This function has a higher priority than the admin_uci/apply template function action_apply() local changes = ffluci.model.uci.changes() diff --git a/modules/admin-core/src/controller/admin/wifi.lua b/modules/admin-core/src/controller/admin/wifi.lua index bc1040c715..922366c543 100644 --- a/modules/admin-core/src/controller/admin/wifi.lua +++ b/modules/admin-core/src/controller/admin/wifi.lua @@ -1 +1,18 @@ -module("ffluci.controller.admin.wifi", package.seeall)
\ No newline at end of file +module("ffluci.controller.admin.wifi", package.seeall) + +function index() + local page = node("admin", "wifi") + page.target = template("admin_wifi/index") + page.title = "Drahtlos" + page.order = 60 + + local page = node("admin", "wifi", "devices") + page.target = cbi("admin_wifi/devices") + page.title = "Geräte" + page.order = 10 + + local page = node("admin", "wifi", "networks") + page.target = cbi("admin_wifi/networks") + page.title = "Netze" + page.order = 20 +end
\ No newline at end of file diff --git a/modules/admin-core/src/i18n/admin_index.en b/modules/admin-core/src/i18n/admin_index.en index 6a48775233..e146644113 100644 --- a/modules/admin-core/src/i18n/admin_index.en +++ b/modules/admin-core/src/i18n/admin_index.en @@ -13,10 +13,6 @@ team = "The FFLuCI Team" luci1 = "Here you can customize the settings and the functionality of FFLuCI." language = "Language" general = "General" -catpriv = "Category Privileges" -catpriv1 = [[To secure FFLuCI even further the user and group privileges of -each category can be decreased. Therefore an attacker cannot takeover the whole system -when a security exploit for any publicly available page is found.]] ucicommit = "Post-commit actions" ucicommit1 = [[These commands will be executed automatically when a given UCI configuration is committed allowing changes to be applied instantly.]] diff --git a/modules/admin-core/src/model/cbi/admin_index/luci.lua b/modules/admin-core/src/model/cbi/admin_index/luci.lua index 4f6910eeec..e541d4ec87 100644 --- a/modules/admin-core/src/model/cbi/admin_index/luci.lua +++ b/modules/admin-core/src/model/cbi/admin_index/luci.lua @@ -19,12 +19,6 @@ for k, v in pairs(ffluci.config.themes) do end end -p = m:section(NamedSection, "category_privileges", "core", translate("catpriv", "Kategorieprivilegien"), - translate("catpriv1", [[Zur zusätzlichen Sicherung der Oberfläche gegen Angreifer, können hier die -Ausführungsrechte der Seiten für einzelne Kategorien reduziert werden. So können z.B. Sicherheitslücken im -ungeschützten Bereich der Oberfläche nicht mehr zur Übernahme des Routers genutzt werden.]])) -p.dynamic = true - u = m:section(NamedSection, "uci_oncommit", "event", translate("ucicommit", "UCI-Befehle beim Anwenden"), translate("ucicommit1", [[Beim Anwenden der Konfiguration aus der Oberflächliche heraus können automatisch die relevanten Dienste neugestart werden, diff --git a/modules/admin-core/src/model/menu/00admin.lua b/modules/admin-core/src/model/menu/00admin.lua deleted file mode 100644 index b21e5e338e..0000000000 --- a/modules/admin-core/src/model/menu/00admin.lua +++ /dev/null @@ -1,36 +0,0 @@ -add("admin", "index", "Übersicht", 10) -act("luci", "Oberfläche") - -add("admin", "status", "Status", 20) -act("syslog", "Systemprotokoll") - -add("admin", "system", "System", 30) -act("packages", "Paketverwaltung") -act("passwd", "Passwort ändern") -act("sshkeys", "SSH-Schlüssel") -act("hostname", "Hostname") -act("fstab", "Einhängepunkte") -act("upgrade", "Firmwareupgrade") -act("reboot", "Neu starten") - -add("admin", "services", "Dienste", 40) -if isfile("/etc/config/olsr") then - act("olsrd", "OLSR") -end -act("httpd", "HTTP-Server") -act("dropbear", "SSH-Server") -act("dnsmasq", "Dnsmasq") - -add("admin", "network", "Netzwerk", 50) -act("vlan", "Switch") -act("ifaces", "Schnittstellen") -act("dhcp", "DHCP-Server") -act("ptp", "PPPoE / PPTP") -act("routes", "Statische Routen") -if isfile("/etc/config/qos") then - act("qos", "Quality of Service") -end - -add("admin", "wifi", "Drahtlos", 60) -act("devices", "Geräte") -act("networks", "Netze")
\ No newline at end of file diff --git a/modules/freifunk/src/controller/admin/index/wizard.lua b/modules/freifunk/src/controller/freifunk/freifunk.lua index efca38d21b..e73ec263cb 100644 --- a/modules/freifunk/src/controller/admin/index/wizard.lua +++ b/modules/freifunk/src/controller/freifunk/freifunk.lua @@ -1,6 +1,79 @@ -module("ffluci.controller.admin.index.wizard", package.seeall) +module("ffluci.controller.freifunk.freifunk", package.seeall) -function action() +function index() + local page = node() + page.target = alias("freifunk") + + local page = node("freifunk") + page.title = "Freifunk" + page.target = alias("freifunk", "index") + page.order = 5 + page.setuser = "nobody" + page.setgroup = "nogroup" + + local page = node("freifunk", "index") + page.target = template("freifunk/index") + page.title = "Übersicht" + page.order = 10 + + local page = node("freifunk", "index", "contact") + page.target = template("freifunk/contact") + page.title = "Kontakt" + + + local page = node("freifunk", "status") + page.target = action_status + page.title = "Status" + page.order = 20 + page.setuser = false + page.setgroup = false + + local page = node("freifunk", "status", "routes") + page.target = template("public_status/routes") + page.title = "Routingtabelle" + page.order = 10 + + local page = node("freifunk", "status", "iwscan") + page.target = template("public_status/iwscan") + page.title = "WLAN-Scan" + page.order = 20 + + + local page = node("admin", "index", "wizard") + page.target = action_wizard + page.title = "Freifunkassistent" + page.order = 20 + + local page = node("admin", "index", "freifunk") + page.target = cbi("freifunk/freifunk") + page.title = "Freifunk" + page.order = 30 + + local page = node("admin", "index", "contact") + page.target = cbi("freifunk/contact") + page.title = "Kontakt" + page.order = 40 +end + +function action_status() + local data = {} + + data.s, data.m, data.r = ffluci.sys.sysinfo() + + data.wifi = ffluci.sys.wifi.getiwconfig() + + data.routes = {} + for i, r in pairs(ffluci.sys.net.routes()) do + if r.Destination == "00000000" then + table.insert(data.routes, r) + end + end + + + ffluci.template.render("public_status/index", data) +end + +function action_wizard() if ffluci.http.formvalue("ip") then return configure_freifunk() end @@ -16,7 +89,7 @@ function action() end end - ffluci.template.render("admin_index/wizard", {ifaces=ifaces}) + ffluci.template.render("freifunk/wizard", {ifaces=ifaces}) end function configure_freifunk() diff --git a/modules/freifunk/src/controller/rpc/luciinfo.lua b/modules/freifunk/src/controller/freifunk/luciinfo.lua index 611423fbb0..bc45898d9c 100644 --- a/modules/freifunk/src/controller/rpc/luciinfo.lua +++ b/modules/freifunk/src/controller/freifunk/luciinfo.lua @@ -1,4 +1,8 @@ -module("ffluci.controller.rpc.luciinfo", package.seeall) +module("ffluci.controller.freifunk.luciinfo", package.seeall) + +function index() + node("freifunk", "luciinfo").target = action_index +end function action_index() local uci = ffluci.model.uci.StateSession() @@ -7,7 +11,7 @@ function action_index() -- General print("luciinfo.api=1") - print("luciinfo.version=" .. tostring(ffluci.__version__)) + print("luciinfo.version=" .. tostring(require("ffluci").__version__)) -- Sysinfo local s, m, r = ffluci.sys.sysinfo() @@ -28,11 +32,11 @@ function action_index() -- Freifunk local ff = uci:sections("freifunk") or {} for k, v in pairs(ff) do - if k:sub(1, 1) ~= "." then for i, j in pairs(v) do - print("freifunk." .. k .. "." .. i .. "=" .. j) + if i:sub(1, 1) ~= "." then + print("freifunk." .. k .. "." .. i .. "=" .. j) + end end - end end end diff --git a/modules/freifunk/src/controller/public/olsr.lua b/modules/freifunk/src/controller/freifunk/olsr.lua index d41f5ed41d..6031cd4317 100644 --- a/modules/freifunk/src/controller/public/olsr.lua +++ b/modules/freifunk/src/controller/freifunk/olsr.lua @@ -1,11 +1,38 @@ -module("ffluci.controller.public.olsr", package.seeall) +module("ffluci.controller.freifunk.olsr", package.seeall) require("ffluci.sys") +function index() + local page = node("freifunk", "olsr") + page.target = action_index + page.title = "OLSR" + page.order = 30 + + local page = node("freifunk", "olsr", "routes") + page.target = action_routes + page.title = "Routen" + page.order = 10 + + local page = node("freifunk", "olsr", "topology") + page.target = action_topology + page.title = "Topologie" + page.order = 20 + + local page = node("freifunk", "olsr", "hna") + page.target = action_hna + page.title = "HNA" + page.order = 30 + + local page = node("freifunk", "olsr", "mid") + page.target = action_mid + page.title = "MID" + page.order = 50 +end + function action_index() local data = fetch_txtinfo("links") if not data or not data.Links then - ffluci.template.render("public_olsr/error_olsr") + ffluci.template.render("freifunk-olsr/error_olsr") return nil end @@ -23,14 +50,14 @@ function action_index() table.sort(data.Links, compare) - ffluci.template.render("public_olsr/index", {links=data.Links}) + ffluci.template.render("freifunk-olsr/index", {links=data.Links}) end function action_routes() local data = fetch_txtinfo("routes") if not data or not data.Routes then - ffluci.template.render("public_olsr/error_olsr") + ffluci.template.render("freifunk-olsr/error_olsr") return nil end @@ -48,14 +75,14 @@ function action_routes() table.sort(data.Routes, compare) - ffluci.template.render("public_olsr/routes", {routes=data.Routes}) + ffluci.template.render("freifunk-olsr/routes", {routes=data.Routes}) end function action_topology() local data = fetch_txtinfo("topology") if not data or not data.Topology then - ffluci.template.render("public_olsr/error_olsr") + ffluci.template.render("freifunk-olsr/error_olsr") return nil end @@ -65,14 +92,14 @@ function action_topology() table.sort(data.Topology, compare) - ffluci.template.render("public_olsr/topology", {routes=data.Topology}) + ffluci.template.render("freifunk-olsr/topology", {routes=data.Topology}) end function action_hna() local data = fetch_txtinfo("hna") if not data or not data.HNA then - ffluci.template.render("public_olsr/error_olsr") + ffluci.template.render("freifunk-olsr/error_olsr") return nil end @@ -82,14 +109,14 @@ function action_hna() table.sort(data.HNA, compare) - ffluci.template.render("public_olsr/hna", {routes=data.HNA}) + ffluci.template.render("freifunk-olsr/hna", {routes=data.HNA}) end function action_mid() local data = fetch_txtinfo("mid") if not data or not data.MID then - ffluci.template.render("public_olsr/error_olsr") + ffluci.template.render("freifunk-olsr/error_olsr") return nil end @@ -99,7 +126,7 @@ function action_mid() table.sort(data.MID, compare) - ffluci.template.render("public_olsr/mid", {mids=data.MID}) + ffluci.template.render("freifunk-olsr/mid", {mids=data.MID}) end diff --git a/modules/freifunk/src/controller/public/index.lua b/modules/freifunk/src/controller/public/index.lua deleted file mode 100644 index f65478c05f..0000000000 --- a/modules/freifunk/src/controller/public/index.lua +++ /dev/null @@ -1 +0,0 @@ -module("ffluci.controller.public.index", package.seeall)
\ No newline at end of file diff --git a/modules/freifunk/src/controller/public/status.lua b/modules/freifunk/src/controller/public/status.lua deleted file mode 100644 index 8d2f7a303f..0000000000 --- a/modules/freifunk/src/controller/public/status.lua +++ /dev/null @@ -1,21 +0,0 @@ -module("ffluci.controller.public.status", package.seeall) - -function action_index() - local data = {} - - data.s, data.m, data.r = ffluci.sys.sysinfo() - - data.wifi = ffluci.sys.wifi.getiwconfig() - - data.routes = {} - for i, r in pairs(ffluci.sys.net.routes()) do - if r.Destination == "00000000" then - table.insert(data.routes, r) - end - end - - - ffluci.template.render("public_status/index", data) -end - - diff --git a/modules/freifunk/src/controller/sudo/status.lua b/modules/freifunk/src/controller/sudo/status.lua deleted file mode 100644 index fd5127d2cf..0000000000 --- a/modules/freifunk/src/controller/sudo/status.lua +++ /dev/null @@ -1 +0,0 @@ -module("ffluci.controller.sudo.status", package.seeall)
\ No newline at end of file diff --git a/modules/freifunk/src/model/cbi/admin_index/contact.lua b/modules/freifunk/src/model/cbi/freifunk/contact.lua index 66a1ec4bde..66a1ec4bde 100644 --- a/modules/freifunk/src/model/cbi/admin_index/contact.lua +++ b/modules/freifunk/src/model/cbi/freifunk/contact.lua diff --git a/modules/freifunk/src/model/cbi/admin_index/freifunk.lua b/modules/freifunk/src/model/cbi/freifunk/freifunk.lua index fe9e285b49..fe9e285b49 100644 --- a/modules/freifunk/src/model/cbi/admin_index/freifunk.lua +++ b/modules/freifunk/src/model/cbi/freifunk/freifunk.lua diff --git a/modules/freifunk/src/model/menu/10freifunk.lua b/modules/freifunk/src/model/menu/10freifunk.lua deleted file mode 100644 index 3adbe89858..0000000000 --- a/modules/freifunk/src/model/menu/10freifunk.lua +++ /dev/null @@ -1,18 +0,0 @@ -add("public", "index", "Übersicht", 10) -act("contact", "Kontakt") - -add("public", "status", "Status", 20) -act("routes", "Routingtabelle") -act("iwscan", "WLAN-Scan") - -add("public", "olsr", "OLSR", 30) -act("routes", "Routen") -act("topology", "Topologie") -act("hna", "HNA") -act("mid", "MID") - - -sel("admin", "index") -act("wizard", "Freifunkassistent") -act("contact", "Kontakt") -act("freifunk", "Freifunk")
\ No newline at end of file diff --git a/modules/freifunk/src/view/public_olsr/error_olsr.htm b/modules/freifunk/src/view/freifunk-olsr/error_olsr.htm index 25426f50d7..25426f50d7 100644 --- a/modules/freifunk/src/view/public_olsr/error_olsr.htm +++ b/modules/freifunk/src/view/freifunk-olsr/error_olsr.htm diff --git a/modules/freifunk/src/view/public_olsr/hna.htm b/modules/freifunk/src/view/freifunk-olsr/hna.htm index c13369f426..c13369f426 100644 --- a/modules/freifunk/src/view/public_olsr/hna.htm +++ b/modules/freifunk/src/view/freifunk-olsr/hna.htm diff --git a/modules/freifunk/src/view/public_olsr/index.htm b/modules/freifunk/src/view/freifunk-olsr/index.htm index 0633d1f456..0633d1f456 100644 --- a/modules/freifunk/src/view/public_olsr/index.htm +++ b/modules/freifunk/src/view/freifunk-olsr/index.htm diff --git a/modules/freifunk/src/view/public_olsr/mid.htm b/modules/freifunk/src/view/freifunk-olsr/mid.htm index 6553237ea5..6553237ea5 100644 --- a/modules/freifunk/src/view/public_olsr/mid.htm +++ b/modules/freifunk/src/view/freifunk-olsr/mid.htm diff --git a/modules/freifunk/src/view/public_olsr/routes.htm b/modules/freifunk/src/view/freifunk-olsr/routes.htm index f3a0fd3366..f3a0fd3366 100644 --- a/modules/freifunk/src/view/public_olsr/routes.htm +++ b/modules/freifunk/src/view/freifunk-olsr/routes.htm diff --git a/modules/freifunk/src/view/public_olsr/topology.htm b/modules/freifunk/src/view/freifunk-olsr/topology.htm index c622026d48..c622026d48 100644 --- a/modules/freifunk/src/view/public_olsr/topology.htm +++ b/modules/freifunk/src/view/freifunk-olsr/topology.htm diff --git a/modules/freifunk/src/view/public_index/contact.htm b/modules/freifunk/src/view/freifunk/contact.htm index 221dc89ccc..221dc89ccc 100644 --- a/modules/freifunk/src/view/public_index/contact.htm +++ b/modules/freifunk/src/view/freifunk/contact.htm diff --git a/modules/freifunk/src/view/public_index/index.htm b/modules/freifunk/src/view/freifunk/index.htm index 6c7fe85883..6c7fe85883 100644 --- a/modules/freifunk/src/view/public_index/index.htm +++ b/modules/freifunk/src/view/freifunk/index.htm diff --git a/modules/freifunk/src/view/admin_index/wizard.htm b/modules/freifunk/src/view/freifunk/wizard.htm index b08703ffec..b08703ffec 100644 --- a/modules/freifunk/src/view/admin_index/wizard.htm +++ b/modules/freifunk/src/view/freifunk/wizard.htm diff --git a/modules/freifunk/src/view/public_status/index.htm b/modules/freifunk/src/view/public_status/index.htm index be0b96888b..3ea120c1e8 100644 --- a/modules/freifunk/src/view/public_status/index.htm +++ b/modules/freifunk/src/view/public_status/index.htm @@ -34,7 +34,25 @@ <th><%:signal Signal%></th> <th><%:noise Rausch%></th> </tr> -<%=ffluci.sys.httpget("http://127.0.0.1" .. controller .. "/sudo/status/iwconfig")%> +<%for k, v in pairs(ffluci.sys.wifi.getiwconfig()) do +%> +<tr> +<td rowspan="2"><%=k%></td> +<td><%=v[1]%></td> +<td><%=v.Frequency%></td> +<td><%=v["Tx-Power"]%></td> +<td><%=v["Bit Rate"]%></td> +<td><%=v["RTS thr"]%></td> +<td><%=v["Fragment thr"]%></td> +<td><%=v["Link Quality"]%></td> +<td><%=v["Signal level"]%></td> +<td><%=v["Noise level"]%></td> +</tr> +<tr> +<td colspan="4"><strong>ESSID: </strong><%=v.ESSID%></td> +<td colspan="5"><strong>BSSID: </strong><%=(v.Cell or v["Access Point"])%></td> +</tr> +<%end%> </table> <br /> <br /> diff --git a/modules/freifunk/src/view/public_status/iwscan.htm b/modules/freifunk/src/view/public_status/iwscan.htm index a8924c8925..c5acdb9acc 100644 --- a/modules/freifunk/src/view/public_status/iwscan.htm +++ b/modules/freifunk/src/view/public_status/iwscan.htm @@ -15,7 +15,24 @@ <th><%:signal Signal%></th> <th><%:noise Rausch%></th> </tr> -<%=ffluci.sys.httpget("http://127.0.0.1" .. controller .. "/sudo/status/iwscan")%> +<%for iface, cells in pairs(ffluci.sys.wifi.iwscan()) do + for i, cell in ipairs(cells) do +%> +<tr> +<td><%=iface%></td> +<td><%=cell.ESSID%></td> +<td><%=cell.Address%></td> +<td><%=cell.Mode%></td> +<td><%=(cell.Channel or cell.Frequency or "")%></td> +<td><%=cell["Encryption key"]%></td> +<td><%=cell.Quality%></td> +<td><%=cell["Signal level"]%></td> +<td><%=cell["Noise level"]%></td> +</tr> +<% + end +end +%> </table> <br /> <%+footer%>
\ No newline at end of file diff --git a/modules/freifunk/src/view/sudo_status/iwconfig.htm b/modules/freifunk/src/view/sudo_status/iwconfig.htm deleted file mode 100644 index 6f5dede700..0000000000 --- a/modules/freifunk/src/view/sudo_status/iwconfig.htm +++ /dev/null @@ -1,21 +0,0 @@ -<% -ffluci.http.prepare_content("text/plain") -for k, v in pairs(ffluci.sys.wifi.getiwconfig()) do -%> -<tr> -<td rowspan="2"><%=k%></td> -<td><%=v[1]%></td> -<td><%=v.Frequency%></td> -<td><%=v["Tx-Power"]%></td> -<td><%=v["Bit Rate"]%></td> -<td><%=v["RTS thr"]%></td> -<td><%=v["Fragment thr"]%></td> -<td><%=v["Link Quality"]%></td> -<td><%=v["Signal level"]%></td> -<td><%=v["Noise level"]%></td> -</tr> -<tr> -<td colspan="4"><strong>ESSID: </strong><%=v.ESSID%></td> -<td colspan="5"><strong>BSSID: </strong><%=(v.Cell or v["Access Point"])%></td> -</tr> -<%end%> diff --git a/modules/freifunk/src/view/sudo_status/iwscan.htm b/modules/freifunk/src/view/sudo_status/iwscan.htm deleted file mode 100644 index 6f321ae9e2..0000000000 --- a/modules/freifunk/src/view/sudo_status/iwscan.htm +++ /dev/null @@ -1,22 +0,0 @@ -<% -ffluci.http.prepare_content("text/plain") -for iface, cells in pairs(ffluci.sys.wifi.iwscan()) do - for i, cell in ipairs(cells) do -%> -<tr> -<td><%=iface%></td> -<td><%=cell.ESSID%></td> -<td><%=cell.Address%></td> -<td><%=cell.Mode%></td> -<td><%=(cell.Channel or cell.Frequency or "")%></td> -<td><%=cell["Encryption key"]%></td> -<td><%=cell.Quality%></td> -<td><%=cell["Signal level"]%></td> -<td><%=cell["Noise level"]%></td> -</tr> -<% - end -end -%> - - |