diff options
Diffstat (limited to 'applications/luci-app-travelmate/luasrc/model')
5 files changed, 243 insertions, 42 deletions
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua index 236bbb0de5..12cb72cbe5 100644 --- a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua +++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua @@ -2,12 +2,13 @@ -- This is free software, licensed under the Apache License, Version 2.0 local fs = require("nixio.fs") -local uci = require("uci") +local uci = require("luci.model.uci").cursor() local json = require("luci.jsonc") local nw = require("luci.model.network").init() local fw = require("luci.model.firewall").init() -local uplink = uci.get("network", "trm_wwan") or "" +local trmiface = uci.get("travelmate", "global", "trm_iface") or "trm_wwan" local trminput = uci.get("travelmate", "global", "trm_rtfile") or "/tmp/trm_runtime.json" +local uplink = uci.get("network", trmiface) or "" local parse = json.parse(fs.readfile(trminput) or "") m = Map("travelmate", translate("Travelmate"), @@ -21,70 +22,87 @@ function m.on_after_commit(self) luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate")) end --- Main travelmate options - s = m:section(NamedSection, "global", "travelmate") -o1 = s:option(Flag, "trm_enabled", translate("Enable travelmate")) -o1.default = o1.disabled -o1.rmempty = false +-- Interface Wizard -o2 = s:option(Flag, "trm_automatic", translate("Enable 'automatic' mode"), - translate("Keep travelmate in an active state.")) -o2.default = o2.enabled -o2.rmempty = false - -o3 = s:option(Value, "trm_iface", translate("Restrict interface trigger to certain interface(s)"), - translate("Space separated list of interfaces that trigger travelmate processing. ".. - "To disable event driven (re-)starts remove all entries.")) -o3.rmempty = true - -o4 = s:option(Value, "trm_triggerdelay", translate("Trigger delay"), - translate("Additional trigger delay in seconds before travelmate processing begins.")) -o4.default = 2 -o4.datatype = "range(1,90)" -o4.rmempty = false +if uplink == "" then + dv = s:option(DummyValue, "nil", translate("Interface Wizard")) + dv.template = "cbi/nullsection" -o5 = s:option(Flag, "trm_debug", translate("Enable verbose debug logging")) -o5.default = o5.disabled -o5.rmempty = false + o = s:option(Value, "trm_iface", translate("Uplink interface")) + o.datatype = "and(uciname,rangelength(3,15))" + o.default = "trm_wwan" + o.rmempty = false --- Interface setup + function o.write(self, section, value) + iface = o:formvalue(section) + uci:set("travelmate", section, "trm_iface", iface) + uci:save("travelmate") + uci:commit("travelmate") + end -if uplink == "" then - dv = s:option(DummyValue, "_dummy", translate("Interface Setup")) - dv.template = "cbi/nullsection" btn = s:option(Button, "", translate("Create Uplink Interface"), - translate("Automatically create a new wireless wan uplink interface 'trm_wwan', configure it to use dhcp and ") + translate("Create a new wireless wan uplink interface, configure it to use dhcp and ") .. translate("add it to the wan zone of the firewall. This step has only to be done once.")) btn.inputtitle = translate("Add Interface") btn.inputstyle = "apply" btn.disabled = false function btn.write() - local name = "trm_wwan" - local net = nw:add_network(name, { proto = "dhcp" }) + local net = nw:add_network(iface, { proto = "dhcp" }) if net then nw:save("network") nw:commit("network") local zone = fw:get_zone_by_network("wan") if zone then - zone:add_network(name) + zone:add_network(iface) fw:save("firewall") fw:commit("firewall") + luci.sys.call("env -i /bin/ubus call network reload >/dev/null 2>&1") end - luci.sys.call("env -i /bin/ubus call network reload >/dev/null 2>&1") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate")) end + luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate")) end -else - dv = s:option(DummyValue, "_dummy", translate("Interface Setup"), - translate("<br /> Network Interface 'trm_wwan' created successfully. ") - .. translatef("Scan & Add new wireless stations via standard " - .. "<a href=\"%s\">" - .. "Wireless Setup</a>", luci.dispatcher.build_url("admin/network/wireless"))) - dv.template = "cbi/nullsection" + return m end +-- Main travelmate options + +o1 = s:option(Flag, "trm_enabled", translate("Enable travelmate")) +o1.default = o1.disabled +o1.rmempty = false + +o2 = s:option(Flag, "trm_automatic", translate("Enable 'automatic' mode"), + translate("Keep travelmate in an active state. Check every n seconds the connection status, i.e. the uplink availability.")) +o2.default = o2.enabled +o2.rmempty = false + +btn = s:option(Button, "", translate("Manual Rescan")) +btn:depends("trm_automatic", "") +btn.inputtitle = translate("Rescan") +btn.inputstyle = "find" +btn.disabled = false +function btn.write() + luci.sys.call("/etc/init.d/travelmate start >/dev/null 2>&1") + luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate")) +end + +o3 = s:option(Value, "trm_iface", translate("Uplink / Trigger interface"), + translate("Name of the uplink interface that triggers travelmate processing in 'manual' mode.")) +o3.datatype = "and(uciname,rangelength(3,15))" +o3.default = trmiface +o3.rmempty = false + +o4 = s:option(Value, "trm_triggerdelay", translate("Trigger delay"), + translate("Additional trigger delay in seconds before travelmate processing begins.")) +o4.default = 2 +o4.datatype = "range(1,90)" +o4.rmempty = false + +o5 = s:option(Flag, "trm_debug", translate("Enable verbose debug logging")) +o5.default = o5.disabled +o5.rmempty = false + -- Runtime information ds = s:option(DummyValue, "_dummy", translate("Runtime information")) diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_add.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_add.lua new file mode 100644 index 0000000000..979307e001 --- /dev/null +++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_add.lua @@ -0,0 +1,69 @@ +-- Copyright 2017 Dirk Brenken (dev@brenken.org) +-- This is free software, licensed under the Apache License, Version 2.0 + +local fs = require("nixio.fs") +local uci = require("luci.model.uci").cursor() +local http = require("luci.http") +local trmiface = uci.get("travelmate", "global", "trm_iface") or "trm_wwan" + +m = SimpleForm("add", translate("Add Wireless Uplink Configuration")) +m.cancel = translate("Back to overview") +m.reset = false + +function m.on_cancel() + http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations")) +end + +m.hidden = { + device = http.formvalue("device"), + ssid = http.formvalue("ssid"), + wep = http.formvalue("wep"), + wpa_suites = http.formvalue("wpa_suites"), + wpa_version = http.formvalue("wpa_version") +} + +if m.hidden.ssid ~= "" then + wssid = m:field(Value, "ssid", translate("SSID")) + wssid.default = m.hidden.ssid +else + wssid = m:field(Value, "ssid", translate("SSID (hidden)")) +end + +if (tonumber(m.hidden.wep) or 0) == 1 then + wkey = m:field(Value, "key", translate("WEP passphrase"), + translate("Specify the secret encryption key here.")) + wkey.password = true + wkey.datatype = "wepkey" +elseif (tonumber(m.hidden.wpa_version) or 0) > 0 and + (m.hidden.wpa_suites == "PSK" or m.hidden.wpa_suites == "PSK2") +then + wkey = m:field(Value, "key", translate("WPA passphrase"), + translate("Specify the secret encryption key here.")) + wkey.password = true + wkey.datatype = "wpakey" +end + +function wssid.write(self, section, value) + newsection = uci:section("wireless", "wifi-iface", nil, { + mode = "sta", + network = trmiface, + device = m.hidden.device, + ssid = wssid:formvalue(section), + disabled = "1" + }) + if (tonumber(m.hidden.wep) or 0) == 1 then + uci:set("wireless", newsection, "encryption", "wep-open") + uci:set("wireless", newsection, "key", "1") + uci:set("wireless", newsection, "key1", wkey:formvalue(section)) + elseif (tonumber(m.hidden.wpa_version) or 0) > 0 then + uci:set("wireless", newsection, "encryption", "psk2") + uci:set("wireless", newsection, "key", wkey:formvalue(section)) + else + uci:set("wireless", newsection, "encryption", "none") + end + uci:save("wireless") + uci:commit("wireless") + http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations")) +end + +return m diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_delete.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_delete.lua new file mode 100644 index 0000000000..97ec1ca3ca --- /dev/null +++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_delete.lua @@ -0,0 +1,14 @@ +-- Copyright 2017 Dirk Brenken (dev@brenken.org) +-- This is free software, licensed under the Apache License, Version 2.0 + +local uci = require("luci.model.uci").cursor() +local http = require("luci.http") +local cfg = http.formvalue("cfg") + +if cfg ~= nil then + uci:delete("wireless", cfg) + uci:save("wireless") + uci:commit("wireless") +end + +http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations")) diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_edit.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_edit.lua new file mode 100644 index 0000000000..0bae98460f --- /dev/null +++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_edit.lua @@ -0,0 +1,49 @@ +-- Copyright 2017 Dirk Brenken (dev@brenken.org) +-- This is free software, licensed under the Apache License, Version 2.0 + +local fs = require("nixio.fs") +local uci = require("luci.model.uci").cursor() +local http = require("luci.http") + +m = SimpleForm("edit", translate("Edit Wireless Uplink Configuration")) +m.cancel = translate("Back to overview") +m.reset = false + +function m.on_cancel() + http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations")) +end + +m.hidden = { + cfg = http.formvalue("cfg") +} + +local s = uci:get_all("wireless", m.hidden.cfg) +if s ~= nil then + wssid = m:field(Value, "ssid", translate("SSID")) + wssid.default = s.ssid + + if s.encryption and s.key then + wkey = m:field(Value, "key", translatef("Passphrase (%s)", s.encryption)) + wkey.password = true + wkey.default = s.key + if s.encryption == "wep" then + wkey.datatype = "wepkey" + else + wkey.datatype = "wpakey" + end + end +else + http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations")) +end + +function wssid.write(self, section, value) + uci:set("wireless", m.hidden.cfg, "ssid", wssid:formvalue(section)) + if s.encryption and s.key then + uci:set("wireless", m.hidden.cfg, "key", wkey:formvalue(section)) + end + uci:save("wireless") + uci:commit("wireless") + http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations")) +end + +return m diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_order.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_order.lua new file mode 100644 index 0000000000..d53e1f55e5 --- /dev/null +++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_order.lua @@ -0,0 +1,51 @@ +-- Copyright 2017 Dirk Brenken (dev@brenken.org) +-- This is free software, licensed under the Apache License, Version 2.0 + +local http = require("luci.http") +local cfg = http.formvalue("cfg") +local dir = http.formvalue("dir") +local uci = require("luci.model.uci").cursor() +local trmiface = uci:get("travelmate", "global", "trm_iface") or "trm_wwan" + +if cfg ~= nil then + local iface = "" + local section = "" + local idx = "" + local idx_change = "" + if dir == "up" then + uci:foreach("wireless", "wifi-iface", function(s) + iface = s.network + if iface == trmiface then + section = s['.name'] + if cfg == section then + idx = s['.index'] + else + idx_change = s['.index'] + end + if idx ~= "" and idx_change ~= "" and idx_change < idx then + uci:reorder("wireless", cfg, idx_change) + idx = "" + end + end + end) + elseif dir == "down" then + uci:foreach("wireless", "wifi-iface", function(s) + iface = s.network + if iface == trmiface then + section = s['.name'] + if cfg == section then + idx = s['.index'] + else + idx_change = s['.index'] + end + if idx ~= "" and idx_change ~= "" and idx_change > idx then + uci:reorder("wireless", cfg, idx_change) + idx = "" + end + end + end) + end + uci:save("wireless") + uci:commit("wireless") +end +http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations")) |