Renamed FFLuCI to LuCI, ffluci to luci and Freifunk Lua Configuration Interface to Lua Configuration Interface

remotes/tags/0.8.1@3141
Steven Barth 2008-05-25 17:00:30 +00:00
parent c6c50b3ec6
commit 365d80765d
89 changed files with 702 additions and 702 deletions

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<projectDescription> <projectDescription>
<name>ffluci</name> <name>luci</name>
<comment></comment> <comment></comment>
<projects> <projects>
</projects> </projects>

10
INSTALL
View File

@ -1,4 +1,4 @@
FFLuCI Installation Instructions LuCI Installation Instructions
TOC: TOC:
1. Kamikaze Feed 1. Kamikaze Feed
@ -9,13 +9,13 @@ TOC:
1. Change to your OpenWRT buildroot 1. Change to your OpenWRT buildroot
2. Add the following line to your OpenWRT feeds.conf: 2. Add the following line to your OpenWRT feeds.conf:
src-svn ffluci https://dev.leipzig.freifunk.net/svn/ff-luci/trunk/contrib/package src-svn luci https://dev.leipzig.freifunk.net/svn/ff-luci/trunk/contrib/package
3. Run ./scripts/feeds update 3. Run ./scripts/feeds update
4. Run ./scripts/feeds install -a -p ffluci 4. Run ./scripts/feeds install -a -p luci
5. Type make menuconfig and you will find ffluci in the menu "Administration" 5. Type make menuconfig and you will find luci in the menu "Administration"
2. Kamikaze Packages 2. Kamikaze Packages
@ -24,4 +24,4 @@ TOC:
3. Type: ln -s /path/to/ff-luci/contrib/package/* ./ 3. Type: ln -s /path/to/ff-luci/contrib/package/* ./
4. cd to your kamikaze build root and type: make menuconfig 4. cd to your kamikaze build root and type: make menuconfig
You will find ffluci in the menu "Administration" You will find luci in the menu "Administration"

View File

@ -15,7 +15,7 @@ clean:
for i in $(MODULES); do make -C$$i clean; done for i in $(MODULES); do make -C$$i clean; done
host: build host: build
mkdir -p host/ffluci mkdir -p host/luci
for i in $(MODULES); do cp $$i/dist$(LUCI_INSTALLDIR) host/ -R 2>/dev/null || true; done for i in $(MODULES); do cp $$i/dist$(LUCI_INSTALLDIR) host/ -R 2>/dev/null || true; done
hostclean: clean hostclean: clean

4
NOTICE
View File

@ -1,7 +1,7 @@
FFLuCI - Freifunk Lua Configuration Interface LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org> Copyright 2008 Steven Barth <steven@midlink.org>
Licensed under the Apache License, Version 2.0. Licensed under the Apache License, Version 2.0.
Luci-Statistics - Statistics for FFLuCI Luci-Statistics - Statistics for LuCI
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net> Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0. Licensed under the Apache License, Version 2.0.

View File

@ -1,4 +1,4 @@
module("ffluci.controller.luci_ffwizard_leipzig.wizard", package.seeall) module("luci.controller.luci_ffwizard_leipzig.wizard", package.seeall)
function index() function index()
entry({"admin", "index", "wizard"}, action_wizard, "Freifunkassistent", 20) entry({"admin", "index", "wizard"}, action_wizard, "Freifunkassistent", 20)
@ -6,12 +6,12 @@ end
function action_wizard() function action_wizard()
if ffluci.http.formvalue("ip") then if luci.http.formvalue("ip") then
return configure_freifunk() return configure_freifunk()
end end
local ifaces = {} local ifaces = {}
local wldevs = ffluci.model.uci.sections("wireless") local wldevs = luci.model.uci.sections("wireless")
if wldevs then if wldevs then
for k, v in pairs(wldevs) do for k, v in pairs(wldevs) do
@ -21,12 +21,12 @@ function action_wizard()
end end
end end
ffluci.template.render("freifunk/wizard", {ifaces=ifaces}) luci.template.render("freifunk/wizard", {ifaces=ifaces})
end end
function configure_freifunk() function configure_freifunk()
local ip = ffluci.http.formvalue("ip") local ip = luci.http.formvalue("ip")
local uci = ffluci.model.uci.Session() local uci = luci.model.uci.Session()
-- Load UCI -- Load UCI
uci:t_load("network") uci:t_load("network")
@ -65,7 +65,7 @@ function configure_freifunk()
end end
-- Routing from Internal -- Routing from Internal
local iface = ffluci.http.formvalue("frominternal") local iface = luci.http.formvalue("frominternal")
if iface and iface ~= "" then if iface and iface ~= "" then
local routing = uci:t_sections("luci_fw") local routing = uci:t_sections("luci_fw")
if routing then if routing then
@ -84,7 +84,7 @@ function configure_freifunk()
end end
-- Routing to External -- Routing to External
local iface = ffluci.http.formvalue("toexternal") local iface = luci.http.formvalue("toexternal")
if iface and iface ~= "" then if iface and iface ~= "" then
local routing = uci:t_sections("luci_fw") local routing = uci:t_sections("luci_fw")
if routing then if routing then
@ -103,7 +103,7 @@ function configure_freifunk()
end end
-- Configure DHCP -- Configure DHCP
if ffluci.http.formvalue("dhcp") then if luci.http.formvalue("dhcp") then
local dhcpnet = uci:t_get("freifunk", "community", "dhcp"):match("^([0-9]+)") local dhcpnet = uci:t_get("freifunk", "community", "dhcp"):match("^([0-9]+)")
local dhcpip = ip:gsub("^[0-9]+", dhcpnet) local dhcpip = ip:gsub("^[0-9]+", dhcpnet)
@ -155,7 +155,7 @@ function configure_freifunk()
uci:t_set("luci_fw", int, "oface", "ff") uci:t_set("luci_fw", int, "oface", "ff")
uci:t_set("luci_fw", int, "nat", "1") uci:t_set("luci_fw", int, "nat", "1")
local iface = ffluci.http.formvalue("toexternal") local iface = luci.http.formvalue("toexternal")
if iface and iface ~= "" then if iface and iface ~= "" then
local int = uci:t_add("luci_fw", "routing") local int = uci:t_add("luci_fw", "routing")
uci:t_set("luci_fw", int, "iface", "ffdhcp") uci:t_set("luci_fw", int, "iface", "ffdhcp")
@ -166,14 +166,14 @@ function configure_freifunk()
end end
-- Configure OLSR -- Configure OLSR
if ffluci.http.formvalue("olsr") and uci:t_sections("olsr") then if luci.http.formvalue("olsr") and uci:t_sections("olsr") then
for k, v in pairs(uci:t_sections("olsr")) do for k, v in pairs(uci:t_sections("olsr")) do
if v[".type"] == "Interface" or v[".type"] == "LoadPlugin" then if v[".type"] == "Interface" or v[".type"] == "LoadPlugin" then
uci:t_del("olsr", k) uci:t_del("olsr", k)
end end
end end
if ffluci.http.formvalue("shareinet") then if luci.http.formvalue("shareinet") then
uci:t_set("olsr", "dyn_gw", nil, "LoadPlugin") uci:t_set("olsr", "dyn_gw", nil, "LoadPlugin")
uci:t_set("olsr", "dyn_gw", "Library", "olsrd_dyn_gw.so.0.4") uci:t_set("olsr", "dyn_gw", "Library", "olsrd_dyn_gw.so.0.4")
end end
@ -205,7 +205,7 @@ function configure_freifunk()
local wcfg = uci:t_sections("wireless") local wcfg = uci:t_sections("wireless")
if wcfg then if wcfg then
for iface, v in pairs(wcfg) do for iface, v in pairs(wcfg) do
if v[".type"] == "wifi-device" and ffluci.http.formvalue("wifi."..iface) then if v[".type"] == "wifi-device" and luci.http.formvalue("wifi."..iface) then
-- Cleanup -- Cleanup
for k, j in pairs(wcfg) do for k, j in pairs(wcfg) do
if j[".type"] == "wifi-iface" and j.device == iface then if j[".type"] == "wifi-iface" and j.device == iface then
@ -239,5 +239,5 @@ function configure_freifunk()
uci:t_save("wireless") uci:t_save("wireless")
uci:t_save("luci_fw") uci:t_save("luci_fw")
ffluci.http.redirect(ffluci.dispatcher.build_url("admin", "uci", "changes")) luci.http.redirect(luci.dispatcher.build_url("admin", "uci", "changes"))
end end

View File

@ -26,7 +26,7 @@
<div class="cbi-value-title"><%:cfginternal Erlaube Zugriff von internem Netzwerk%>:</div> <div class="cbi-value-title"><%:cfginternal Erlaube Zugriff von internem Netzwerk%>:</div>
<div class="cbi-value-field"><select name="frominternal"> <div class="cbi-value-field"><select name="frominternal">
<option value=""></option> <option value=""></option>
<% for k, v in pairs(ffluci.model.uci.sections("network")) do <% for k, v in pairs(luci.model.uci.sections("network")) do
if v[".type"] == "interface" and k ~= "loopback" then %> if v[".type"] == "interface" and k ~= "loopback" then %>
<option value="<%=k%>"<% if k == "lan" then %> selected="selected"<% end %>><%=k%></option> <option value="<%=k%>"<% if k == "lan" then %> selected="selected"<% end %>><%=k%></option>
<% end <% end
@ -37,7 +37,7 @@ end %>
<div class="cbi-value-title"><%:cfgexternal Erlaube Zugriff auf externes Netzwerk%>:</div> <div class="cbi-value-title"><%:cfgexternal Erlaube Zugriff auf externes Netzwerk%>:</div>
<div class="cbi-value-field"><select name="toexternal"> <div class="cbi-value-field"><select name="toexternal">
<option value=""></option> <option value=""></option>
<% for k, v in pairs(ffluci.model.uci.sections("network")) do <% for k, v in pairs(luci.model.uci.sections("network")) do
if v[".type"] == "interface" and k ~= "loopback" then %> if v[".type"] == "interface" and k ~= "loopback" then %>
<option value="<%=k%>"<% if k == "wan" then %> selected="selected"<% end %>><%=k%></option> <option value="<%=k%>"<% if k == "wan" then %> selected="selected"<% end %>><%=k%></option>
<% end <% end

View File

@ -1,4 +1,4 @@
module("ffluci.controller.luci_fw.luci_fw", package.seeall) module("luci.controller.luci_fw.luci_fw", package.seeall)
function index() function index()
entry({"admin", "network", "portfw"}, cbi("luci_fw/portfw"), "Portweiterleitung", 70) entry({"admin", "network", "portfw"}, cbi("luci_fw/portfw"), "Portweiterleitung", 70)

View File

@ -19,7 +19,7 @@ iface.optional = true
oface = s:option(ListValue, "oface", "Ausgangsschnittstelle") oface = s:option(ListValue, "oface", "Ausgangsschnittstelle")
oface.optional = true oface.optional = true
for k, v in pairs(ffluci.model.uci.sections("network")) do for k, v in pairs(luci.model.uci.sections("network")) do
if v[".type"] == "interface" and k ~= "loopback" then if v[".type"] == "interface" and k ~= "loopback" then
iface:value(k) iface:value(k)
oface:value(k) oface:value(k)

View File

@ -1,5 +1,5 @@
-- ToDo: Translate, Add descriptions and help texts -- ToDo: Translate, Add descriptions and help texts
require("ffluci.sys") require("luci.sys")
m = Map("luci_fw", "Portweiterleitung", [[Portweiterleitungen ermöglichen es interne m = Map("luci_fw", "Portweiterleitung", [[Portweiterleitungen ermöglichen es interne
Netzwerkdienste von einem anderen externen Netzwerk aus erreichbar zu machen.]]) Netzwerkdienste von einem anderen externen Netzwerk aus erreichbar zu machen.]])
@ -10,7 +10,7 @@ s.anonymous = true
iface = s:option(ListValue, "iface", "Schnittstelle", "Externe Schnittstelle") iface = s:option(ListValue, "iface", "Schnittstelle", "Externe Schnittstelle")
iface.default = "wan" iface.default = "wan"
for k, v in pairs(ffluci.model.uci.sections("network")) do for k, v in pairs(luci.model.uci.sections("network")) do
if v[".type"] == "interface" and k ~= "loopback" then if v[".type"] == "interface" and k ~= "loopback" then
iface:value(k) iface:value(k)
end end

View File

@ -1,5 +1,5 @@
-- ToDo: Translate, Add descriptions and help texts -- ToDo: Translate, Add descriptions and help texts
require("ffluci.sys") require("luci.sys")
m = Map("luci_fw", "Routing", [[An dieser Stelle wird festlegt, welcher Netzverkehr zwischen einzelnen m = Map("luci_fw", "Routing", [[An dieser Stelle wird festlegt, welcher Netzverkehr zwischen einzelnen
Schnittstellen erlaubt werden soll. Es werden jeweils nur neue Verbindungen Schnittstellen erlaubt werden soll. Es werden jeweils nur neue Verbindungen
betrachtet, d.h. Pakete von aufgebauten oder zugehörigen Verbindungen werden automatisch in beide Richtungen betrachtet, d.h. Pakete von aufgebauten oder zugehörigen Verbindungen werden automatisch in beide Richtungen
@ -14,7 +14,7 @@ s.anonymous = true
iface = s:option(ListValue, "iface", "Eingang", "Eingangsschnittstelle") iface = s:option(ListValue, "iface", "Eingang", "Eingangsschnittstelle")
oface = s:option(ListValue, "oface", "Ausgang", "Ausgangsschnittstelle") oface = s:option(ListValue, "oface", "Ausgang", "Ausgangsschnittstelle")
for k, v in pairs(ffluci.model.uci.sections("network")) do for k, v in pairs(luci.model.uci.sections("network")) do
if v[".type"] == "interface" and k ~= "loopback" then if v[".type"] == "interface" and k ~= "loopback" then
iface:value(k) iface:value(k)
oface:value(k) oface:value(k)

View File

@ -2,17 +2,17 @@
package.path = "/usr/lib/lua/?.lua;/usr/lib/lua/?/init.lua;" .. package.path package.path = "/usr/lib/lua/?.lua;/usr/lib/lua/?/init.lua;" .. package.path
package.cpath = "/usr/lib/lua/?.so;" .. package.cpath package.cpath = "/usr/lib/lua/?.so;" .. package.cpath
require("ffluci.http") require("luci.http")
require("ffluci.sys") require("luci.sys")
require("ffluci.model.uci") require("luci.model.uci")
local srv local srv
local net local net
local ip = ffluci.http.env.REMOTE_ADDR local ip = luci.http.env.REMOTE_ADDR
for k, v in pairs(ffluci.model.uci.sections("network")) do for k, v in pairs(luci.model.uci.sections("network")) do
if v[".type"] == "interface" and v.ipaddr then if v[".type"] == "interface" and v.ipaddr then
local p = ffluci.sys.net.mask4prefix(v.netmask) local p = luci.sys.net.mask4prefix(v.netmask)
if ffluci.sys.net.belongs(ip, v.ipaddr, p) then if luci.sys.net.belongs(ip, v.ipaddr, p) then
net = k net = k
srv = v.ipaddr srv = v.ipaddr
break break
@ -21,30 +21,30 @@ for k, v in pairs(ffluci.model.uci.sections("network")) do
end end
local stat = false local stat = false
for k, v in pairs(ffluci.model.uci.sections("luci_splash")) do for k, v in pairs(luci.model.uci.sections("luci_splash")) do
if v[".type"] == "iface" and v.network == net then if v[".type"] == "iface" and v.network == net then
stat = true stat = true
end end
end end
if not srv then if not srv then
ffluci.http.prepare_content("text/plain") luci.http.prepare_content("text/plain")
print("Unable to detect network settings!") print("Unable to detect network settings!")
elseif not stat then elseif not stat then
ffluci.http.redirect("http://" .. srv) luci.http.redirect("http://" .. srv)
else else
local action = "splash" local action = "splash"
local mac = ffluci.sys.net.ip4mac(ip) local mac = luci.sys.net.ip4mac(ip)
if not mac then if not mac then
action = "unknown" action = "unknown"
end end
local status = ffluci.sys.execl("luci-splash status "..mac)[1] local status = luci.sys.execl("luci-splash status "..mac)[1]
if status == "whitelisted" or status == "lease" then if status == "whitelisted" or status == "lease" then
action = "allowed" action = "allowed"
end end
ffluci.http.redirect("http://" .. srv .. "/cgi-bin/luci-splash/" .. action) luci.http.redirect("http://" .. srv .. "/cgi-bin/luci-splash/" .. action)
end end

View File

@ -5,6 +5,6 @@
<meta http-equiv="refresh" content="0; URL=/cgi-bin/index.cgi" /> <meta http-equiv="refresh" content="0; URL=/cgi-bin/index.cgi" />
</head> </head>
<body style="background-color: black"> <body style="background-color: black">
<a style="color: white; text-decoration: none" href="/cgi-bin/index.cgi">FFLuCI - Freifunk Lua Configuration Interface</a> <a style="color: white; text-decoration: none" href="/cgi-bin/index.cgi">LuCI - Lua Configuration Interface</a>
</body> </body>
</html> </html>

View File

@ -2,12 +2,12 @@
package.path = "/usr/lib/lua/?.lua;/usr/lib/lua/?/init.lua;" .. package.path package.path = "/usr/lib/lua/?.lua;/usr/lib/lua/?/init.lua;" .. package.path
package.cpath = "/usr/lib/lua/?.so;" .. package.cpath package.cpath = "/usr/lib/lua/?.so;" .. package.cpath
require("ffluci.http") require("luci.http")
require("ffluci.sys") require("luci.sys")
require("ffluci.model.uci") require("luci.model.uci")
-- Init state session -- Init state session
uci = ffluci.model.uci.StateSession() uci = luci.model.uci.StateSession()
function main(argv) function main(argv)
@ -125,7 +125,7 @@ end
function listrules() function listrules()
local cmd = "iptables -t nat -L luci_splash_leases | grep RETURN |" local cmd = "iptables -t nat -L luci_splash_leases | grep RETURN |"
cmd = cmd .. "egrep -io [0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+" cmd = cmd .. "egrep -io [0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+"
return ffluci.util.split(ffluci.sys.exec(cmd)) return luci.util.split(luci.sys.exec(cmd))
end end

View File

@ -1,4 +1,4 @@
#!/bin/sh #!/bin/sh
echo "Status: 302 Found" echo "Status: 302 Found"
echo "Location: /cgi-bin/ffluci/splash/splash$PATH_INFO" echo "Location: /cgi-bin/luci/splash/splash$PATH_INFO"
echo echo

View File

@ -1,4 +1,4 @@
module("ffluci.controller.splash.splash", package.seeall) module("luci.controller.splash.splash", package.seeall)
function index() function index()
local page = node("admin", "services", "splash") local page = node("admin", "services", "splash")
@ -12,19 +12,19 @@ function index()
end end
function action_activate() function action_activate()
local mac = ffluci.sys.net.ip4mac(ffluci.http.env.REMOTE_ADDR) local mac = luci.sys.net.ip4mac(luci.http.env.REMOTE_ADDR)
if mac and ffluci.http.formvalue("accept") then if mac and luci.http.formvalue("accept") then
os.execute("luci-splash add "..mac.." >/dev/null 2>&1") os.execute("luci-splash add "..mac.." >/dev/null 2>&1")
ffluci.http.redirect(ffluci.model.uci.get("freifunk", "community", "homepage")) luci.http.redirect(luci.model.uci.get("freifunk", "community", "homepage"))
else else
ffluci.http.redirect(ffluci.dispatcher.build_url()) luci.http.redirect(luci.dispatcher.build_url())
end end
end end
function action_allowed() function action_allowed()
ffluci.http.redirect(ffluci.dispatcher.build_url()) luci.http.redirect(luci.dispatcher.build_url())
end end
function action_unknown() function action_unknown()
ffluci.http.redirect(ffluci.dispatcher.build_url()) luci.http.redirect(luci.dispatcher.build_url())
end end

View File

@ -1,5 +1,5 @@
-- ToDo: Translate, Add descriptions and help texts -- ToDo: Translate, Add descriptions and help texts
require("ffluci.model.uci") require("luci.model.uci")
m = Map("luci_splash", "Client-Splash", [[Client-Splash ist das Freifunk Hotspot-Authentifizierungs-System.]]) m = Map("luci_splash", "Client-Splash", [[Client-Splash ist das Freifunk Hotspot-Authentifizierungs-System.]])
@ -11,7 +11,7 @@ s.addremove = true
s.anonymous = true s.anonymous = true
iface = s:option(ListValue, "network", "Schnittstelle") iface = s:option(ListValue, "network", "Schnittstelle")
for k, v in pairs(ffluci.model.uci.sections("network")) do for k, v in pairs(luci.model.uci.sections("network")) do
if v[".type"] == "interface" and k ~= "loopback" then if v[".type"] == "interface" and k ~= "loopback" then
iface:value(k) iface:value(k)
end end

View File

@ -1,3 +0,0 @@
#!/usr/bin/haserl --shell=luac
require("ffluci.dispatcher").createindex()
ffluci.dispatcher.httpdispatch()

View File

@ -1,3 +1,3 @@
#!/usr/bin/haserl --shell=luac #!/usr/bin/haserl --shell=luac
print("Status: 302 Found") print("Status: 302 Found")
print("Location: ffluci\n") print("Location: luci\n")

View File

@ -0,0 +1,3 @@
#!/usr/bin/haserl --shell=luac
require("luci.dispatcher").createindex()
luci.dispatcher.httpdispatch()

View File

@ -1,4 +1,4 @@
#!/usr/bin/haserl --shell=luac --upload-limit=16384 #!/usr/bin/haserl --shell=luac --upload-limit=16384
-- This is a bit hacky: remove -upload from SCRIPT_NAME -- This is a bit hacky: remove -upload from SCRIPT_NAME
ENV.SCRIPT_NAME = ENV.SCRIPT_NAME:sub(1, #ENV.SCRIPT_NAME - 7) ENV.SCRIPT_NAME = ENV.SCRIPT_NAME:sub(1, #ENV.SCRIPT_NAME - 7)
dofile("ffluci") dofile("luci")

View File

@ -5,6 +5,6 @@
<meta http-equiv="refresh" content="0; URL=/cgi-bin/index.cgi" /> <meta http-equiv="refresh" content="0; URL=/cgi-bin/index.cgi" />
</head> </head>
<body style="background-color: black"> <body style="background-color: black">
<a style="color: white; text-decoration: none" href="/cgi-bin/index.cgi">FFLuCI - Freifunk Lua Configuration Interface</a> <a style="color: white; text-decoration: none" href="/cgi-bin/index.cgi">LuCI - Lua Configuration Interface</a>
</body> </body>
</html> </html>

View File

@ -1,5 +1,5 @@
--[[ --[[
FFLuCI - SGI-Module for Haserl LuCI - SGI-Module for Haserl
Description: Description:
Server Gateway Interface for Haserl Server Gateway Interface for Haserl
@ -23,30 +23,30 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
]]-- ]]--
module("ffluci.sgi.haserl", package.seeall) module("luci.sgi.haserl", package.seeall)
require("ffluci.fs") require("luci.fs")
-- Environment Table -- Environment Table
ffluci.http.env = ENV luci.http.env = ENV
-- Returns the main dispatcher URL -- Returns the main dispatcher URL
function ffluci.http.dispatcher() function luci.http.dispatcher()
return ffluci.http.env.SCRIPT_NAME or "" return luci.http.env.SCRIPT_NAME or ""
end end
-- Returns the upload dispatcher URL -- Returns the upload dispatcher URL
function ffluci.http.dispatcher_upload() function luci.http.dispatcher_upload()
return ffluci.http.dispatcher() .. "-upload" return luci.http.dispatcher() .. "-upload"
end end
-- Returns a table of all COOKIE, GET and POST Parameters -- Returns a table of all COOKIE, GET and POST Parameters
function ffluci.http.formvalues() function luci.http.formvalues()
return FORM return FORM
end end
-- Gets form value from key -- Gets form value from key
function ffluci.http.formvalue(key, default) function luci.http.formvalue(key, default)
local c = ffluci.http.formvalues() local c = luci.http.formvalues()
for match in key:gmatch("[%w-_]+") do for match in key:gmatch("[%w-_]+") do
c = c[match] c = c[match]
@ -59,39 +59,39 @@ function ffluci.http.formvalue(key, default)
end end
-- Gets a table of values with a certain prefix -- Gets a table of values with a certain prefix
function ffluci.http.formvaluetable(prefix) function luci.http.formvaluetable(prefix)
return ffluci.http.formvalue(prefix, {}) return luci.http.formvalue(prefix, {})
end end
-- Sends a custom HTTP-Header -- Sends a custom HTTP-Header
function ffluci.http.header(key, value) function luci.http.header(key, value)
print(key .. ": " .. value) print(key .. ": " .. value)
end end
-- Set Content-Type -- Set Content-Type
function ffluci.http.prepare_content(type) function luci.http.prepare_content(type)
print("Content-Type: "..type.."\n") print("Content-Type: "..type.."\n")
end end
-- Asks the browser to redirect to "url" -- Asks the browser to redirect to "url"
function ffluci.http.redirect(url) function luci.http.redirect(url)
ffluci.http.status(302, "Found") luci.http.status(302, "Found")
ffluci.http.header("Location", url) luci.http.header("Location", url)
print() print()
end end
-- Returns the path of an uploaded file -- Returns the path of an uploaded file
-- WARNING! File uploads can be easily spoofed! Do additional sanity checks! -- WARNING! File uploads can be easily spoofed! Do additional sanity checks!
function ffluci.http.upload(name) function luci.http.upload(name)
local fpath = ffluci.http.formvalue(name) local fpath = luci.http.formvalue(name)
local fname = ffluci.http.formvalue(name .. "_name") local fname = luci.http.formvalue(name .. "_name")
if fpath and fname and ffluci.fs.isfile(fpath) then if fpath and fname and luci.fs.isfile(fpath) then
return fpath return fpath
end end
end end
-- Sets HTTP-Status-Header -- Sets HTTP-Status-Header
function ffluci.http.status(code, message) function luci.http.status(code, message)
print("Status: " .. tostring(code) .. " " .. message) print("Status: " .. tostring(code) .. " " .. message)
end end

View File

@ -3,7 +3,7 @@ module("webuci", package.seeall)
function prepare_req(uri) function prepare_req(uri)
env = {} env = {}
env.REQUEST_URI = uri env.REQUEST_URI = uri
require("ffluci.dispatcher").createindex() require("luci.dispatcher").createindex()
end end
function init_req(context) function init_req(context)
@ -17,5 +17,5 @@ function init_req(context)
end end
function handle_req(context) function handle_req(context)
ffluci.dispatcher.httpdispatch() luci.dispatcher.httpdispatch()
end end

View File

@ -1,5 +1,5 @@
--[[ --[[
FFLuCI - SGI-Module for Haserl LuCI - SGI-Module for Haserl
Description: Description:
Server Gateway Interface for Haserl Server Gateway Interface for Haserl
@ -23,40 +23,40 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
]]-- ]]--
module("ffluci.sgi.webuci", package.seeall) module("luci.sgi.webuci", package.seeall)
-- Environment Table -- Environment Table
ffluci.http.env = webuci.env luci.http.env = webuci.env
local status_set = false local status_set = false
-- Returns the main dispatcher URL -- Returns the main dispatcher URL
function ffluci.http.dispatcher() function luci.http.dispatcher()
return ffluci.http.env.SCRIPT_NAME or "" return luci.http.env.SCRIPT_NAME or ""
end end
-- Returns the upload dispatcher URL -- Returns the upload dispatcher URL
function ffluci.http.dispatcher_upload() function luci.http.dispatcher_upload()
-- To be implemented -- To be implemented
end end
-- Returns a table of all COOKIE, GET and POST Parameters -- Returns a table of all COOKIE, GET and POST Parameters
function ffluci.http.formvalues() function luci.http.formvalues()
return webuci.vars return webuci.vars
end end
-- Gets form value from key -- Gets form value from key
function ffluci.http.formvalue(key, default) function luci.http.formvalue(key, default)
return ffluci.http.formvalues()[key] or default return luci.http.formvalues()[key] or default
end end
-- Gets a table of values with a certain prefix -- Gets a table of values with a certain prefix
function ffluci.http.formvaluetable(prefix) function luci.http.formvaluetable(prefix)
local vals = {} local vals = {}
prefix = prefix and prefix .. "." or "." prefix = prefix and prefix .. "." or "."
for k, v in pairs(ffluci.http.formvalues()) do for k, v in pairs(luci.http.formvalues()) do
if k:find(prefix, 1, true) == 1 then if k:find(prefix, 1, true) == 1 then
vals[k:sub(#prefix + 1)] = v vals[k:sub(#prefix + 1)] = v
end end
@ -66,34 +66,34 @@ function ffluci.http.formvaluetable(prefix)
end end
-- Sends a custom HTTP-Header -- Sends a custom HTTP-Header
function ffluci.http.header(key, value) function luci.http.header(key, value)
print(key .. ": " .. value) print(key .. ": " .. value)
end end
-- Set Content-Type -- Set Content-Type
function ffluci.http.prepare_content(type) function luci.http.prepare_content(type)
if not status_set then if not status_set then
ffluci.http.status(200, "OK") luci.http.status(200, "OK")
end end
print("Content-Type: "..type.."\n") print("Content-Type: "..type.."\n")
end end
-- Asks the browser to redirect to "url" -- Asks the browser to redirect to "url"
function ffluci.http.redirect(url) function luci.http.redirect(url)
ffluci.http.status(302, "Found") luci.http.status(302, "Found")
ffluci.http.header("Location", url) luci.http.header("Location", url)
print() print()
end end
-- Returns the path of an uploaded file -- Returns the path of an uploaded file
-- WARNING! File uploads can be easily spoofed! Do additional sanity checks! -- WARNING! File uploads can be easily spoofed! Do additional sanity checks!
function ffluci.http.upload(name) function luci.http.upload(name)
-- To be implemented -- To be implemented
end end
-- Sets HTTP-Status-Header -- Sets HTTP-Status-Header
function ffluci.http.status(code, message) function luci.http.status(code, message)
print(webuci.env.SERVER_PROTOCOL .. " " .. tostring(code) .. " " .. message) print(webuci.env.SERVER_PROTOCOL .. " " .. tostring(code) .. " " .. message)
status_set = true status_set = true
end end

View File

@ -1,3 +1,3 @@
LUAC = luac LUAC = luac
LUAC_OPTIONS = -s LUAC_OPTIONS = -s
LUCI_INSTALLDIR = /usr/lib/lua/ffluci LUCI_INSTALLDIR = /usr/lib/lua/luci

View File

@ -1,230 +0,0 @@
include $(TOPDIR)/rules.mk
PKG_BRANCH:=trunk
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.5+svn$(PKG_REV)
PKG_RELEASE:=1
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.gz
PKG_SOURCE_PROTO:=svn
PKG_SOURCE_VERSION:=$(PKG_REV)
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install
# LUA_TARGET:=compile LUAC=$(BUILD_DIR_HOST)/lua/luac
LUA_TARGET:=source
include $(INCLUDE_DIR)/package.mk
define Build/Configure
endef
define Build/Compile
$(MAKE) -C$(PKG_BUILD_DIR) build LUA_TARGET=$(LUA_TARGET)
endef
define Package/ffluci/template
SECTION:=admin
CATEGORY:=Administration
TITLE:=FFLuCI - Freifunk Lua Configuration Interface
URL:=http://luci.freifunk-halle.net/
MAINTAINER:=Steven Barth <steven-at-midlink-dot-org>
endef
define Package/ffluci/install/template
$(CP) $(PKG_BUILD_DIR)/$(2)/dist/* $(1)/ -R
endef
define Package/ffluci
$(call Package/ffluci/template)
MENU:=1
DEPENDS:=+lua +luaposix +luci-addons
endef
define Package/ffluci/conffiles
/etc/config/luci
endef
define Package/ffluci/install
$(call Package/ffluci/install/template,$(1),core)
$(call Package/ffluci/install/template,$(1),themes/fledermaus)
endef
### Community Packages ###
define Package/ffluci-ff-halle
$(call Package/ffluci/template)
DEPENDS:=ffluci \
+ffluci-sgi-haserl +ffluci-mod-freifunk +ffluci-app-splash \
+ffluci-app-ffwizard-leipzig \
+olsrd +olsrd-mod-dyn-gw +olsrd-mod-txtinfo +olsrd-mod-nameservice \
+kmod-tun +ip
TITLE:=Freifunk Halle Community Meta-Package
endef
define Package/ffluci-ff-halle/install
endef
define Package/ffluci-ff-leipzig
$(call Package/ffluci/template)
DEPENDS:=ffluci \
+ffluci-sgi-haserl +ffluci-mod-freifunk +ffluci-app-splash \
+ffluci-app-ffwizard-leipzig \
+olsrd +olsrd-mod-dyn-gw +olsrd-mod-txtinfo +olsrd-mod-nameservice \
+kmod-tun +ip
TITLE:=Freifunk Leipzig Community Meta-Package
endef
define Package/ffluci-ff-leipzig/install
$(call Package/ffluci/install/template,$(1),applications/community-leipzig)
$(CP) -a ./ipkg/ffluci-ff-leipzig.postinst $(1)/CONTROL/postinst
endef
define Package/ffluci-ff-hannover
$(call Package/ffluci/template)
DEPENDS:=ffluci \
+ffluci-sgi-haserl +ffluci-mod-freifunk +ffluci-app-splash \
+olsrd +olsrd-mod-dyn-gw +olsrd-mod-txtinfo +olsrd-mod-nameservice
TITLE:=Freifunk Hannover Community Meta-Package
URL:=http://www.freifunk-hannover.de/
MAINTAINER:=Mickey Knox <mickey-at-netfreaks-dot-org>
endef
define Package/ffluci-ff-hannover/install
$(call Package/ffluci/install/template,$(1),applications/community-hannover)
$(CP) -a ./ipkg/ffluci-ff-hannover.postinst $(1)/CONTROL/postinst
endef
### Modules ###
define Package/ffluci-mod-admin-core
$(call Package/ffluci/template)
DEPENDS:=ffluci
TITLE:=Core administrative pages
endef
define Package/ffluci-mod-admin-core/install
$(call Package/ffluci/install/template,$(1),modules/admin-core)
endef
define Package/ffluci-mod-freifunk
$(call Package/ffluci/template)
DEPENDS:=ffluci +ffluci-mod-admin-core +ffluci-app-firewall
TITLE:=Freifunk public and administrative pages
endef
define Package/ffluci-mod-freifunk/conffiles
/etc/config/freifunk
endef
define Package/ffluci-mod-freifunk/install
$(call Package/ffluci/install/template,$(1),modules/freifunk)
endef
### Applications ###
define Package/ffluci-app-ffwizard-leipzig
$(call Package/ffluci/template)
DEPENDS:=ffluci +ffluci-mod-freifunk
TITLE:=Freifunk Leipzig configuration wizard
endef
define Package/ffluci-app-ffwizard-leipzig/install
$(call Package/ffluci/install/template,$(1),applications/luci-ffwizard-leipzig)
endef
define Package/ffluci-app-firewall
$(call Package/ffluci/template)
DEPENDS:=ffluci +ffluci-mod-admin-core
TITLE:=Firewall and Portforwarding application
endef
define Package/ffluci-app-firewall/conffiles
/etc/config/luci_fw
endef
define Package/ffluci-app-firewall/install
$(call Package/ffluci/install/template,$(1),applications/luci-fw)
$(INSTALL_BIN) $(PKG_BUILD_DIR)/applications/luci-fw/dist/etc/init.d/luci_fw $(1)/etc/init.d
endef
define Package/ffluci-app-splash
$(call Package/ffluci/template)
DEPENDS:=ffluci +ffluci-mod-freifunk +ffluci-sgi-haserl +iptables-mod-nat +iptables-mod-ipopt
TITLE:=Freifunk DHCP-Splash application
endef
define Package/ffluci-app-splash/conffiles
/etc/config/luci_splash
endef
define Package/ffluci-app-splash/install
$(call Package/ffluci/install/template,$(1),applications/luci-splash)
$(INSTALL_BIN) $(PKG_BUILD_DIR)/applications/luci-splash/dist/usr/sbin/luci-splash $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/applications/luci-splash/dist/etc/init.d/luci_splash $(1)/etc/init.d
$(INSTALL_BIN) $(PKG_BUILD_DIR)/applications/luci-splash/dist/etc/cron.minutely/luci_splash $(1)/etc/cron.minutely
$(INSTALL_BIN) $(PKG_BUILD_DIR)/applications/luci-splash/dist/usr/lib/luci-splash/htdocs/cgi-bin/index.cgi $(1)/usr/lib/luci-splash/htdocs/cgi-bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/applications/luci-splash/dist/www/cgi-bin/luci-splash $(1)/www/cgi-bin/luci-splash
endef
### Server Gateway Interfaces ###
define Package/ffluci-sgi-haserl
$(call Package/ffluci/template)
DEPENDS:=ffluci +haserl-lua
TITLE:=SGI for Haserl
endef
define Package/ffluci-sgi-haserl/install
$(call Package/ffluci/install/template,$(1),applications/sgi-haserl)
$(CP) -a ./ipkg/ffluci-sgi-haserl.postinst $(1)/CONTROL/postinst
endef
define Package/ffluci-sgi-webuci
$(call Package/ffluci/template)
DEPENDS:=ffluci
TITLE:=SGI for Webuci
endef
define Package/ffluci-sgi-webuci/install
$(call Package/ffluci/install/template,$(1),applications/sgi-webuci)
endef
$(eval $(call BuildPackage,ffluci))
$(eval $(call BuildPackage,ffluci-ff-halle))
$(eval $(call BuildPackage,ffluci-ff-leipzig))
$(eval $(call BuildPackage,ffluci-ff-hannover))
$(eval $(call BuildPackage,ffluci-mod-admin-core))
$(eval $(call BuildPackage,ffluci-mod-freifunk))
$(eval $(call BuildPackage,ffluci-app-ffwizard-leipzig))
$(eval $(call BuildPackage,ffluci-app-firewall))
$(eval $(call BuildPackage,ffluci-app-splash))
$(eval $(call BuildPackage,ffluci-sgi-haserl))
$(eval $(call BuildPackage,ffluci-sgi-webuci))

View File

@ -1,4 +0,0 @@
#!/bin/sh
[ -n "${IPKG_INSTROOT}" ] || {
( . /etc/uci-defaults/ffluci-community-hannover ) && rm -f /etc/uci-defaults/ffluci-community-hannover
}

View File

@ -1,4 +0,0 @@
#!/bin/sh
[ -n "${IPKG_INSTROOT}" ] || {
( . /etc/uci-defaults/ffluci-community-leipzig ) && rm -f /etc/uci-defaults/ffluci-community-leipzig
}

View File

@ -12,7 +12,7 @@ PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=http://dev.leipzig.freifunk.net/svn/ff-luci/trunk/contrib/package-source/ \ PKG_SOURCE_URL:=http://dev.leipzig.freifunk.net/svn/ff-luci/trunk/contrib/package-source/ \
http://firmware.freifunk-halle.net/ffluci/package-source/ http://firmware.freifunk-halle.net/luci/package-source/
PKG_MD5SUM:=b004005594b84e35839b1d5c330f8e03 PKG_MD5SUM:=b004005594b84e35839b1d5c330f8e03

View File

@ -17,7 +17,7 @@ endef
define Package/luci-addons define Package/luci-addons
SECTION:=utils SECTION:=utils
CATEGORY:=Utilities CATEGORY:=Utilities
TITLE:=FFLuCI System Addons for Kamikaze TITLE:=LuCI System Addons for Kamikaze
URL:=http://luci.freifunk-halle.net URL:=http://luci.freifunk-halle.net
endef endef
@ -28,7 +28,7 @@ define Package/luci-addons/install
$(INSTALL_DIR) $(1)/etc/hotplug.d/iface $(INSTALL_DIR) $(1)/etc/hotplug.d/iface
$(INSTALL_BIN) ./dist/usr/bin/run-parts $(1)/usr/bin $(INSTALL_BIN) ./dist/usr/bin/run-parts $(1)/usr/bin
$(INSTALL_BIN) ./dist/sbin/ffluci-flash $(1)/sbin $(INSTALL_BIN) ./dist/sbin/luci-flash $(1)/sbin
$(CP) ./dist/etc/crontabs/root $(1)/etc/crontabs/root $(CP) ./dist/etc/crontabs/root $(1)/etc/crontabs/root
$(CP) ./dist/etc/hotplug.d/iface/20-aliases $(1)/etc/hotplug.d/iface/20-aliases $(CP) ./dist/etc/hotplug.d/iface/20-aliases $(1)/etc/hotplug.d/iface/20-aliases

View File

@ -0,0 +1,230 @@
include $(TOPDIR)/rules.mk
PKG_BRANCH:=trunk
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:=luci
PKG_VERSION:=0.5+svn$(PKG_REV)
PKG_RELEASE:=1
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.gz
PKG_SOURCE_PROTO:=svn
PKG_SOURCE_VERSION:=$(PKG_REV)
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install
# LUA_TARGET:=compile LUAC=$(BUILD_DIR_HOST)/lua/luac
LUA_TARGET:=source
include $(INCLUDE_DIR)/package.mk
define Build/Configure
endef
define Build/Compile
$(MAKE) -C$(PKG_BUILD_DIR) build LUA_TARGET=$(LUA_TARGET)
endef
define Package/luci/template
SECTION:=admin
CATEGORY:=Administration
TITLE:=LuCI - Lua Configuration Interface
URL:=http://luci.freifunk-halle.net/
MAINTAINER:=Steven Barth <steven-at-midlink-dot-org>
endef
define Package/luci/install/template
$(CP) $(PKG_BUILD_DIR)/$(2)/dist/* $(1)/ -R
endef
define Package/luci
$(call Package/luci/template)
MENU:=1
DEPENDS:=+lua +luaposix +luci-addons
endef
define Package/luci/conffiles
/etc/config/luci
endef
define Package/luci/install
$(call Package/luci/install/template,$(1),core)
$(call Package/luci/install/template,$(1),themes/fledermaus)
endef
### Community Packages ###
define Package/luci-ff-halle
$(call Package/luci/template)
DEPENDS:=luci \
+luci-sgi-haserl +luci-mod-freifunk +luci-app-splash \
+luci-app-ffwizard-leipzig \
+olsrd +olsrd-mod-dyn-gw +olsrd-mod-txtinfo +olsrd-mod-nameservice \
+kmod-tun +ip
TITLE:=Freifunk Halle Community Meta-Package
endef
define Package/luci-ff-halle/install
endef
define Package/luci-ff-leipzig
$(call Package/luci/template)
DEPENDS:=luci \
+luci-sgi-haserl +luci-mod-freifunk +luci-app-splash \
+luci-app-ffwizard-leipzig \
+olsrd +olsrd-mod-dyn-gw +olsrd-mod-txtinfo +olsrd-mod-nameservice \
+kmod-tun +ip
TITLE:=Freifunk Leipzig Community Meta-Package
endef
define Package/luci-ff-leipzig/install
$(call Package/luci/install/template,$(1),applications/community-leipzig)
$(CP) -a ./ipkg/luci-ff-leipzig.postinst $(1)/CONTROL/postinst
endef
define Package/luci-ff-hannover
$(call Package/luci/template)
DEPENDS:=luci \
+luci-sgi-haserl +luci-mod-freifunk +luci-app-splash \
+olsrd +olsrd-mod-dyn-gw +olsrd-mod-txtinfo +olsrd-mod-nameservice
TITLE:=Freifunk Hannover Community Meta-Package
URL:=http://www.freifunk-hannover.de/
MAINTAINER:=Mickey Knox <mickey-at-netfreaks-dot-org>
endef
define Package/luci-ff-hannover/install
$(call Package/luci/install/template,$(1),applications/community-hannover)
$(CP) -a ./ipkg/luci-ff-hannover.postinst $(1)/CONTROL/postinst
endef
### Modules ###
define Package/luci-mod-admin-core
$(call Package/luci/template)
DEPENDS:=luci
TITLE:=Core administrative pages
endef
define Package/luci-mod-admin-core/install
$(call Package/luci/install/template,$(1),modules/admin-core)
endef
define Package/luci-mod-freifunk
$(call Package/luci/template)
DEPENDS:=luci +luci-mod-admin-core +luci-app-firewall
TITLE:=Freifunk public and administrative pages
endef
define Package/luci-mod-freifunk/conffiles
/etc/config/freifunk
endef
define Package/luci-mod-freifunk/install
$(call Package/luci/install/template,$(1),modules/freifunk)
endef
### Applications ###
define Package/luci-app-ffwizard-leipzig
$(call Package/luci/template)
DEPENDS:=luci +luci-mod-freifunk
TITLE:=Freifunk Leipzig configuration wizard
endef
define Package/luci-app-ffwizard-leipzig/install
$(call Package/luci/install/template,$(1),applications/luci-ffwizard-leipzig)
endef
define Package/luci-app-firewall
$(call Package/luci/template)
DEPENDS:=luci +luci-mod-admin-core
TITLE:=Firewall and Portforwarding application
endef
define Package/luci-app-firewall/conffiles
/etc/config/luci_fw
endef
define Package/luci-app-firewall/install
$(call Package/luci/install/template,$(1),applications/luci-fw)
$(INSTALL_BIN) $(PKG_BUILD_DIR)/applications/luci-fw/dist/etc/init.d/luci_fw $(1)/etc/init.d
endef
define Package/luci-app-splash
$(call Package/luci/template)
DEPENDS:=luci +luci-mod-freifunk +luci-sgi-haserl +iptables-mod-nat +iptables-mod-ipopt
TITLE:=Freifunk DHCP-Splash application
endef
define Package/luci-app-splash/conffiles
/etc/config/luci_splash
endef
define Package/luci-app-splash/install
$(call Package/luci/install/template,$(1),applications/luci-splash)
$(INSTALL_BIN) $(PKG_BUILD_DIR)/applications/luci-splash/dist/usr/sbin/luci-splash $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/applications/luci-splash/dist/etc/init.d/luci_splash $(1)/etc/init.d
$(INSTALL_BIN) $(PKG_BUILD_DIR)/applications/luci-splash/dist/etc/cron.minutely/luci_splash $(1)/etc/cron.minutely
$(INSTALL_BIN) $(PKG_BUILD_DIR)/applications/luci-splash/dist/usr/lib/luci-splash/htdocs/cgi-bin/index.cgi $(1)/usr/lib/luci-splash/htdocs/cgi-bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/applications/luci-splash/dist/www/cgi-bin/luci-splash $(1)/www/cgi-bin/luci-splash
endef
### Server Gateway Interfaces ###
define Package/luci-sgi-haserl
$(call Package/luci/template)
DEPENDS:=luci +haserl-lua
TITLE:=SGI for Haserl
endef
define Package/luci-sgi-haserl/install
$(call Package/luci/install/template,$(1),applications/sgi-haserl)
$(CP) -a ./ipkg/luci-sgi-haserl.postinst $(1)/CONTROL/postinst
endef
define Package/luci-sgi-webuci
$(call Package/luci/template)
DEPENDS:=luci
TITLE:=SGI for Webuci
endef
define Package/luci-sgi-webuci/install
$(call Package/luci/install/template,$(1),applications/sgi-webuci)
endef
$(eval $(call BuildPackage,luci))
$(eval $(call BuildPackage,luci-ff-halle))
$(eval $(call BuildPackage,luci-ff-leipzig))
$(eval $(call BuildPackage,luci-ff-hannover))
$(eval $(call BuildPackage,luci-mod-admin-core))
$(eval $(call BuildPackage,luci-mod-freifunk))
$(eval $(call BuildPackage,luci-app-ffwizard-leipzig))
$(eval $(call BuildPackage,luci-app-firewall))
$(eval $(call BuildPackage,luci-app-splash))
$(eval $(call BuildPackage,luci-sgi-haserl))
$(eval $(call BuildPackage,luci-sgi-webuci))

View File

@ -0,0 +1,4 @@
#!/bin/sh
[ -n "${IPKG_INSTROOT}" ] || {
( . /etc/uci-defaults/luci-community-hannover ) && rm -f /etc/uci-defaults/luci-community-hannover
}

View File

@ -0,0 +1,4 @@
#!/bin/sh
[ -n "${IPKG_INSTROOT}" ] || {
( . /etc/uci-defaults/luci-community-leipzig ) && rm -f /etc/uci-defaults/luci-community-leipzig
}

View File

@ -1,5 +1,5 @@
#!/bin/sh #!/bin/sh
PATTERNS='/cgi-bin/ffluci/admin:root:$p$root /cgi-bin/ffluci-upload:root:$p$root' PATTERNS='/cgi-bin/luci/admin:root:$p$root /cgi-bin/luci-upload:root:$p$root'
for i in $PATTERNS for i in $PATTERNS
do do

View File

@ -1,7 +1,7 @@
config core main config core main
option lang de option lang de
option mediaurlbase /ffluci/media option mediaurlbase /luci/media
option resourcebase /ffluci/images option resourcebase /luci/images
option title "Freifunk Kamikaze" option title "Freifunk Kamikaze"
option subtitle Fledermausedition option subtitle Fledermausedition
@ -32,4 +32,4 @@ config internal languages
option en "English" option en "English"
config internal themes config internal themes
option Fledermaus "/ffluci/media" option Fledermaus "/luci/media"

View File

@ -50,7 +50,7 @@
--]] --]]
module("ffluci.bits", package.seeall); module("luci.bits", package.seeall);
local hex2bin = { local hex2bin = {
["0"] = "0000", ["0"] = "0000",

View File

@ -1,5 +1,5 @@
--[[ --[[
FFLuCI - Configuration Bind Interface LuCI - Configuration Bind Interface
Description: Description:
Offers an interface for binding confiugration values to certain Offers an interface for binding confiugration values to certain
@ -24,35 +24,35 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
]]-- ]]--
module("ffluci.cbi", package.seeall) module("luci.cbi", package.seeall)
require("ffluci.template") require("luci.template")
require("ffluci.util") require("luci.util")
require("ffluci.http") require("luci.http")
require("ffluci.model.uci") require("luci.model.uci")
local class = ffluci.util.class local class = luci.util.class
local instanceof = ffluci.util.instanceof local instanceof = luci.util.instanceof
-- Loads a CBI map from given file, creating an environment and returns it -- Loads a CBI map from given file, creating an environment and returns it
function load(cbimap) function load(cbimap)
require("ffluci.fs") require("luci.fs")
require("ffluci.i18n") require("luci.i18n")
require("ffluci.config") require("luci.config")
require("ffluci.sys") require("luci.sys")
local cbidir = ffluci.sys.libpath() .. "/model/cbi/" local cbidir = luci.sys.libpath() .. "/model/cbi/"
local func, err = loadfile(cbidir..cbimap..".lua") local func, err = loadfile(cbidir..cbimap..".lua")
if not func then if not func then
return nil return nil
end end
ffluci.i18n.loadc("cbi") luci.i18n.loadc("cbi")
ffluci.util.resfenv(func) luci.util.resfenv(func)
ffluci.util.updfenv(func, ffluci.cbi) luci.util.updfenv(func, luci.cbi)
ffluci.util.extfenv(func, "translate", ffluci.i18n.translate) luci.util.extfenv(func, "translate", luci.i18n.translate)
local map = func() local map = func()
@ -91,7 +91,7 @@ function Node.render(self, scope)
scope = scope or {} scope = scope or {}
scope.self = self scope.self = self
ffluci.template.render(self.template, scope) luci.template.render(self.template, scope)
end end
-- Render the children -- Render the children
@ -122,7 +122,7 @@ function Map.__init__(self, config, ...)
Node.__init__(self, ...) Node.__init__(self, ...)
self.config = config self.config = config
self.template = "cbi/map" self.template = "cbi/map"
self.uci = ffluci.model.uci.Session() self.uci = luci.model.uci.Session()
self.ucidata, self.uciorder = self.uci:sections(self.config) self.ucidata, self.uciorder = self.uci:sections(self.config)
if not self.ucidata or not self.uciorder then if not self.ucidata or not self.uciorder then
error("Unable to read UCI data: " .. self.config) error("Unable to read UCI data: " .. self.config)
@ -242,7 +242,7 @@ function AbstractSection.parse_optionals(self, section)
self.optionals[section] = {} self.optionals[section] = {}
local field = ffluci.http.formvalue("cbi.opt."..self.config.."."..section) local field = luci.http.formvalue("cbi.opt."..self.config.."."..section)
for k,v in ipairs(self.children) do for k,v in ipairs(self.children) do
if v.optional and not v:cfgvalue(section) then if v.optional and not v:cfgvalue(section) then
if field == v.option then if field == v.option then
@ -270,8 +270,8 @@ function AbstractSection.parse_dynamic(self, section)
return return
end end
local arr = ffluci.util.clone(self:cfgvalue(section)) local arr = luci.util.clone(self:cfgvalue(section))
local form = ffluci.http.formvaluetable("cbid."..self.config.."."..section) local form = luci.http.formvaluetable("cbid."..self.config.."."..section)
for k, v in pairs(form) do for k, v in pairs(form) do
arr[k] = v arr[k] = v
end end
@ -329,11 +329,11 @@ function NamedSection.parse(self)
if self.addremove then if self.addremove then
local path = self.config.."."..s local path = self.config.."."..s
if active then -- Remove the section if active then -- Remove the section
if ffluci.http.formvalue("cbi.rns."..path) and self:remove(s) then if luci.http.formvalue("cbi.rns."..path) and self:remove(s) then
return return
end end
else -- Create and apply default values else -- Create and apply default values
if ffluci.http.formvalue("cbi.cns."..path) and self:create(s) then if luci.http.formvalue("cbi.cns."..path) and self:create(s) then
for k,v in pairs(self.children) do for k,v in pairs(self.children) do
v:write(s, v.default) v:write(s, v.default)
end end
@ -343,7 +343,7 @@ function NamedSection.parse(self)
if active then if active then
AbstractSection.parse_dynamic(self, s) AbstractSection.parse_dynamic(self, s)
if ffluci.http.formvalue("cbi.submit") then if luci.http.formvalue("cbi.submit") then
Node.parse(self, s) Node.parse(self, s)
end end
AbstractSection.parse_optionals(self, s) AbstractSection.parse_optionals(self, s)
@ -413,7 +413,7 @@ function TypedSection.parse(self)
if self.addremove then if self.addremove then
-- Create -- Create
local crval = "cbi.cts." .. self.config .. "." .. self.sectiontype local crval = "cbi.cts." .. self.config .. "." .. self.sectiontype
local name = ffluci.http.formvalue(crval) local name = luci.http.formvalue(crval)
if self.anonymous then if self.anonymous then
if name then if name then
self:create() self:create()
@ -439,7 +439,7 @@ function TypedSection.parse(self)
-- Remove -- Remove
crval = "cbi.rts." .. self.config crval = "cbi.rts." .. self.config
name = ffluci.http.formvaluetable(crval) name = luci.http.formvaluetable(crval)
for k,v in pairs(name) do for k,v in pairs(name) do
if self:cfgvalue(k) and self:checkscope(k) then if self:cfgvalue(k) and self:checkscope(k) then
self:remove(k) self:remove(k)
@ -449,7 +449,7 @@ function TypedSection.parse(self)
for i, k in ipairs(self:cfgsections()) do for i, k in ipairs(self:cfgsections()) do
AbstractSection.parse_dynamic(self, k) AbstractSection.parse_dynamic(self, k)
if ffluci.http.formvalue("cbi.submit") then if luci.http.formvalue("cbi.submit") then
Node.parse(self, k) Node.parse(self, k)
end end
AbstractSection.parse_optionals(self, k) AbstractSection.parse_optionals(self, k)
@ -522,13 +522,13 @@ end
-- Return whether this object should be created -- Return whether this object should be created
function AbstractValue.formcreated(self, section) function AbstractValue.formcreated(self, section)
local key = "cbi.opt."..self.config.."."..section local key = "cbi.opt."..self.config.."."..section
return (ffluci.http.formvalue(key) == self.option) return (luci.http.formvalue(key) == self.option)
end end
-- Returns the formvalue for this object -- Returns the formvalue for this object
function AbstractValue.formvalue(self, section) function AbstractValue.formvalue(self, section)
local key = "cbid."..self.map.config.."."..section.."."..self.option local key = "cbid."..self.map.config.."."..section.."."..self.option
return ffluci.http.formvalue(key) return luci.http.formvalue(key)
end end
function AbstractValue.parse(self, section) function AbstractValue.parse(self, section)
@ -605,7 +605,7 @@ function Value.validate(self, val)
val = nil val = nil
end end
return ffluci.util.validate(val, self.isnumber, self.isinteger) return luci.util.validate(val, self.isnumber, self.isinteger)
end end
@ -623,7 +623,7 @@ function DummyValue.parse(self)
end end
function DummyValue.render(self, s) function DummyValue.render(self, s)
ffluci.template.render(self.template, {self=self, section=s}) luci.template.render(self.template, {self=self, section=s})
end end
@ -684,7 +684,7 @@ function ListValue.value(self, key, val)
end end
function ListValue.validate(self, val) function ListValue.validate(self, val)
if ffluci.util.contains(self.keylist, val) then if luci.util.contains(self.keylist, val) then
return val return val
else else
return nil return nil
@ -723,7 +723,7 @@ function MultiValue.valuelist(self, section)
return {} return {}
end end
return ffluci.util.split(val, self.delimiter) return luci.util.split(val, self.delimiter)
end end
function MultiValue.validate(self, val) function MultiValue.validate(self, val)
@ -734,7 +734,7 @@ function MultiValue.validate(self, val)
local result = "" local result = ""
for value in val:gmatch("[^\n]+") do for value in val:gmatch("[^\n]+") do
if ffluci.util.contains(self.keylist, value) then if luci.util.contains(self.keylist, value) then
result = result .. self.delimiter .. value result = result .. self.delimiter .. value
end end
end end

View File

@ -1,8 +1,8 @@
--[[ --[[
FFLuCI - Configuration LuCI - Configuration
Description: Description:
Some FFLuCI configuration values read from uci file "luci" Some LuCI configuration values read from uci file "luci"
FileId: FileId:
@ -25,16 +25,16 @@ limitations under the License.
]]-- ]]--
module("ffluci.config", package.seeall) module("luci.config", package.seeall)
require("ffluci.model.uci") require("luci.model.uci")
require("ffluci.util") require("luci.util")
require("ffluci.sys") require("luci.sys")
-- Warning! This is only for fallback and compatibility purporses! -- -- Warning! This is only for fallback and compatibility purporses! --
main = {} main = {}
-- This is where stylesheets and images go -- This is where stylesheets and images go
main.mediaurlbase = "/ffluci/media" main.mediaurlbase = "/luci/media"
-- Does anybody think about browser autodetect here? -- Does anybody think about browser autodetect here?
-- Too bad busybox doesn't populate HTTP_ACCEPT_LANGUAGE -- Too bad busybox doesn't populate HTTP_ACCEPT_LANGUAGE
@ -42,7 +42,7 @@ main.lang = "de"
-- Now overwrite with UCI values -- Now overwrite with UCI values
local ucidata = ffluci.model.uci.sections("luci") local ucidata = luci.model.uci.sections("luci")
if ucidata then if ucidata then
ffluci.util.update(ffluci.config, ucidata) luci.util.update(luci.config, ucidata)
end end

View File

@ -1,2 +1,2 @@
module("ffluci.debug", package.seeall) module("luci.debug", package.seeall)
__file__ = debug.getinfo(1, 'S').source:sub(2) __file__ = debug.getinfo(1, 'S').source:sub(2)

View File

@ -1,5 +1,5 @@
--[[ --[[
FFLuCI - Dispatcher LuCI - Dispatcher
Description: Description:
The request dispatcher and module dispatcher generators The request dispatcher and module dispatcher generators
@ -23,10 +23,10 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
]]-- ]]--
module("ffluci.dispatcher", package.seeall) module("luci.dispatcher", package.seeall)
require("ffluci.http") require("luci.http")
require("ffluci.sys") require("luci.sys")
require("ffluci.fs") require("luci.fs")
-- Local dispatch database -- Local dispatch database
local tree = {nodes={}} local tree = {nodes={}}
@ -40,17 +40,17 @@ dispatched = nil
-- Builds a URL -- Builds a URL
function build_url(...) function build_url(...)
return ffluci.http.dispatcher() .. "/" .. table.concat(arg, "/") return luci.http.dispatcher() .. "/" .. table.concat(arg, "/")
end end
-- Sends a 404 error code and renders the "error404" template if available -- Sends a 404 error code and renders the "error404" template if available
function error404(message) function error404(message)
ffluci.http.status(404, "Not Found") luci.http.status(404, "Not Found")
message = message or "Not Found" message = message or "Not Found"
require("ffluci.template") require("luci.template")
if not pcall(ffluci.template.render, "error404") then if not pcall(luci.template.render, "error404") then
ffluci.http.prepare_content("text/plain") luci.http.prepare_content("text/plain")
print(message) print(message)
end end
return false return false
@ -58,11 +58,11 @@ end
-- Sends a 500 error code and renders the "error500" template if available -- Sends a 500 error code and renders the "error500" template if available
function error500(message) function error500(message)
ffluci.http.status(500, "Internal Server Error") luci.http.status(500, "Internal Server Error")
require("ffluci.template") require("luci.template")
if not pcall(ffluci.template.render, "error500", {message=message}) then if not pcall(luci.template.render, "error500", {message=message}) then
ffluci.http.prepare_content("text/plain") luci.http.prepare_content("text/plain")
print(message) print(message)
end end
return false return false
@ -70,7 +70,7 @@ end
-- Dispatches a request depending on the PATH_INFO variable -- Dispatches a request depending on the PATH_INFO variable
function httpdispatch() function httpdispatch()
local pathinfo = ffluci.http.env.PATH_INFO or "" local pathinfo = luci.http.env.PATH_INFO or ""
local c = tree local c = tree
for s in pathinfo:gmatch("/([%w-]+)") do for s in pathinfo:gmatch("/([%w-]+)") do
@ -97,15 +97,15 @@ function dispatch()
if track.i18n then if track.i18n then
require("ffluci.i18n").loadc(track.i18n) require("luci.i18n").loadc(track.i18n)
end end
if track.setgroup then if track.setgroup then
ffluci.sys.process.setgroup(track.setgroup) luci.sys.process.setgroup(track.setgroup)
end end
if track.setuser then if track.setuser then
ffluci.sys.process.setuser(track.setuser) luci.sys.process.setuser(track.setuser)
end end
@ -124,20 +124,20 @@ end
-- Calls the index function of all available controllers -- Calls the index function of all available controllers
function createindex() function createindex()
local root = ffluci.sys.libpath() .. "/controller/" local root = luci.sys.libpath() .. "/controller/"
local suff = ".lua" local suff = ".lua"
local controllers = ffluci.util.combine( local controllers = luci.util.combine(
ffluci.fs.glob(root .. "*" .. suff), luci.fs.glob(root .. "*" .. suff),
ffluci.fs.glob(root .. "*/*" .. suff) luci.fs.glob(root .. "*/*" .. suff)
) )
for i,c in ipairs(controllers) do for i,c in ipairs(controllers) do
c = "ffluci.controller." .. c:sub(#root+1, #c-#suff):gsub("/", ".") c = "luci.controller." .. c:sub(#root+1, #c-#suff):gsub("/", ".")
stat, mod = pcall(require, c) stat, mod = pcall(require, c)
if stat and mod and type(mod.index) == "function" then if stat and mod and type(mod.index) == "function" then
ffluci.util.updfenv(mod.index, ffluci.dispatcher) luci.util.updfenv(mod.index, luci.dispatcher)
pcall(mod.index) pcall(mod.index)
end end
end end
@ -188,16 +188,16 @@ function alias(...)
end end
function template(name) function template(name)
require("ffluci.template") require("luci.template")
return function() ffluci.template.render(name) end return function() luci.template.render(name) end
end end
function cbi(model) function cbi(model)
require("ffluci.cbi") require("luci.cbi")
require("ffluci.template") require("luci.template")
return function() return function()
local stat, res = pcall(ffluci.cbi.load, model) local stat, res = pcall(luci.cbi.load, model)
if not stat then if not stat then
error500(res) error500(res)
return true return true
@ -209,8 +209,8 @@ function cbi(model)
return true return true
end end
ffluci.template.render("cbi/header") luci.template.render("cbi/header")
res:render() res:render()
ffluci.template.render("cbi/footer") luci.template.render("cbi/footer")
end end
end end

View File

@ -1,5 +1,5 @@
--[[ --[[
FFLuCI - Filesystem tools LuCI - Filesystem tools
Description: Description:
A module offering often needed filesystem manipulation functions A module offering often needed filesystem manipulation functions
@ -24,7 +24,7 @@ limitations under the License.
]]-- ]]--
module("ffluci.fs", package.seeall) module("luci.fs", package.seeall)
require("posix") require("posix")

View File

@ -1,5 +1,5 @@
--[[ --[[
FFLuCI - HTTP-Interaction LuCI - HTTP-Interaction
Description: Description:
HTTP-Header manipulator and form variable preprocessor HTTP-Header manipulator and form variable preprocessor
@ -27,10 +27,10 @@ limitations under the License.
]]-- ]]--
module("ffluci.http", package.seeall) module("luci.http", package.seeall)
if ENV and ENV.HASERLVER then if ENV and ENV.HASERLVER then
require("ffluci.sgi.haserl") require("luci.sgi.haserl")
elseif webuci then elseif webuci then
require("ffluci.sgi.webuci") require("luci.sgi.webuci")
end end

View File

@ -1,5 +1,5 @@
--[[ --[[
FFLuCI - Internationalisation LuCI - Internationalisation
Description: Description:
A very minimalistic but yet effective internationalisation module A very minimalistic but yet effective internationalisation module
@ -24,11 +24,11 @@ limitations under the License.
]]-- ]]--
module("ffluci.i18n", package.seeall) module("luci.i18n", package.seeall)
require("ffluci.sys") require("luci.sys")
table = {} table = {}
i18ndir = ffluci.sys.libpath() .. "/i18n/" i18ndir = luci.sys.libpath() .. "/i18n/"
-- Clears the translation table -- Clears the translation table
function clear() function clear()
@ -49,7 +49,7 @@ end
-- Same as load but autocompletes the filename with .LANG from config.lang -- Same as load but autocompletes the filename with .LANG from config.lang
function loadc(file) function loadc(file)
return load(file .. "." .. require("ffluci.config").main.lang) return load(file .. "." .. require("luci.config").main.lang)
end end
-- Returns the i18n-value defined by "key" or if there is no such: "default" -- Returns the i18n-value defined by "key" or if there is no such: "default"

View File

@ -1,5 +1,5 @@
--[[ --[[
FFLuCI - Freifunk Lua Configuration Interface LuCI - Lua Configuration Interface
Description: Description:
Main class Main class
@ -23,7 +23,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
]]-- ]]--
module("ffluci", package.seeall) module("luci", package.seeall)
__version__ = "0.5" __version__ = "0.5"
__appname__ = "FFLuCI" __appname__ = "LuCI"

View File

@ -1,5 +1,5 @@
--[[ --[[
FFLuCI - Menu Builder LuCI - Menu Builder
Description: Description:
Collects menu building information from controllers Collects menu building information from controllers
@ -23,21 +23,21 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
]]-- ]]--
module("ffluci.menu", package.seeall) module("luci.menu", package.seeall)
require("ffluci.fs") require("luci.fs")
require("ffluci.util") require("luci.util")
require("ffluci.sys") require("luci.sys")
require("ffluci.dispatcher") require("luci.dispatcher")
-- Default modelpath -- Default modelpath
modelpattern = ffluci.sys.libpath() .. "/model/menu/*.lua" modelpattern = luci.sys.libpath() .. "/model/menu/*.lua"
-- Menu definition extra scope -- Menu definition extra scope
scope = { scope = {
translate = function(...) return require("ffluci.i18n").translate(...) end, translate = function(...) return require("luci.i18n").translate(...) end,
loadtrans = function(...) return require("ffluci.i18n").loadc(...) end, loadtrans = function(...) return require("luci.i18n").loadc(...) end,
isfile = ffluci.fs.isfile isfile = luci.fs.isfile
} }
-- Returns the menu information -- Returns the menu information

View File

@ -1,5 +1,5 @@
--[[ --[[
FFLuCI - IPKG wrapper library LuCI - IPKG wrapper library
Description: Description:
Wrapper for the ipkg Package manager Wrapper for the ipkg Package manager
@ -25,9 +25,9 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
]]-- ]]--
module("ffluci.model.ipkg", package.seeall) module("luci.model.ipkg", package.seeall)
require("ffluci.sys") require("luci.sys")
require("ffluci.util") require("luci.util")
ipkg = "ipkg" ipkg = "ipkg"
@ -88,7 +88,7 @@ function _lookup(act, pkg)
cmd = cmd .. " '" .. pkg:gsub("'", "") .. "'" cmd = cmd .. " '" .. pkg:gsub("'", "") .. "'"
end end
return _parselist(ffluci.sys.exec(cmd .. " 2>/dev/null")) return _parselist(luci.sys.exec(cmd .. " 2>/dev/null"))
end end
-- Internal parser function -- Internal parser function
@ -97,23 +97,23 @@ function _parselist(rawdata)
error("IPKG: Invalid rawdata given") error("IPKG: Invalid rawdata given")
end end
rawdata = ffluci.util.split(rawdata) rawdata = luci.util.split(rawdata)
local data = {} local data = {}
local c = {} local c = {}
local l = nil local l = nil
for k, line in pairs(rawdata) do for k, line in pairs(rawdata) do
if line:sub(1, 1) ~= " " then if line:sub(1, 1) ~= " " then
local split = ffluci.util.split(line, ":", 1) local split = luci.util.split(line, ":", 1)
local key = nil local key = nil
local val = nil local val = nil
if split[1] then if split[1] then
key = ffluci.util.trim(split[1]) key = luci.util.trim(split[1])
end end
if split[2] then if split[2] then
val = ffluci.util.trim(split[2]) val = luci.util.trim(split[2])
end end
if key and val then if key and val then
@ -122,7 +122,7 @@ function _parselist(rawdata)
data[val] = c data[val] = c
elseif key == "Status" then elseif key == "Status" then
c.Status = {} c.Status = {}
for i, j in pairs(ffluci.util.split(val, " ")) do for i, j in pairs(luci.util.split(val, " ")) do
c.Status[j] = true c.Status[j] = true
end end
else else

View File

@ -1,5 +1,5 @@
--[[ --[[
FFLuCI - UCI mpdel LuCI - UCI mpdel
Description: Description:
Generalized UCI model Generalized UCI model
@ -23,16 +23,16 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
]]-- ]]--
module("ffluci.model.uci", package.seeall) module("luci.model.uci", package.seeall)
-- Default savedir -- Default savedir
savedir = "/tmp/.uci" savedir = "/tmp/.uci"
-- Test whether to load libuci-Wrapper or /sbin/uci-Wrapper -- Test whether to load libuci-Wrapper or /sbin/uci-Wrapper
if pcall(require, "uci") then if pcall(require, "uci") then
Session = require("ffluci.model.uci.libuci").Session Session = require("luci.model.uci.libuci").Session
else else
Session = require("ffluci.model.uci.wrapper").Session Session = require("luci.model.uci.wrapper").Session
end end
-- The default Session -- The default Session

View File

@ -1,5 +1,5 @@
--[[ --[[
FFLuCI - UCI libuci wrapper LuCI - UCI libuci wrapper
Description: Description:
Wrapper for the libuci Lua bindings Wrapper for the libuci Lua bindings
@ -24,19 +24,19 @@ limitations under the License.
]]-- ]]--
module("ffluci.model.uci.libuci", package.seeall) module("luci.model.uci.libuci", package.seeall)
require("uci") require("uci")
require("ffluci.util") require("luci.util")
require("ffluci.sys") require("luci.sys")
-- Session class -- Session class
Session = ffluci.util.class() Session = luci.util.class()
-- Session constructor -- Session constructor
function Session.__init__(self, savedir) function Session.__init__(self, savedir)
self.ucicmd = savedir and "uci -P " .. savedir or "uci" self.ucicmd = savedir and "uci -P " .. savedir or "uci"
self.savedir = savedir or ffluci.model.uci.savedir self.savedir = savedir or luci.model.uci.savedir
end end
function Session.add(self, config, section_type) function Session.add(self, config, section_type)
@ -152,7 +152,7 @@ end
function Session._uci(self, cmd) function Session._uci(self, cmd)
local res = ffluci.sys.exec(self.ucicmd .. " 2>/dev/null " .. cmd) local res = luci.sys.exec(self.ucicmd .. " 2>/dev/null " .. cmd)
if res:len() == 0 then if res:len() == 0 then
return nil return nil
@ -162,7 +162,7 @@ function Session._uci(self, cmd)
end end
function Session._uci2(self, cmd) function Session._uci2(self, cmd)
local res = ffluci.sys.exec(self.ucicmd .. " 2>&1 " .. cmd) local res = luci.sys.exec(self.ucicmd .. " 2>&1 " .. cmd)
if res:len() > 0 then if res:len() > 0 then
return false, res return false, res

View File

@ -1,5 +1,5 @@
--[[ --[[
FFLuCI - UCI wrapper library LuCI - UCI wrapper library
Description: Description:
Wrapper for the /sbin/uci application, syntax of implemented functions Wrapper for the /sbin/uci application, syntax of implemented functions
@ -27,13 +27,13 @@ limitations under the License.
]]-- ]]--
module("ffluci.model.uci.wrapper", package.seeall) module("luci.model.uci.wrapper", package.seeall)
require("ffluci.util") require("luci.util")
require("ffluci.sys") require("luci.sys")
-- Session class -- Session class
Session = ffluci.util.class() Session = luci.util.class()
-- Session constructor -- Session constructor
function Session.__init__(self, savedir) function Session.__init__(self, savedir)
@ -104,7 +104,7 @@ Session.t_set = Session.set
function Session._uci(self, cmd) function Session._uci(self, cmd)
local res = ffluci.sys.exec(self.ucicmd .. " 2>/dev/null " .. cmd) local res = luci.sys.exec(self.ucicmd .. " 2>/dev/null " .. cmd)
if res:len() == 0 then if res:len() == 0 then
return nil return nil
@ -114,7 +114,7 @@ function Session._uci(self, cmd)
end end
function Session._uci2(self, cmd) function Session._uci2(self, cmd)
local res = ffluci.sys.exec(self.ucicmd .. " 2>&1 " .. cmd) local res = luci.sys.exec(self.ucicmd .. " 2>&1 " .. cmd)
if res:len() > 0 then if res:len() > 0 then
return false, res return false, res
@ -124,7 +124,7 @@ function Session._uci2(self, cmd)
end end
function Session._uci3(self, cmd) function Session._uci3(self, cmd)
local res = ffluci.sys.execl(self.ucicmd .. " 2>&1 " .. cmd) local res = luci.sys.execl(self.ucicmd .. " 2>&1 " .. cmd)
if res[1] and res[1]:sub(1, self.ucicmd:len()+1) == self.ucicmd..":" then if res[1] and res[1]:sub(1, self.ucicmd:len()+1) == self.ucicmd..":" then
return nil, res[1] return nil, res[1]
end end

View File

@ -1,5 +1,5 @@
--[[ --[[
FFLuCI - System library LuCI - System library
Description: Description:
Utilities for interaction with the Linux system Utilities for interaction with the Linux system
@ -24,10 +24,10 @@ limitations under the License.
]]-- ]]--
module("ffluci.sys", package.seeall) module("luci.sys", package.seeall)
require("posix") require("posix")
require("ffluci.bits") require("luci.bits")
require("ffluci.util") require("luci.util")
-- Returns whether a system is bigendian -- Returns whether a system is bigendian
function bigendian() function bigendian()
@ -61,9 +61,9 @@ function execl(command)
return data return data
end end
-- Uses "ffluci-flash" to flash a new image file to the system -- Uses "luci-flash" to flash a new image file to the system
function flash(image, kpattern) function flash(image, kpattern)
local cmd = "ffluci-flash " local cmd = "luci-flash "
if kpattern then if kpattern then
cmd = cmd .. "-k '" .. kpattern:gsub("'", "") .. "' " cmd = cmd .. "-k '" .. kpattern:gsub("'", "") .. "' "
end end
@ -84,7 +84,7 @@ end
-- Returns the FFLuci-Basedir -- Returns the FFLuci-Basedir
function libpath() function libpath()
return ffluci.fs.dirname(require("ffluci.debug").__file__) return luci.fs.dirname(require("luci.debug").__file__)
end end
-- Returns the load average -- Returns the load average
@ -106,18 +106,18 @@ function sysinfo()
local c4 = "cat /proc/cpuinfo|grep cpu\\ model|cut -d: -f2 2>/dev/null" local c4 = "cat /proc/cpuinfo|grep cpu\\ model|cut -d: -f2 2>/dev/null"
local c5 = "cat /proc/meminfo|grep MemTotal|cut -d: -f2 2>/dev/null" local c5 = "cat /proc/meminfo|grep MemTotal|cut -d: -f2 2>/dev/null"
local s = ffluci.util.trim(exec(c1)) local s = luci.util.trim(exec(c1))
local m = "" local m = ""
local r = "" local r = ""
if s == "" then if s == "" then
s = ffluci.util.trim(exec(c2)) s = luci.util.trim(exec(c2))
m = ffluci.util.trim(exec(c3)) m = luci.util.trim(exec(c3))
else else
m = ffluci.util.trim(exec(c4)) m = luci.util.trim(exec(c4))
end end
r = ffluci.util.trim(exec(c5)) r = luci.util.trim(exec(c5))
return s, m, r return s, m, r
end end
@ -147,7 +147,7 @@ function net.defaultroute()
local routes = net.routes() local routes = net.routes()
local route = nil local route = nil
for i, r in pairs(ffluci.sys.net.routes()) do for i, r in pairs(luci.sys.net.routes()) do
if r.Destination == "00000000" and (not route or route.Metric > r.Metric) then if r.Destination == "00000000" and (not route or route.Metric > r.Metric) then
route = r route = r
end end
@ -186,7 +186,7 @@ function net.mask4prefix(mask)
return nil return nil
end end
return #ffluci.util.split(bin, "1")-1 return #luci.util.split(bin, "1")-1
end end
-- Returns the kernel routing table -- Returns the kernel routing table
@ -202,7 +202,7 @@ function net.hexip4(hex, be)
be = be or bigendian() be = be or bigendian()
local hexdec = ffluci.bits.Hex2Dec local hexdec = luci.bits.Hex2Dec
local ip = "" local ip = ""
if be then if be then
@ -222,12 +222,12 @@ end
-- Returns the binary IP to a given IP -- Returns the binary IP to a given IP
function net.ip4bin(ip) function net.ip4bin(ip)
local parts = ffluci.util.split(ip, '.') local parts = luci.util.split(ip, '.')
if #parts ~= 4 then if #parts ~= 4 then
return nil return nil
end end
local decbin = ffluci.bits.Dec2Bin local decbin = luci.bits.Dec2Bin
local bin = "" local bin = ""
bin = bin .. decbin(parts[1], 8) bin = bin .. decbin(parts[1], 8)
@ -283,7 +283,7 @@ function wifi.getiwconfig()
local cnt = exec("/usr/sbin/iwconfig 2>/dev/null") local cnt = exec("/usr/sbin/iwconfig 2>/dev/null")
local iwc = {} local iwc = {}
for i, l in pairs(ffluci.util.split(ffluci.util.trim(cnt), "\n\n")) do for i, l in pairs(luci.util.split(luci.util.trim(cnt), "\n\n")) do
local k = l:match("^(.-) ") local k = l:match("^(.-) ")
l = l:gsub("^(.-) +", "", 1) l = l:gsub("^(.-) +", "", 1)
if k then if k then
@ -298,15 +298,15 @@ function wifi.iwscan()
local cnt = exec("iwlist scan 2>/dev/null") local cnt = exec("iwlist scan 2>/dev/null")
local iws = {} local iws = {}
for i, l in pairs(ffluci.util.split(ffluci.util.trim(cnt), "\n\n")) do for i, l in pairs(luci.util.split(luci.util.trim(cnt), "\n\n")) do
local k = l:match("^(.-) ") local k = l:match("^(.-) ")
l = l:gsub("^[^\n]+", "", 1) l = l:gsub("^[^\n]+", "", 1)
l = ffluci.util.trim(l) l = luci.util.trim(l)
if k then if k then
iws[k] = {} iws[k] = {}
for j, c in pairs(ffluci.util.split(l, "\n Cell")) do for j, c in pairs(luci.util.split(l, "\n Cell")) do
c = c:gsub("^(.-)- ", "", 1) c = c:gsub("^(.-)- ", "", 1)
c = ffluci.util.split(c, "\n", 7) c = luci.util.split(c, "\n", 7)
c = table.concat(c, "\n", 1) c = table.concat(c, "\n", 1)
table.insert(iws[k], _parse_mixed_record(c)) table.insert(iws[k], _parse_mixed_record(c))
end end
@ -323,8 +323,8 @@ function _parse_delimited_table(iter, delimiter)
delimiter = delimiter or "%s+" delimiter = delimiter or "%s+"
local data = {} local data = {}
local trim = ffluci.util.trim local trim = luci.util.trim
local split = ffluci.util.split local split = luci.util.split
local keys = split(trim(iter()), delimiter, nil, true) local keys = split(trim(iter()), delimiter, nil, true)
for i, j in pairs(keys) do for i, j in pairs(keys) do
@ -350,8 +350,8 @@ end
function _parse_mixed_record(cnt) function _parse_mixed_record(cnt)
local data = {} local data = {}
for i, l in pairs(ffluci.util.split(ffluci.util.trim(cnt), "\n")) do for i, l in pairs(luci.util.split(luci.util.trim(cnt), "\n")) do
for j, f in pairs(ffluci.util.split(ffluci.util.trim(l), " ")) do for j, f in pairs(luci.util.split(luci.util.trim(l), " ")) do
local k, x, v = f:match('([^%s][^:=]+) *([:=]*) *"*([^\n"]*)"*') local k, x, v = f:match('([^%s][^:=]+) *([:=]*) *"*([^\n"]*)"*')
if k then if k then

View File

@ -1,5 +1,5 @@
--[[ --[[
FFLuCI - Iptables parser and query library LuCI - Iptables parser and query library
Copyright 2008 Jo-Philipp Wich <freifunk@wwsnet.net> Copyright 2008 Jo-Philipp Wich <freifunk@wwsnet.net>
@ -19,12 +19,12 @@ $Id$
]]-- ]]--
module("ffluci.sys.iptparser", package.seeall) module("luci.sys.iptparser", package.seeall)
require("ffluci.sys") require("luci.sys")
require("ffluci.util") require("luci.util")
IptParser = ffluci.util.class() IptParser = luci.util.class()
--[[ --[[
IptParser.__init__( ... ) IptParser.__init__( ... )
@ -77,7 +77,7 @@ Each rule table contains the following fields:
Example: Example:
ip = ffluci.sys.iptparser.IptParser() ip = luci.sys.iptparser.IptParser()
result = ip.find( { result = ip.find( {
target="REJECT", target="REJECT",
protocol="tcp", protocol="tcp",
@ -180,7 +180,7 @@ function IptParser._parse_rules( self )
for i, tbl in ipairs({ "filter", "nat", "mangle" }) do for i, tbl in ipairs({ "filter", "nat", "mangle" }) do
for i, rule in ipairs(ffluci.sys.execl("iptables -t " .. tbl .. " --line-numbers -nxvL")) do for i, rule in ipairs(luci.sys.execl("iptables -t " .. tbl .. " --line-numbers -nxvL")) do
if rule:find( "Chain " ) == 1 then if rule:find( "Chain " ) == 1 then
@ -189,7 +189,7 @@ function IptParser._parse_rules( self )
else else
if rule:find("%d") == 1 then if rule:find("%d") == 1 then
local rule_parts = ffluci.util.split( rule, "%s+", nil, true ) local rule_parts = luci.util.split( rule, "%s+", nil, true )
local rule_details = { } local rule_details = { }
rule_details["table"] = tbl rule_details["table"] = tbl

View File

@ -1,5 +1,5 @@
--[[ --[[
FFLuCI - Template Parser LuCI - Template Parser
Description: Description:
A template parser supporting includes, translations, Lua code blocks A template parser supporting includes, translations, Lua code blocks
@ -23,14 +23,14 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
]]-- ]]--
module("ffluci.template", package.seeall) module("luci.template", package.seeall)
require("ffluci.config") require("luci.config")
require("ffluci.util") require("luci.util")
require("ffluci.fs") require("luci.fs")
require("ffluci.http") require("luci.http")
viewdir = ffluci.sys.libpath() .. "/view/" viewdir = luci.sys.libpath() .. "/view/"
-- Compile modes: -- Compile modes:
@ -50,12 +50,12 @@ compiler_enable_bytecode = false
-- Define the namespace for template modules -- Define the namespace for template modules
viewns = { viewns = {
translate = function(...) return require("ffluci.i18n").translate(...) end, translate = function(...) return require("luci.i18n").translate(...) end,
config = function(...) return require("ffluci.model.uci").get(...) or "" end, config = function(...) return require("luci.model.uci").get(...) or "" end,
controller = ffluci.http.dispatcher(), controller = luci.http.dispatcher(),
uploadctrl = ffluci.http.dispatcher_upload(), uploadctrl = luci.http.dispatcher_upload(),
media = ffluci.config.main.mediaurlbase, media = luci.config.main.mediaurlbase,
resource = ffluci.config.main.resourcebase, resource = luci.config.main.resourcebase,
write = io.write, write = io.write,
include = function(name) Template(name):render(getfenv(2)) end, include = function(name) Template(name):render(getfenv(2)) end,
} }
@ -70,15 +70,15 @@ function compile(template)
-- As "expr" should be local, we have to assign it to the "expr_add" scope -- As "expr" should be local, we have to assign it to the "expr_add" scope
local expr = {} local expr = {}
ffluci.util.extfenv(expr_add, "expr", expr) luci.util.extfenv(expr_add, "expr", expr)
-- Save all expressiosn to table "expr" -- Save all expressiosn to table "expr"
template = template:gsub("<%%(.-)%%>", expr_add) template = template:gsub("<%%(.-)%%>", expr_add)
local function sanitize(s) local function sanitize(s)
s = ffluci.util.escape(s) s = luci.util.escape(s)
s = ffluci.util.escape(s, "'") s = luci.util.escape(s, "'")
s = ffluci.util.escape(s, "\n") s = luci.util.escape(s, "\n")
return s return s
end end
@ -137,7 +137,7 @@ end
-- Template class -- Template class
Template = ffluci.util.class() Template = luci.util.class()
-- Shared template cache to store templates in to avoid unnecessary reloading -- Shared template cache to store templates in to avoid unnecessary reloading
Template.cache = {} Template.cache = {}
@ -170,18 +170,18 @@ function Template.__init__(self, name)
local err local err
if compiler_mode == "file" then if compiler_mode == "file" then
local tplmt = ffluci.fs.mtime(sourcefile) local tplmt = luci.fs.mtime(sourcefile)
local commt = ffluci.fs.mtime(compiledfile) local commt = luci.fs.mtime(compiledfile)
-- Build if there is no compiled file or if compiled file is outdated -- Build if there is no compiled file or if compiled file is outdated
if ((commt == nil) and not (tplmt == nil)) if ((commt == nil) and not (tplmt == nil))
or (not (commt == nil) and not (tplmt == nil) and commt < tplmt) then or (not (commt == nil) and not (tplmt == nil) and commt < tplmt) then
local source local source
source, err = ffluci.fs.readfile(sourcefile) source, err = luci.fs.readfile(sourcefile)
if source then if source then
local compiled = compile(source) local compiled = compile(source)
ffluci.fs.writefile(compiledfile, compiled) luci.fs.writefile(compiledfile, compiled)
self.template, err = loadstring(compiled) self.template, err = loadstring(compiled)
end end
else else
@ -193,7 +193,7 @@ function Template.__init__(self, name)
elseif compiler_mode == "memory" then elseif compiler_mode == "memory" then
local source local source
source, err = ffluci.fs.readfile(sourcefile) source, err = luci.fs.readfile(sourcefile)
if source then if source then
self.template, err = loadstring(compile(source)) self.template, err = loadstring(compile(source))
end end
@ -217,9 +217,9 @@ function Template.render(self, scope)
local oldfenv = getfenv(self.template) local oldfenv = getfenv(self.template)
-- Put our predefined objects in the scope of the template -- Put our predefined objects in the scope of the template
ffluci.util.resfenv(self.template) luci.util.resfenv(self.template)
ffluci.util.updfenv(self.template, scope) luci.util.updfenv(self.template, scope)
ffluci.util.updfenv(self.template, self.viewns) luci.util.updfenv(self.template, self.viewns)
-- Now finally render the thing -- Now finally render the thing
self.template() self.template()

View File

@ -1,5 +1,5 @@
--[[ --[[
FFLuCI - Utility library LuCI - Utility library
Description: Description:
Several common useful Lua functions Several common useful Lua functions
@ -24,7 +24,7 @@ limitations under the License.
]]-- ]]--
module("ffluci.util", package.seeall) module("luci.util", package.seeall)
-- Lua simplified Python-style OO class support emulation -- Lua simplified Python-style OO class support emulation

View File

@ -1,5 +1,5 @@
<%+header%> <%+header%>
<form method="post" action="<%=ffluci.http.env.REQUEST_URI%>"> <form method="post" action="<%=luci.http.env.REQUEST_URI%>">
<div> <div>
<script type="text/javascript" src="<%=media%>/cbi.js"></script> <script type="text/javascript" src="<%=media%>/cbi.js"></script>
<input type="hidden" name="cbi.submit" value="1" /> <input type="hidden" name="cbi.submit" value="1" />

View File

@ -5,14 +5,14 @@ local v = self:valuelist(section)
<% if self.widget == "select" then %> <% if self.widget == "select" then %>
<select multiple="multiple" name="cbid.<%=self.config.."."..section.."."..self.option%>[]"<% if self.size then %> size="<%=self.size%>"<% end %>> <select multiple="multiple" name="cbid.<%=self.config.."."..section.."."..self.option%>[]"<% if self.size then %> size="<%=self.size%>"<% end %>>
<%for i, key in pairs(self.keylist) do %> <%for i, key in pairs(self.keylist) do %>
<option<% if ffluci.util.contains(v, key) then %> selected="selected"<% end %> value="<%=key%>"><%=self.vallist[i]%></option> <option<% if luci.util.contains(v, key) then %> selected="selected"<% end %> value="<%=key%>"><%=self.vallist[i]%></option>
<% end %> <% end %>
</select> </select>
<% elseif self.widget == "checkbox" then <% elseif self.widget == "checkbox" then
local c = 0; local c = 0;
for i, key in pairs(self.keylist) do for i, key in pairs(self.keylist) do
c = c + 1%> c = c + 1%>
<%=self.vallist[i]%><input type="checkbox" name="cbid.<%=self.config.."."..section.."."..self.option%>[]"<% if ffluci.util.contains(v, key) then %> checked="checked"<% end %> value="<%=key%>" /> <%=self.vallist[i]%><input type="checkbox" name="cbid.<%=self.config.."."..section.."."..self.option%>[]"<% if luci.util.contains(v, key) then %> checked="checked"<% end %> value="<%=key%>" />
<% if c == self.size then c = 0 %><br /> <% if c == self.size then c = 0 %><br />
<% end end %> <% end end %>
<% end %> <% end %>

View File

@ -1,5 +1,5 @@
<%+header%> <%+header%>
<h1>404 Not Found</h1> <h1>404 Not Found</h1>
<p>Sorry, the object you requested was not found.</p> <p>Sorry, the object you requested was not found.</p>
<tt>Unable to dispatch: <%=ffluci.http.env.PATH_INFO%></tt> <tt>Unable to dispatch: <%=luci.http.env.PATH_INFO%></tt>
<%+footer%> <%+footer%>

View File

@ -2,6 +2,6 @@
<div class="clear"></div> <div class="clear"></div>
</div></div> </div></div>
<div class="separator magenta bold"><a href="http://luci.freifunk-halle.net"><%=require("ffluci").__appname__ .. " " .. ffluci.__version__%> - Freifunk Lua Configuration Interface</a></div> <div class="separator magenta bold"><a href="http://luci.freifunk-halle.net"><%=require("luci").__appname__ .. " " .. luci.__version__%> - Lua Configuration Interface</a></div>
</body> </body>
</html> </html>

View File

@ -1,12 +1,12 @@
<% <%
require("ffluci.sys") require("luci.sys")
local load1, load5, load15 = ffluci.sys.loadavg() local load1, load5, load15 = luci.sys.loadavg()
local request = require("ffluci.dispatcher").request local request = require("luci.dispatcher").request
local category = request[1] local category = request[1]
local tree = ffluci.dispatcher.node() local tree = luci.dispatcher.node()
local cattree = category and ffluci.dispatcher.node(category) local cattree = category and luci.dispatcher.node(category)
local node = ffluci.dispatcher.dispatched local node = luci.dispatcher.dispatched
local c = tree local c = tree
for i,r in ipairs(request) do for i,r in ipairs(request) do
@ -16,9 +16,9 @@ for i,r in ipairs(request) do
end end
end end
require("ffluci.i18n").loadc("default") require("luci.i18n").loadc("default")
require("ffluci.http").prepare_content("text/html") require("luci.http").prepare_content("text/html")
%><?xml version="1.0" encoding="utf-8"?> %><?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"> <!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"> <html xmlns="http://www.w3.org/1999/xhtml">
@ -27,7 +27,7 @@ require("ffluci.http").prepare_content("text/html")
<% if node and node.css then %><link rel="stylesheet" type="text/css" href="<%=resource%>/<%=node.css%>" /><% end %> <% 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-type" content="text/xhtml+xml; charset=utf-8" />
<meta http-equiv="content-script-type" content="text/javascript" /> <meta http-equiv="content-script-type" content="text/javascript" />
<title>FFLuCI - Freifunk Lua Configuration Interface</title> <title>LuCI - Lua Configuration Interface</title>
</head> </head>
<body> <body>
<div id="header"> <div id="header">
@ -36,7 +36,7 @@ require("ffluci.http").prepare_content("text/html")
OpenWRT Kamikaze<br /> OpenWRT Kamikaze<br />
Freifunk Firmware 2.0-dev<br /> Freifunk Firmware 2.0-dev<br />
<%:load Last%>: <%=load1%> <%=load5%> <%=load15%><br /> <%:load Last%>: <%=load1%> <%=load5%> <%=load15%><br />
<%:hostname Hostname%>: <%=ffluci.sys.hostname()%> <%:hostname Hostname%>: <%=luci.sys.hostname()%>
</div> </div>
<div> <div>
<span class="headertitle"><%~luci.main.title%></span><br /> <span class="headertitle"><%~luci.main.title%></span><br />
@ -115,10 +115,10 @@ end
</div> </div>
<% <%
if "admin" == request[1] then if "admin" == request[1] then
require("ffluci.model.uci") require("luci.model.uci")
local ucic = ffluci.model.uci.changes() local ucic = luci.model.uci.changes()
if ucic then if ucic then
ucic = #ffluci.util.split(ucic) ucic = #luci.util.split(ucic)
end end
%> %>
<div><%:config Konfiguration%> <div><%:config Konfiguration%>

View File

@ -1,4 +1,4 @@
module("ffluci.controller.admin.index", package.seeall) module("luci.controller.admin.index", package.seeall)
function index() function index()
local root = node() local root = node()

View File

@ -1,4 +1,4 @@
module("ffluci.controller.admin.network", package.seeall) module("luci.controller.admin.network", package.seeall)
function index() function index()
local page = node("admin", "network") local page = node("admin", "network")
@ -31,7 +31,7 @@ function index()
page.title = "Statische Routen" page.title = "Statische Routen"
page.order = 50 page.order = 50
if ffluci.fs.isfile("/etc/config/qos") then if luci.fs.isfile("/etc/config/qos") then
local page = node("admin", "network", "qos") local page = node("admin", "network", "qos")
page.target = cbi("admin_network/qos") page.target = cbi("admin_network/qos")
page.title = "Quality of Service" page.title = "Quality of Service"

View File

@ -1,4 +1,4 @@
module("ffluci.controller.admin.services", package.seeall) module("luci.controller.admin.services", package.seeall)
function index() function index()
local page = node("admin", "services") local page = node("admin", "services")
@ -21,7 +21,7 @@ function index()
page.title = "Dnsmasq" page.title = "Dnsmasq"
page.order = 30 page.order = 30
if ffluci.fs.isfile("/etc/config/olsr") then if luci.fs.isfile("/etc/config/olsr") then
local page = node("admin", "services", "olsr") local page = node("admin", "services", "olsr")
page.target = cbi("admin_services/olsrd") page.target = cbi("admin_services/olsrd")
page.title = "OLSR" page.title = "OLSR"

View File

@ -1,4 +1,4 @@
module("ffluci.controller.admin.status", package.seeall) module("luci.controller.admin.status", package.seeall)
function index() function index()
local page = node("admin", "status") local page = node("admin", "status")
@ -12,6 +12,6 @@ function index()
end end
function action_syslog() function action_syslog()
local syslog = ffluci.sys.syslog() local syslog = luci.sys.syslog()
ffluci.template.render("admin_status/syslog", {syslog=syslog}) luci.template.render("admin_status/syslog", {syslog=syslog})
end end

View File

@ -1,11 +1,11 @@
module("ffluci.controller.admin.system", package.seeall) module("luci.controller.admin.system", package.seeall)
require("ffluci.sys") require("luci.sys")
require("ffluci.http") require("luci.http")
require("ffluci.util") require("luci.util")
require("ffluci.fs") require("luci.fs")
require("ffluci.model.ipkg") require("luci.model.ipkg")
require("ffluci.model.uci") require("luci.model.uci")
function index() function index()
local page = node("admin", "system") local page = node("admin", "system")
@ -54,63 +54,63 @@ function index()
end end
function action_editor() function action_editor()
local file = ffluci.http.formvalue("file", "") local file = luci.http.formvalue("file", "")
local data = ffluci.http.formvalue("data") local data = luci.http.formvalue("data")
local err = nil local err = nil
local msg = nil local msg = nil
local stat = true local stat = true
if file and data then if file and data then
stat, err = ffluci.fs.writefile(file, data) stat, err = luci.fs.writefile(file, data)
end end
if not stat then if not stat then
err = ffluci.util.split(err, " ") err = luci.util.split(err, " ")
table.remove(err, 1) table.remove(err, 1)
msg = table.concat(err, " ") msg = table.concat(err, " ")
end end
local cnt, err = ffluci.fs.readfile(file) local cnt, err = luci.fs.readfile(file)
if cnt then if cnt then
cnt = ffluci.util.pcdata(cnt) cnt = luci.util.pcdata(cnt)
end end
ffluci.template.render("admin_system/editor", {fn=file, cnt=cnt, msg=msg}) luci.template.render("admin_system/editor", {fn=file, cnt=cnt, msg=msg})
end end
function action_ipkg() function action_ipkg()
local file = "/etc/ipkg.conf" local file = "/etc/ipkg.conf"
local data = ffluci.http.formvalue("data") local data = luci.http.formvalue("data")
local stat = nil local stat = nil
local err = nil local err = nil
if data then if data then
stat, err = ffluci.fs.writefile(file, data) stat, err = luci.fs.writefile(file, data)
end end
local cnt = ffluci.fs.readfile(file) local cnt = luci.fs.readfile(file)
if cnt then if cnt then
cnt = ffluci.util.pcdata(cnt) cnt = luci.util.pcdata(cnt)
end end
ffluci.template.render("admin_system/ipkg", {cnt=cnt, msg=err}) luci.template.render("admin_system/ipkg", {cnt=cnt, msg=err})
end end
function action_packages() function action_packages()
local ipkg = ffluci.model.ipkg local ipkg = luci.model.ipkg
local void = nil local void = nil
local submit = ffluci.http.formvalue("submit") local submit = luci.http.formvalue("submit")
-- Search query -- Search query
local query = ffluci.http.formvalue("query") local query = luci.http.formvalue("query")
query = (query ~= '') and query or nil query = (query ~= '') and query or nil
-- Packets to be installed -- Packets to be installed
local install = submit and ffluci.http.formvaluetable("install") local install = submit and luci.http.formvaluetable("install")
-- Install from URL -- Install from URL
local url = ffluci.http.formvalue("url") local url = luci.http.formvalue("url")
if url and url ~= '' and submit then if url and url ~= '' and submit then
if not install then if not install then
install = {} install = {}
@ -127,7 +127,7 @@ function action_packages()
-- Remove packets -- Remove packets
local remove = submit and ffluci.http.formvaluetable("remove") local remove = submit and luci.http.formvaluetable("remove")
if remove then if remove then
for k, v in pairs(remove) do for k, v in pairs(remove) do
void, remove[k] = ipkg.remove(k) void, remove[k] = ipkg.remove(k)
@ -136,21 +136,21 @@ function action_packages()
-- Update all packets -- Update all packets
local update = ffluci.http.formvalue("update") local update = luci.http.formvalue("update")
if update then if update then
void, update = ipkg.update() void, update = ipkg.update()
end end
-- Upgrade all packets -- Upgrade all packets
local upgrade = ffluci.http.formvalue("upgrade") local upgrade = luci.http.formvalue("upgrade")
if upgrade then if upgrade then
void, upgrade = ipkg.upgrade() void, upgrade = ipkg.upgrade()
end end
-- Package info -- Package info
local info = ffluci.model.ipkg.info(query) local info = luci.model.ipkg.info(query)
info = info or {} info = info or {}
local pkgs = {} local pkgs = {}
@ -174,63 +174,63 @@ function action_packages()
table.insert(pkgs, x+1, v) table.insert(pkgs, x+1, v)
end end
ffluci.template.render("admin_system/packages", {pkgs=pkgs, query=query, luci.template.render("admin_system/packages", {pkgs=pkgs, query=query,
install=install, remove=remove, update=update, upgrade=upgrade}) install=install, remove=remove, update=update, upgrade=upgrade})
end end
function action_passwd() function action_passwd()
local p1 = ffluci.http.formvalue("pwd1") local p1 = luci.http.formvalue("pwd1")
local p2 = ffluci.http.formvalue("pwd2") local p2 = luci.http.formvalue("pwd2")
local stat = nil local stat = nil
if p1 or p2 then if p1 or p2 then
if p1 == p2 then if p1 == p2 then
stat = ffluci.sys.user.setpasswd("root", p1) stat = luci.sys.user.setpasswd("root", p1)
else else
stat = 10 stat = 10
end end
end end
ffluci.template.render("admin_system/passwd", {stat=stat}) luci.template.render("admin_system/passwd", {stat=stat})
end end
function action_reboot() function action_reboot()
local reboot = ffluci.http.formvalue("reboot") local reboot = luci.http.formvalue("reboot")
ffluci.template.render("admin_system/reboot", {reboot=reboot}) luci.template.render("admin_system/reboot", {reboot=reboot})
if reboot then if reboot then
ffluci.sys.reboot() luci.sys.reboot()
end end
end end
function action_sshkeys() function action_sshkeys()
local file = "/etc/dropbear/authorized_keys" local file = "/etc/dropbear/authorized_keys"
local data = ffluci.http.formvalue("data") local data = luci.http.formvalue("data")
local stat = nil local stat = nil
local err = nil local err = nil
if data then if data then
stat, err = ffluci.fs.writefile(file, data) stat, err = luci.fs.writefile(file, data)
end end
local cnt = ffluci.fs.readfile(file) local cnt = luci.fs.readfile(file)
if cnt then if cnt then
cnt = ffluci.util.pcdata(cnt) cnt = luci.util.pcdata(cnt)
end end
ffluci.template.render("admin_system/sshkeys", {cnt=cnt, msg=err}) luci.template.render("admin_system/sshkeys", {cnt=cnt, msg=err})
end end
function action_upgrade() function action_upgrade()
local ret = nil local ret = nil
local plat = ffluci.fs.mtime("/lib/upgrade/platform.sh") local plat = luci.fs.mtime("/lib/upgrade/platform.sh")
local image = ffluci.http.upload("image") local image = luci.http.upload("image")
local keepcfg = ffluci.http.formvalue("keepcfg") local keepcfg = luci.http.formvalue("keepcfg")
if plat and image then if plat and image then
local kpattern = nil local kpattern = nil
if keepcfg then if keepcfg then
local files = ffluci.model.uci.sections("luci").flash_keep local files = luci.model.uci.sections("luci").flash_keep
if files.luci and files.luci.flash_keep then if files.luci and files.luci.flash_keep then
kpattern = "" kpattern = ""
for k,v in pairs(files.luci.flash_keep) do for k,v in pairs(files.luci.flash_keep) do
@ -238,8 +238,8 @@ function action_upgrade()
end end
end end
end end
ret = ffluci.sys.flash(image, kpattern) ret = luci.sys.flash(image, kpattern)
end end
ffluci.template.render("admin_system/upgrade", {sysupgrade=plat, ret=ret}) luci.template.render("admin_system/upgrade", {sysupgrade=plat, ret=ret})
end end

View File

@ -1,6 +1,6 @@
module("ffluci.controller.admin.uci", package.seeall) module("luci.controller.admin.uci", package.seeall)
require("ffluci.util") require("luci.util")
require("ffluci.sys") require("luci.sys")
function index() function index()
node("admin", "uci", "changes").target = template("admin_uci/changes") node("admin", "uci", "changes").target = template("admin_uci/changes")
@ -10,7 +10,7 @@ end
-- This function has a higher priority than the admin_uci/apply template -- This function has a higher priority than the admin_uci/apply template
function action_apply() function action_apply()
local changes = ffluci.model.uci.changes() local changes = luci.model.uci.changes()
local output = "" local output = ""
if changes then if changes then
@ -18,39 +18,39 @@ function action_apply()
local run = {} local run = {}
-- Collect files to be applied and commit changes -- Collect files to be applied and commit changes
for i, line in ipairs(ffluci.util.split(changes)) do for i, line in ipairs(luci.util.split(changes)) do
local r = line:match("^-?([^.]+)") local r = line:match("^-?([^.]+)")
if r then if r then
com[r] = true com[r] = true
if ffluci.config.uci_oncommit and ffluci.config.uci_oncommit[r] then if luci.config.uci_oncommit and luci.config.uci_oncommit[r] then
run[ffluci.config.uci_oncommit[r]] = true run[luci.config.uci_oncommit[r]] = true
end end
end end
end end
-- Apply -- Apply
for config, i in pairs(com) do for config, i in pairs(com) do
ffluci.model.uci.commit(config) luci.model.uci.commit(config)
end end
-- Search for post-commit commands -- Search for post-commit commands
for cmd, i in pairs(run) do for cmd, i in pairs(run) do
output = output .. cmd .. ":" .. ffluci.sys.exec(cmd) .. "\n" output = output .. cmd .. ":" .. luci.sys.exec(cmd) .. "\n"
end end
end end
ffluci.template.render("admin_uci/apply", {changes=changes, output=output}) luci.template.render("admin_uci/apply", {changes=changes, output=output})
end end
function action_revert() function action_revert()
local changes = ffluci.model.uci.changes() local changes = luci.model.uci.changes()
if changes then if changes then
local revert = {} local revert = {}
-- Collect files to be reverted -- Collect files to be reverted
for i, line in ipairs(ffluci.util.split(changes)) do for i, line in ipairs(luci.util.split(changes)) do
local r = line:match("^-?([^.]+)") local r = line:match("^-?([^.]+)")
if r then if r then
revert[r] = true revert[r] = true
@ -59,9 +59,9 @@ function action_revert()
-- Revert them -- Revert them
for k, v in pairs(revert) do for k, v in pairs(revert) do
ffluci.model.uci.revert(k) luci.model.uci.revert(k)
end end
end end
ffluci.template.render("admin_uci/revert", {changes=changes}) luci.template.render("admin_uci/revert", {changes=changes})
end end

View File

@ -1,4 +1,4 @@
module("ffluci.controller.admin.wifi", package.seeall) module("luci.controller.admin.wifi", package.seeall)
function index() function index()
local page = node("admin", "wifi") local page = node("admin", "wifi")

View File

@ -1,20 +1,20 @@
luci = "User Interface" luci = "User Interface"
hello = "Hello!" hello = "Hello!"
admin1 = "This is the administration area of FFLuCI." admin1 = "This is the administration area of LuCI."
admin2 = "FFLuCI is a free, flexible, and user friendly graphical interface for configuring OpenWRT Kamikaze." admin2 = "LuCI is a free, flexible, and user friendly graphical interface for configuring OpenWRT Kamikaze."
admin3 = "On the following pages you can adjust all important settings of your router." admin3 = "On the following pages you can adjust all important settings of your router."
admin4 = "You will find a navigation leading to the different configuration pages on the left side." admin4 = "You will find a navigation leading to the different configuration pages on the left side."
admin5 = [[As we are always want to improve this interface we are looking forward admin5 = [[As we are always want to improve this interface we are looking forward
to your feedback and suggestions.]] to your feedback and suggestions.]]
admin6 = "And now have fun with your router!" admin6 = "And now have fun with your router!"
team = "The FFLuCI Team" team = "The LuCI Team"
luci1 = "Here you can customize the settings and the functionality of FFLuCI." luci1 = "Here you can customize the settings and the functionality of LuCI."
language = "Language" language = "Language"
general = "General" general = "General"
ucicommit = "Post-commit actions" ucicommit = "Post-commit actions"
ucicommit1 = [[These commands will be executed automatically when a given UCI configuration is committed allowing ucicommit1 = [[These commands will be executed automatically when a given UCI configuration is committed allowing
changes to be applied instantly.]] changes to be applied instantly.]]
keepflash = "Files to be kept when flashing a new firmware" keepflash = "Files to be kept when flashing a new firmware"
keepflash1 = "When flashing a new firmware with FFLuCI these files will be added to the new firmware installation." keepflash1 = "When flashing a new firmware with LuCI these files will be added to the new firmware installation."

View File

@ -1,19 +1,19 @@
-- ToDo: Translate -- ToDo: Translate
require("ffluci.config") require("luci.config")
m = Map("luci", translate("luci", "Oberfläche"), translate("luci1", m = Map("luci", translate("luci", "Oberfläche"), translate("luci1",
"Hier können Eigenschaften und die Funktionalität der Oberfläche angepasst werden.")) "Hier können Eigenschaften und die Funktionalität der Oberfläche angepasst werden."))
c = m:section(NamedSection, "main", "core", translate("general", "Allgemein")) c = m:section(NamedSection, "main", "core", translate("general", "Allgemein"))
l = c:option(ListValue, "lang", translate("language", "Sprache")) l = c:option(ListValue, "lang", translate("language", "Sprache"))
for k, v in pairs(ffluci.config.languages) do for k, v in pairs(luci.config.languages) do
if k:sub(1, 1) ~= "." then if k:sub(1, 1) ~= "." then
l:value(k, v) l:value(k, v)
end end
end end
t = c:option(ListValue, "mediaurlbase", translate("design", "Design")) t = c:option(ListValue, "mediaurlbase", translate("design", "Design"))
for k, v in pairs(ffluci.config.themes) do for k, v in pairs(luci.config.themes) do
if k:sub(1, 1) ~= "." then if k:sub(1, 1) ~= "." then
t:value(v, k) t:value(v, k)
end end

View File

@ -1,6 +1,6 @@
-- ToDo: Translate, Add descriptions and help texts -- ToDo: Translate, Add descriptions and help texts
require("ffluci.model.uci") require("luci.model.uci")
require("ffluci.sys") require("luci.sys")
m = Map("dhcp", "DHCP", [[Mit Hilfe von DHCP können Netzteilnehmer automatisch m = Map("dhcp", "DHCP", [[Mit Hilfe von DHCP können Netzteilnehmer automatisch
ihre Netzwerkkonfiguration (IP-Adresse, Netzmaske, DNS-Server, DHCP, ...) beziehen.]]) ihre Netzwerkkonfiguration (IP-Adresse, Netzmaske, DNS-Server, DHCP, ...) beziehen.]])
@ -10,7 +10,7 @@ s.addremove = true
s.anonymous = true s.anonymous = true
iface = s:option(ListValue, "interface", "Schnittstelle") iface = s:option(ListValue, "interface", "Schnittstelle")
for k, v in pairs(ffluci.model.uci.sections("network")) do for k, v in pairs(luci.model.uci.sections("network")) do
if v[".type"] == "interface" and k ~= "loopback" then if v[".type"] == "interface" and k ~= "loopback" then
iface:value(k) iface:value(k)
s:depends("interface", k) -- Only change sections with existing interfaces s:depends("interface", k) -- Only change sections with existing interfaces
@ -33,7 +33,7 @@ s:option(Value, "netmask", "Netzmaske").optional = true
s:option(Flag, "force", "Start erzwingen").optional = true s:option(Flag, "force", "Start erzwingen").optional = true
for i, line in pairs(ffluci.sys.execl("dnsmasq --help dhcp")) do for i, line in pairs(luci.sys.execl("dnsmasq --help dhcp")) do
k, v = line:match("([^ ]+) +([^ ]+)") k, v = line:match("([^ ]+) +([^ ]+)")
s:option(Value, "dhcp"..k, v).optional = true s:option(Value, "dhcp"..k, v).optional = true
end end

View File

@ -9,7 +9,7 @@ s.anonymous = true
s.template = "cbi/tblsection" s.template = "cbi/tblsection"
iface = s:option(ListValue, "interface", "Schnittstelle") iface = s:option(ListValue, "interface", "Schnittstelle")
for k, v in pairs(ffluci.model.uci.sections("network")) do for k, v in pairs(luci.model.uci.sections("network")) do
if v[".type"] == "interface" and k ~= "loopback" then if v[".type"] == "interface" and k ~= "loopback" then
iface:value(k) iface:value(k)
end end

View File

@ -1,5 +1,5 @@
-- ToDo: Autodetect things, Translate, Add descriptions -- ToDo: Autodetect things, Translate, Add descriptions
require("ffluci.fs") require("luci.fs")
m = Map("olsr", "OLSR", [[OLSR ist ein flexibles Routingprotokoll, m = Map("olsr", "OLSR", [[OLSR ist ein flexibles Routingprotokoll,
dass den Aufbau von mobilen Ad-Hoc Netzen unterstützt.]]) dass den Aufbau von mobilen Ad-Hoc Netzen unterstützt.]])
@ -51,7 +51,7 @@ i.dynamic = true
network = i:option(ListValue, "Interface", "Netzwerkschnittstellen") network = i:option(ListValue, "Interface", "Netzwerkschnittstellen")
network:value("") network:value("")
for k, v in pairs(ffluci.model.uci.sections("network")) do for k, v in pairs(luci.model.uci.sections("network")) do
if v[".type"] == "interface" and k ~= "loopback" then if v[".type"] == "interface" and k ~= "loopback" then
network:value(k) network:value(k)
end end
@ -80,7 +80,7 @@ p.dynamic = true
lib = p:option(ListValue, "Library", "Bibliothek") lib = p:option(ListValue, "Library", "Bibliothek")
lib:value("") lib:value("")
for k, v in pairs(ffluci.fs.dir("/usr/lib")) do for k, v in pairs(luci.fs.dir("/usr/lib")) do
if v:sub(1, 6) == "olsrd_" then if v:sub(1, 6) == "olsrd_" then
lib:value(v) lib:value(v)
end end

View File

@ -15,9 +15,9 @@ t:value("atheros")
t:value("mac80211") t:value("mac80211")
t:value("prism2") t:value("prism2")
--[[ --[[
require("ffluci.sys") require("luci.sys")
local c = ". /etc/functions.sh;for i in /lib/wifi/*;do . $i;done;echo $DRIVERS" local c = ". /etc/functions.sh;for i in /lib/wifi/*;do . $i;done;echo $DRIVERS"
for driver in ffluci.sys.execl(c)[1]:gmatch("[^ ]+") do for driver in luci.sys.execl(c)[1]:gmatch("[^ ]+") do
t:value(driver) t:value(driver)
end end
]]-- ]]--

View File

@ -11,7 +11,7 @@ s.anonymous = true
s:option(Value, "ssid", "Netzkennung (ESSID)").maxlength = 32 s:option(Value, "ssid", "Netzkennung (ESSID)").maxlength = 32
device = s:option(ListValue, "device", "Gerät") device = s:option(ListValue, "device", "Gerät")
local d = ffluci.model.uci.sections("wireless") local d = luci.model.uci.sections("wireless")
if d then if d then
for k, v in pairs(d) do for k, v in pairs(d) do
if v[".type"] == "wifi-device" then if v[".type"] == "wifi-device" then
@ -22,7 +22,7 @@ end
network = s:option(ListValue, "network", "Netzwerk", "WLAN-Netz zu Netzwerk hinzufügen") network = s:option(ListValue, "network", "Netzwerk", "WLAN-Netz zu Netzwerk hinzufügen")
network:value("") network:value("")
for k, v in pairs(ffluci.model.uci.sections("network")) do for k, v in pairs(luci.model.uci.sections("network")) do
if v[".type"] == "interface" and k ~= "loopback" then if v[".type"] == "interface" and k ~= "loopback" then
network:value(k) network:value(k)
end end

View File

@ -1,11 +1,11 @@
<%+header%> <%+header%>
<h1><%:hello Hallo!%></h1> <h1><%:hello Hallo!%></h1>
<p><%:admin1 Dies ist der Administrationsbereich von FFLuCI.%></p> <p><%:admin1 Dies ist der Administrationsbereich von LuCI.%></p>
<p><%:admin2 FFLuCI ist eine freie, flexible und benutzerfreundliche grafische Oberfläche zur Konfiguration von OpenWRT Kamikaze.%><br /> <p><%:admin2 LuCI ist eine freie, flexible und benutzerfreundliche grafische Oberfläche zur Konfiguration von OpenWRT Kamikaze.%><br />
<%:admin3 Auf den folgenden Seiten können alle wichtigen Einstellungen des Routers vorgenommen werden.%></p> <%:admin3 Auf den folgenden Seiten können alle wichtigen Einstellungen des Routers vorgenommen werden.%></p>
<p><%:admin4 Auf der linken Seite befindet sich eine Navigation, die zu den einzelnen Konfigurationsseiten führt.%></p> <p><%:admin4 Auf der linken Seite befindet sich eine Navigation, die zu den einzelnen Konfigurationsseiten führt.%></p>
<p><%:admin5 Wir sind natürlich stets darum bemüht, diese Oberfläche <p><%:admin5 Wir sind natürlich stets darum bemüht, diese Oberfläche
noch besser und intuitiver zu Gestalten und freuen uns über jegliche Art von Feedback oder Verbesserungsvorschlägen.%></p> noch besser und intuitiver zu Gestalten und freuen uns über jegliche Art von Feedback oder Verbesserungsvorschlägen.%></p>
<p><%:admin6 Und nun wünschen wir viel Spaß mit dem Router!%></p> <p><%:admin6 Und nun wünschen wir viel Spaß mit dem Router!%></p>
<p><em><strong><a href="http://luci.freifunk-halle.net"><%:team Das FFLuCI-Team%></a></strong></em></p> <p><em><strong><a href="http://luci.freifunk-halle.net"><%:team Das LuCI-Team%></a></strong></em></p>
<%+footer%> <%+footer%>

View File

@ -1,7 +1,7 @@
<%+header%> <%+header%>
<h1><%:config Konfiguration%></h1> <h1><%:config Konfiguration%></h1>
<h2><%:changes Änderungen%></h2> <h2><%:changes Änderungen%></h2>
<code><%=ffluci.model.uci.changes()%></code> <code><%=luci.model.uci.changes()%></code>
<form class="inline" method="get" action="<%=controller%>/admin/uci/apply"> <form class="inline" method="get" action="<%=controller%>/admin/uci/apply">
<input type="submit" value="<%:apply Anwenden%>" /> <input type="submit" value="<%:apply Anwenden%>" />
</form> </form>

View File

@ -1,4 +1,4 @@
module("ffluci.controller.freifunk.freifunk", package.seeall) module("luci.controller.freifunk.freifunk", package.seeall)
function index() function index()
local page = node() local page = node()
@ -52,17 +52,17 @@ end
function action_status() function action_status()
local data = {} local data = {}
data.s, data.m, data.r = ffluci.sys.sysinfo() data.s, data.m, data.r = luci.sys.sysinfo()
data.wifi = ffluci.sys.wifi.getiwconfig() data.wifi = luci.sys.wifi.getiwconfig()
data.routes = {} data.routes = {}
for i, r in pairs(ffluci.sys.net.routes()) do for i, r in pairs(luci.sys.net.routes()) do
if r.Destination == "00000000" then if r.Destination == "00000000" then
table.insert(data.routes, r) table.insert(data.routes, r)
end end
end end
ffluci.template.render("public_status/index", data) luci.template.render("public_status/index", data)
end end

View File

@ -1,28 +1,28 @@
module("ffluci.controller.freifunk.luciinfo", package.seeall) module("luci.controller.freifunk.luciinfo", package.seeall)
function index() function index()
node("freifunk", "luciinfo").target = action_index node("freifunk", "luciinfo").target = action_index
end end
function action_index() function action_index()
local uci = ffluci.model.uci.StateSession() local uci = luci.model.uci.StateSession()
ffluci.http.prepare_content("text/plain") luci.http.prepare_content("text/plain")
-- General -- General
print("luciinfo.api=1") print("luciinfo.api=1")
print("luciinfo.version=" .. tostring(require("ffluci").__version__)) print("luciinfo.version=" .. tostring(require("luci").__version__))
-- Sysinfo -- Sysinfo
local s, m, r = ffluci.sys.sysinfo() local s, m, r = luci.sys.sysinfo()
local dr = ffluci.sys.net.defaultroute() local dr = luci.sys.net.defaultroute()
dr = dr and ffluci.sys.net.hexip4(dr.Gateway) or "" dr = dr and luci.sys.net.hexip4(dr.Gateway) or ""
local l1, l5, l15 = ffluci.sys.loadavg() local l1, l5, l15 = luci.sys.loadavg()
print("sysinfo.system=" .. sanitize(s)) print("sysinfo.system=" .. sanitize(s))
print("sysinfo.cpu=" .. sanitize(m)) print("sysinfo.cpu=" .. sanitize(m))
print("sysinfo.ram=" .. sanitize(r)) print("sysinfo.ram=" .. sanitize(r))
print("sysinfo.hostname=" .. sanitize(ffluci.sys.hostname())) print("sysinfo.hostname=" .. sanitize(luci.sys.hostname()))
print("sysinfo.load1=" .. tostring(l1)) print("sysinfo.load1=" .. tostring(l1))
print("sysinfo.load5=" .. tostring(l5)) print("sysinfo.load5=" .. tostring(l5))
print("sysinfo.load15=" .. tostring(l15)) print("sysinfo.load15=" .. tostring(l15))

View File

@ -1,5 +1,5 @@
module("ffluci.controller.freifunk.olsr", package.seeall) module("luci.controller.freifunk.olsr", package.seeall)
require("ffluci.sys") require("luci.sys")
function index() function index()
local page = node("freifunk", "olsr") local page = node("freifunk", "olsr")
@ -32,7 +32,7 @@ function action_index()
local data = fetch_txtinfo("links") local data = fetch_txtinfo("links")
if not data or not data.Links then if not data or not data.Links then
ffluci.template.render("freifunk-olsr/error_olsr") luci.template.render("freifunk-olsr/error_olsr")
return nil return nil
end end
@ -50,14 +50,14 @@ function action_index()
table.sort(data.Links, compare) table.sort(data.Links, compare)
ffluci.template.render("freifunk-olsr/index", {links=data.Links}) luci.template.render("freifunk-olsr/index", {links=data.Links})
end end
function action_routes() function action_routes()
local data = fetch_txtinfo("routes") local data = fetch_txtinfo("routes")
if not data or not data.Routes then if not data or not data.Routes then
ffluci.template.render("freifunk-olsr/error_olsr") luci.template.render("freifunk-olsr/error_olsr")
return nil return nil
end end
@ -75,14 +75,14 @@ function action_routes()
table.sort(data.Routes, compare) table.sort(data.Routes, compare)
ffluci.template.render("freifunk-olsr/routes", {routes=data.Routes}) luci.template.render("freifunk-olsr/routes", {routes=data.Routes})
end end
function action_topology() function action_topology()
local data = fetch_txtinfo("topology") local data = fetch_txtinfo("topology")
if not data or not data.Topology then if not data or not data.Topology then
ffluci.template.render("freifunk-olsr/error_olsr") luci.template.render("freifunk-olsr/error_olsr")
return nil return nil
end end
@ -92,14 +92,14 @@ function action_topology()
table.sort(data.Topology, compare) table.sort(data.Topology, compare)
ffluci.template.render("freifunk-olsr/topology", {routes=data.Topology}) luci.template.render("freifunk-olsr/topology", {routes=data.Topology})
end end
function action_hna() function action_hna()
local data = fetch_txtinfo("hna") local data = fetch_txtinfo("hna")
if not data or not data.HNA then if not data or not data.HNA then
ffluci.template.render("freifunk-olsr/error_olsr") luci.template.render("freifunk-olsr/error_olsr")
return nil return nil
end end
@ -109,14 +109,14 @@ function action_hna()
table.sort(data.HNA, compare) table.sort(data.HNA, compare)
ffluci.template.render("freifunk-olsr/hna", {routes=data.HNA}) luci.template.render("freifunk-olsr/hna", {routes=data.HNA})
end end
function action_mid() function action_mid()
local data = fetch_txtinfo("mid") local data = fetch_txtinfo("mid")
if not data or not data.MID then if not data or not data.MID then
ffluci.template.render("freifunk-olsr/error_olsr") luci.template.render("freifunk-olsr/error_olsr")
return nil return nil
end end
@ -126,14 +126,14 @@ function action_mid()
table.sort(data.MID, compare) table.sort(data.MID, compare)
ffluci.template.render("freifunk-olsr/mid", {mids=data.MID}) luci.template.render("freifunk-olsr/mid", {mids=data.MID})
end end
-- Internal -- Internal
function fetch_txtinfo(otable) function fetch_txtinfo(otable)
otable = otable or "" otable = otable or ""
local rawdata = ffluci.sys.httpget("http://127.0.0.1:2006/"..otable) local rawdata = luci.sys.httpget("http://127.0.0.1:2006/"..otable)
if #rawdata == 0 then if #rawdata == 0 then
return nil return nil
@ -141,18 +141,18 @@ function fetch_txtinfo(otable)
local data = {} local data = {}
local tables = ffluci.util.split(ffluci.util.trim(rawdata), "\n\n") local tables = luci.util.split(luci.util.trim(rawdata), "\n\n")
for i, tbl in ipairs(tables) do for i, tbl in ipairs(tables) do
local lines = ffluci.util.split(tbl, "\n") local lines = luci.util.split(tbl, "\n")
local name = table.remove(lines, 1):sub(8) local name = table.remove(lines, 1):sub(8)
local keys = ffluci.util.split(table.remove(lines, 1), "\t") local keys = luci.util.split(table.remove(lines, 1), "\t")
data[name] = {} data[name] = {}
for j, line in ipairs(lines) do for j, line in ipairs(lines) do
local fields = ffluci.util.split(line, "\t") local fields = luci.util.split(line, "\t")
data[name][j] = {} data[name][j] = {}
for k, key in pairs(keys) do for k, key in pairs(keys) do
data[name][j][key] = fields[k] data[name][j][key] = fields[k]

View File

@ -1,5 +1,5 @@
<%+header%> <%+header%>
<% local contact = ffluci.model.uci.sections("freifunk").contact %> <% local contact = luci.model.uci.sections("freifunk").contact %>
<h1><%:contact Kontakt%></h1> <h1><%:contact Kontakt%></h1>
<table cellspacing="0" cellpadding="6"> <table cellspacing="0" cellpadding="6">
<tr><th><%:nickname Pseudonym%>:</th><td><%=contact.nickname%></td></tr> <tr><th><%:nickname Pseudonym%>:</th><td><%=contact.nickname%></td></tr>

View File

@ -1,8 +1,8 @@
<%+header%> <%+header%>
<% local ff = ffluci.model.uci.sections("freifunk") %> <% local ff = luci.model.uci.sections("freifunk") %>
<h1><%:hellonet Hallo und willkommen im Netz von%> <%=ff.community.name%>!</h1> <h1><%:hellonet Hallo und willkommen im Netz von%> <%=ff.community.name%>!</h1>
<p><%:public1 Wir sind eine Initiative zur Schaffung eines freien, offenen und unabhängigen Funknetzwerks auf WLAN-Basis.%><br /> <p><%:public1 Wir sind eine Initiative zur Schaffung eines freien, offenen und unabhängigen Funknetzwerks auf WLAN-Basis.%><br />
<%:public2 Dies ist der Zugangspunkt %><%=ffluci.sys.hostname()%>. <%:public3 Er wird betrieben von %> <%:public2 Dies ist der Zugangspunkt %><%=luci.sys.hostname()%>. <%:public3 Er wird betrieben von %>
<a href="<%=controller%>/public/index/contact"><%=ff.contact.nickname%></a>.</p> <a href="<%=controller%>/public/index/contact"><%=ff.contact.nickname%></a>.</p>
<p><%:public4 Weitere Informationen zur globalen Freifunkinitiative findest du unter%> <a href="http://freifunk.net">Freifunk.net</a>.<br /> <p><%:public4 Weitere Informationen zur globalen Freifunkinitiative findest du unter%> <a href="http://freifunk.net">Freifunk.net</a>.<br />
<%:public5 Hast du Interesse an diesem Projekt, dann wende dich an deine lokale Gemeinschaft%> <a href="<%=ff.community.homepage%>"><%=ff.community.name%></a>.</p> <%:public5 Hast du Interesse an diesem Projekt, dann wende dich an deine lokale Gemeinschaft%> <a href="<%=ff.community.homepage%>"><%=ff.community.name%></a>.</p>

View File

@ -34,7 +34,7 @@
<th><%:signal Signal%></th> <th><%:signal Signal%></th>
<th><%:noise Rausch%></th> <th><%:noise Rausch%></th>
</tr> </tr>
<%for k, v in pairs(ffluci.sys.wifi.getiwconfig()) do <%for k, v in pairs(luci.sys.wifi.getiwconfig()) do
%> %>
<tr> <tr>
<td rowspan="2"><%=k%></td> <td rowspan="2"><%=k%></td>
@ -68,7 +68,7 @@
for i, rt in pairs(routes) do for i, rt in pairs(routes) do
%> %>
<tr> <tr>
<td><%=ffluci.sys.net.hexip4(rt.Gateway)%></th> <td><%=luci.sys.net.hexip4(rt.Gateway)%></th>
<td><%=rt.Metric%></th> <td><%=rt.Metric%></th>
<td><%=rt.Iface%></th> <td><%=rt.Iface%></th>
</tr> </tr>

View File

@ -15,7 +15,7 @@
<th><%:signal Signal%></th> <th><%:signal Signal%></th>
<th><%:noise Rausch%></th> <th><%:noise Rausch%></th>
</tr> </tr>
<%for iface, cells in pairs(ffluci.sys.wifi.iwscan()) do <%for iface, cells in pairs(luci.sys.wifi.iwscan()) do
for i, cell in ipairs(cells) do for i, cell in ipairs(cells) do
%> %>
<tr> <tr>

View File

@ -11,14 +11,14 @@
<th><%:iface Schnittstelle%></th> <th><%:iface Schnittstelle%></th>
</tr> </tr>
<% <%
local routes = ffluci.sys.net.routes() local routes = luci.sys.net.routes()
for i, r in pairs(routes) do for i, r in pairs(routes) do
%> %>
<tr> <tr>
<td><%=ffluci.sys.net.hexip4(r.Destination)%></td> <td><%=luci.sys.net.hexip4(r.Destination)%></td>
<td><%=ffluci.sys.net.hexip4(r.Mask)%></td> <td><%=luci.sys.net.hexip4(r.Mask)%></td>
<td><%=ffluci.sys.net.hexip4(r.Gateway)%></td> <td><%=luci.sys.net.hexip4(r.Gateway)%></td>
<td><%=r.Metric%></td> <td><%=r.Metric%></td>
<td><%=r.Iface%></td> <td><%=r.Iface%></td>
</tr> </tr>

View File

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB