* frontend: add/modify input datatypes in 'extra' section
* frontend: add support to edit/change wpa enterprise key phrases
* frontend: various small fixes
Signed-off-by: Dirk Brenken <dev@brenken.org>
local fs = require("nixio.fs")
local uci = require("luci.model.uci").cursor()
local json = require("luci.jsonc")
local fs = require("nixio.fs")
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 nw = require("luci.model.network").init()
+local fw = require("luci.model.firewall").init()
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 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 ""
.. "see online documentation</a>", "https://github.com/openwrt/packages/blob/master/net/travelmate/files/README.md"))
function m.on_after_commit(self)
.. "see online documentation</a>", "https://github.com/openwrt/packages/blob/master/net/travelmate/files/README.md"))
function m.on_after_commit(self)
- luci.sys.call("/etc/init.d/travelmate restart >/dev/null 2>&1")
+ luci.sys.call("env -i /etc/init.d/travelmate restart >/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
-- Interface Wizard
if uplink == "" then
-- Interface Wizard
if uplink == "" then
- dv = s:option(DummyValue, "nil", translate("Interface Wizard"))
+ dv = s:option(DummyValue, "", translate("Interface Wizard"))
dv.template = "cbi/nullsection"
dv.template = "cbi/nullsection"
- o = s:option(Value, "trm_iface", translate("Uplink interface"))
+ o = s:option(Value, "", translate("Uplink interface"))
o.datatype = "and(uciname,rangelength(3,15))"
o.datatype = "and(uciname,rangelength(3,15))"
- btn = s:option(Button, "", translate("Create Uplink Interface"),
+ btn = s:option(Button, "trm_iface", translate("Create Uplink Interface"),
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(self, section, value)
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(self, section, value)
- iface = o:formvalue(section)
- uci:set("travelmate", section, "trm_iface", iface)
- uci:save("travelmate")
- uci:commit("travelmate")
- 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(iface)
- fw:save("firewall")
- fw:commit("firewall")
- luci.sys.call("env -i /bin/ubus call network reload >/dev/null 2>&1")
+ local iface = o:formvalue(section)
+ if iface then
+ uci:set("travelmate", section, "trm_iface", iface)
+ uci:save("travelmate")
+ uci:commit("travelmate")
+ 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(iface)
+ fw:save("firewall")
+ fw:commit("firewall")
+ end
+ luci.sys.call("env -i /bin/ubus call network reload >/dev/null 2>&1")
end
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
end
end
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
end
btn.inputstyle = "find"
btn.disabled = false
function btn.write()
btn.inputstyle = "find"
btn.disabled = false
function btn.write()
- luci.sys.call("/etc/init.d/travelmate start >/dev/null 2>&1")
+ luci.sys.call("env -i /etc/init.d/travelmate start >/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
e1 = e:option(Value, "trm_radio", translate("Radio selection"),
translate("Restrict travelmate to a dedicated radio, e.g. 'radio0'"))
e1 = e:option(Value, "trm_radio", translate("Radio selection"),
translate("Restrict travelmate to a dedicated radio, e.g. 'radio0'"))
+e1.datatype = "and(uciname,rangelength(6,6))"
e1.rmempty = true
e2 = e:option(Value, "trm_maxretry", translate("Connection Limit"),
e1.rmempty = true
e2 = e:option(Value, "trm_maxretry", translate("Connection Limit"),
e4 = e:option(Value, "trm_timeout", translate("Overall Timeout"),
translate("Timeout in seconds between retries in 'automatic' mode"))
e4.default = 60
e4 = e:option(Value, "trm_timeout", translate("Overall Timeout"),
translate("Timeout in seconds between retries in 'automatic' mode"))
e4.default = 60
-e4.datatype = "range(5,300)"
+e4.datatype = "range(60,300)"
e4.rmempty = false
return m
e4.rmempty = false
return m
if s ~= nil then
wssid = m:field(Value, "ssid", translate("SSID"))
wssid.default = s.ssid
if s ~= nil then
wssid = m:field(Value, "ssid", translate("SSID"))
wssid.default = s.ssid
+ wssid.datatype = "rangelength(1,32)"
if s.encryption and s.key then
wkey = m:field(Value, "key", translatef("Passphrase (%s)", s.encryption))
if s.encryption and s.key then
wkey = m:field(Value, "key", translatef("Passphrase (%s)", s.encryption))
+ elseif s.encryption and s.password then
+ wkey = m:field(Value, "password", translatef("Passphrase (%s)", s.encryption))
+ end
+ if s.encryption and (s.key or s.password) then
+ wkey.default = s.key or s.password
if s.encryption == "wep" then
wkey.datatype = "wepkey"
else
if s.encryption == "wep" then
wkey.datatype = "wepkey"
else
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))
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))
+ elseif s.encryption and s.password then
+ uci:set("wireless", m.hidden.cfg, "password", wkey:formvalue(section))
end
uci:save("wireless")
uci:commit("wireless")
end
uci:save("wireless")
uci:commit("wireless")
local trmiface = uci:get("travelmate", "global", "trm_iface") or "trm_wwan"
if cfg ~= nil then
local trmiface = uci:get("travelmate", "global", "trm_iface") or "trm_wwan"
if cfg ~= nil then
local section = ""
local idx = ""
local idx_change = ""
local changed = ""
uci:foreach("wireless", "wifi-iface", function(s)
local section = ""
local idx = ""
local idx_change = ""
local changed = ""
uci:foreach("wireless", "wifi-iface", function(s)
+ local iface = s.network or ""
if iface == trmiface then
section = s['.name']
if cfg == section then
if iface == trmiface then
section = s['.name']
if cfg == section then
<%-
local write = io.write
<%-
local write = io.write
- local uci = require "luci.model.uci".cursor()
+ local uci = require("luci.model.uci").cursor()
local trmiface = uci:get("travelmate", "global", "trm_iface") or "trm_wwan"
-%>
local trmiface = uci:get("travelmate", "global", "trm_iface") or "trm_wwan"
-%>
uci:foreach("wireless", "wifi-iface", function(s)
local iface = s.network or ""
if iface == trmiface then
uci:foreach("wireless", "wifi-iface", function(s)
local iface = s.network or ""
if iface == trmiface then
- local section = s['.name']
+ local section = s['.name'] or ""
local device = s.device or ""
local device = s.device or ""
- local mode = s.mode or ""
local ssid = s.ssid or ""
local encryption = s.encryption or ""
local disabled = s.disabled or ""
local ssid = s.ssid or ""
local encryption = s.encryption or ""
local disabled = s.disabled or ""
- local sys = require "luci.sys"
- local utl = require "luci.util"
+ local sys = require("luci.sys")
+ local utl = require("luci.util")
local dev = luci.http.formvalue("device")
local iw = luci.sys.wifi.getiwinfo(dev)
local dev = luci.http.formvalue("device")
local iw = luci.sys.wifi.getiwinfo(dev)
function percent_wifi_signal(info)
local qc = info.quality or 0
local qm = info.quality_max or 0
function percent_wifi_signal(info)
local qc = info.quality or 0
local qm = info.quality_max or 0
- if info.bssid and qc > 0 and qm > 0 then
+ if info.ssid and qc > 0 and qm > 0 then
return math.floor((100 / qm) * qc)
else
return 0
return math.floor((100 / qm) * qc)
else
return 0
<th class="cbi-section-table-cell" style="text-align:left"><%:Encryption%></th>
<th class="cbi-section-table-cell" style="text-align:left" colspan="2"><%:Signal strength%></th>
</tr>
<th class="cbi-section-table-cell" style="text-align:left"><%:Encryption%></th>
<th class="cbi-section-table-cell" style="text-align:left" colspan="2"><%:Signal strength%></th>
</tr>
- <% for i, net in ipairs(iw.scanlist or { }) do%>
+ <% for i, net in ipairs(iw.scanlist or { }) do %>
<tr class="cbi-section-table-row cbi-rowstyle-1">
<td class="cbi-value-field" style="text-align:left">
<strong><%=net.ssid and utl.pcdata(net.ssid) or "<em>%s</em>" % translate("hidden")%></strong>
<tr class="cbi-section-table-row cbi-rowstyle-1">
<td class="cbi-value-field" style="text-align:left">
<strong><%=net.ssid and utl.pcdata(net.ssid) or "<em>%s</em>" % translate("hidden")%></strong>