local util = require("luci.util")
local scripts = util.split(util.trim(util.exec("ls /etc/travelmate/*.login 2>/dev/null")), "\n", nil, true) or {}
local trmiface = uci:get("travelmate", "global", "trm_iface") or "trm_wwan"
-local encr_psk = {"psk", "psk2", "psk-mixed"}
+local encr_psk = {"psk", "psk2", "psk-mixed", "sae", "owe", "sae-mixed"}
local encr_wpa = {"wpa", "wpa2", "wpa-mixed"}
m = SimpleForm("add", translate("Add Wireless Uplink Configuration"))
device = http.formvalue("device"),
ssid = http.formvalue("ssid"),
bssid = http.formvalue("bssid"),
- wep = http.formvalue("wep"),
+ description = http.formvalue("description"),
+ wep = tonumber(http.formvalue("wep")) or 0,
wpa_suites = http.formvalue("wpa_suites"),
- wpa_version = http.formvalue("wpa_version")
+ wpa_version = tonumber(http.formvalue("wpa_version")) or 0
}
+if m.hidden.wpa_version == 4 then
+ if string.find(m.hidden.description, "OWE") then
+ m.hidden.wpa_version = 5
+ end
+end
+
if m.hidden.ssid == "" then
wssid = m:field(Value, "ssid", translate("SSID (hidden)"))
else
bssid.datatype = "macaddr"
bssid.default = m.hidden.bssid or ""
-if (tonumber(m.hidden.wep) or 0) == 1 then
+if m.hidden.wep == 1 then
encr = m:field(ListValue, "encryption", translate("Encryption"))
encr:value("wep", "WEP")
encr:value("wep+open", "WEP Open System")
wkey = m:field(Value, "key", translate("WEP-Passphrase"))
wkey.password = true
wkey.datatype = "wepkey"
-elseif (tonumber(m.hidden.wpa_version) or 0) > 0 then
- if m.hidden.wpa_suites == "PSK" or m.hidden.wpa_suites == "PSK2" then
- encr = m:field(ListValue, "encryption", translate("Encryption"))
- encr:value("psk", "WPA PSK")
- encr:value("psk-mixed", "WPA/WPA2 mixed")
- encr:value("psk2", "WPA2 PSK")
- encr.default = encr_psk[tonumber(m.hidden.wpa_version)] or "psk2"
-
- ciph = m:field(ListValue, "cipher", translate("Cipher"))
- ciph:value("auto", translate("Automatic"))
- ciph:value("ccmp", translate("Force CCMP (AES)"))
- ciph:value("tkip", translate("Force TKIP"))
- ciph:value("tkip+ccmp", translate("Force TKIP and CCMP (AES)"))
- ciph.default = "auto"
-
- wkey = m:field(Value, "key", translate("WPA-Passphrase"))
- wkey.password = true
- wkey.datatype = "wpakey"
- elseif m.hidden.wpa_suites == "802.1X" then
+elseif m.hidden.wpa_version > 0 then
+ if m.hidden.wpa_suites == "802.1X" then
encr = m:field(ListValue, "encryption", translate("Encryption"))
encr:value("wpa", "WPA Enterprise")
encr:value("wpa-mixed", "WPA/WPA2 Enterprise mixed")
encr:value("wpa2", "WPA2 Enterprise")
- encr.default = encr_wpa[tonumber(m.hidden.wpa_version)] or "wpa2"
+ encr.default = encr_wpa[m.hidden.wpa_version] or "wpa2"
ciph = m:field(ListValue, "cipher", translate("Cipher"))
ciph:value("auto", translate("Automatic"))
privkeypwd.datatype = "wpakey"
privkeypwd.password = true
privkeypwd.rmempty = true
+ else
+ encr = m:field(ListValue, "encryption", translate("Encryption"))
+ encr:value("psk", "WPA-PSK")
+ encr:value("psk2", "WPA2-PSK")
+ encr:value("psk-mixed", "WPA/WPA2 mixed")
+ encr:value("sae", "WPA3-SAE")
+ encr:value("owe", "OWE (open network)")
+ encr:value("sae-mixed", "WPA2/WPA3 mixed")
+ encr.default = encr_psk[m.hidden.wpa_version] or "psk2"
+
+ ciph = m:field(ListValue, "cipher", translate("Cipher"))
+ ciph:value("auto", translate("Automatic"))
+ ciph:value("ccmp", translate("Force CCMP (AES)"))
+ ciph:value("tkip", translate("Force TKIP"))
+ ciph:value("tkip+ccmp", translate("Force TKIP and CCMP (AES)"))
+ ciph:depends("encryption", "psk")
+ ciph:depends("encryption", "psk2")
+ ciph:depends("encryption", "psk-mixed")
+ ciph.default = "auto"
+
+ wkey = m:field(Value, "key", translate("WPA-Passphrase"))
+ wkey.password = true
+ wkey.datatype = "wpakey"
+ wkey:depends("encryption", "psk")
+ wkey:depends("encryption", "psk2")
+ wkey:depends("encryption", "psk-mixed")
+ wkey:depends("encryption", "sae")
+ wkey:depends("encryption", "sae-mixed")
end
end
cmd_list = m:field(ListValue, "cmdlist", translate("Auto Login Script"),
translate("External script reference which will be called for automated captive portal logins."))
cmd_args = m:field(Value, "cmdargs", translate("Optional Arguments"),
- translate("Space separated list of additional optional arguments passed to the Auto Login Script, i.e. username and password"))
+ translate("Space separated list of additional arguments passed to the Auto Login Script, i.e. username and password"))
for _, z in ipairs(scripts) do
cmd_list:value(z)
cmd_args:depends("cmdlist", z)
cmd_args.default = cmd_args_default
function wssid.write(self, section, value)
- newsection = uci:section("wireless", "wifi-iface", nil, {
+ newsection = uci:section("wireless", "wifi-iface", "trm_" .. login_section, {
mode = "sta",
network = trmiface,
device = m.hidden.device,
disabled = "1"
})
- if (tonumber(m.hidden.wep) or 0) == 1 then
- uci:set("wireless", newsection, "encryption", encr:formvalue(section))
- uci:set("wireless", newsection, "key", wkey:formvalue(section) or "")
- elseif (tonumber(m.hidden.wpa_version) or 0) > 0 then
- if m.hidden.wpa_suites == "PSK" or m.hidden.wpa_suites == "PSK2" then
- if ciph:formvalue(section) ~= "auto" then
- uci:set("wireless", newsection, "encryption", encr:formvalue(section) .. "+" .. ciph:formvalue(section))
- else
- uci:set("wireless", newsection, "encryption", encr:formvalue(section))
- end
+ if encr:formvalue(section) then
+ if string.find(encr:formvalue(section), '^wep') then
+ uci:set("wireless", newsection, "encryption", encr:formvalue(section))
uci:set("wireless", newsection, "key", wkey:formvalue(section) or "")
- elseif m.hidden.wpa_suites == "802.1X" then
- if ciph:formvalue(section) ~= "auto" then
- uci:set("wireless", newsection, "encryption", encr:formvalue(section) .. "+" .. ciph:formvalue(section))
- else
- uci:set("wireless", newsection, "encryption", encr:formvalue(section))
- end
+ elseif string.find(encr:formvalue(section), '^wpa') then
uci:set("wireless", newsection, "eap_type", eaptype:formvalue(section))
uci:set("wireless", newsection, "auth", authentication:formvalue(section))
uci:set("wireless", newsection, "identity", ident:formvalue(section) or "")
uci:set("wireless", newsection, "client_cert", clientcert:formvalue(section) or "")
uci:set("wireless", newsection, "priv_key", privkey:formvalue(section) or "")
uci:set("wireless", newsection, "priv_key_pwd", privkeypwd:formvalue(section) or "")
+ elseif encr:formvalue(section) ~= "owe" then
+ uci:set("wireless", newsection, "key", wkey:formvalue(section) or "")
+ end
+ if ciph:formvalue(section) and ciph:formvalue(section) ~= "auto" then
+ uci:set("wireless", newsection, "encryption", encr:formvalue(section) .. "+" .. ciph:formvalue(section))
+ else
+ uci:set("wireless", newsection, "encryption", encr:formvalue(section))
end
else
uci:set("wireless", newsection, "encryption", "none")
end
+
local login_section = (wssid:formvalue(section) or "") .. (bssid:formvalue(section) or "")
login_section = login_section:gsub("[^%w_]", "_")
if not uci:get("travelmate", login_section) and cmd_list:formvalue(section) ~= "none" then
bssid.datatype = "macaddr"
bssid.default = s.bssid or ""
- s.cipher = "auto"
if string.match(s.encryption, '%+') and not string.match(s.encryption, '^wep') then
s.pos = string.find(s.encryption, '%+')
s.cipher = string.sub(s.encryption, s.pos + 1)
wkey = m:field(Value, "key", translate("Passphrase"))
wkey.datatype = "wepkey"
- elseif string.match(s.encryption, '^psk') then
- encr = m:field(ListValue, "encryption", translate("Encryption"))
- encr:value("psk", "WPA PSK")
- encr:value("psk-mixed", "WPA/WPA2 mixed")
- encr:value("psk2", "WPA2 PSK")
- encr.default = s.encryption
-
- ciph = m:field(ListValue, "cipher", translate("Cipher"))
- ciph:value("auto", translate("Automatic"))
- ciph:value("ccmp", translate("Force CCMP (AES)"))
- ciph:value("tkip", translate("Force TKIP"))
- ciph:value("tkip+ccmp", translate("Force TKIP and CCMP (AES)"))
- ciph.default = s.cipher
-
- wkey = m:field(Value, "key", translate("Passphrase"))
- wkey.datatype = "wpakey"
elseif string.match(s.encryption, '^wpa') then
encr = m:field(ListValue, "encryption", translate("Encryption"))
encr:value("wpa", "WPA Enterprise")
wkey = m:field(Value, "password", translate("Passphrase"))
wkey.datatype = "wpakey"
+ wkey.password = true
+ wkey.default = s.password
cacert = m:field(Value, "ca_cert", translate("Path to CA-Certificate"))
cacert.rmempty = true
privkeypwd.password = true
privkeypwd.rmempty = true
privkeypwd.default = s.priv_key_pwd or ""
+ else
+ encr = m:field(ListValue, "encryption", translate("Encryption"))
+ encr:value("psk", "WPA-PSK")
+ encr:value("psk2", "WPA2-PSK")
+ encr:value("psk-mixed", "WPA/WPA2 mixed")
+ encr:value("sae", "WPA3-SAE")
+ encr:value("owe", "OWE (open network)")
+ encr:value("sae-mixed", "WPA2/WPA3 mixed")
+ encr.default = s.encryption
+
+ ciph = m:field(ListValue, "cipher", translate("Cipher"))
+ ciph:value("auto", translate("Automatic"))
+ ciph:value("ccmp", translate("Force CCMP (AES)"))
+ ciph:value("tkip", translate("Force TKIP"))
+ ciph:value("tkip+ccmp", translate("Force TKIP and CCMP (AES)"))
+ ciph:depends("encryption", "psk")
+ ciph:depends("encryption", "psk2")
+ ciph:depends("encryption", "psk-mixed")
+ ciph.default = s.cipher or "auto"
+
+ wkey = m:field(Value, "key", translate("Passphrase"))
+ wkey.datatype = "wpakey"
+ wkey.password = true
+ wkey:depends("encryption", "psk")
+ wkey:depends("encryption", "psk2")
+ wkey:depends("encryption", "psk-mixed")
+ wkey:depends("encryption", "sae")
+ wkey:depends("encryption", "sae-mixed")
+ wkey.default = s.key
end
- wkey.password = true
- wkey.default = s.key or s.password
end
local login_section = (s.ssid or "") .. (s.bssid or "")
cmd_list = m:field(ListValue, "cmdlist", translate("Auto Login Script"),
translate("External script reference which will be called for automated captive portal logins."))
cmd_args = m:field(Value, "cmdargs", translate("Optional Arguments"),
- translate("Space separated list of additional optional arguments passed to the Auto Login Script, i.e. username and password"))
+ translate("Space separated list of additional arguments passed to the Auto Login Script, i.e. username and password"))
for _, z in ipairs(scripts) do
cmd_list:value(z)
cmd_args:depends("cmdlist", z)
function wssid.write(self, section, value)
uci:set("wireless", m.hidden.cfg, "ssid", wssid:formvalue(section))
uci:set("wireless", m.hidden.cfg, "bssid", bssid:formvalue(section))
- if s.encryption and s.encryption ~= "none" then
- if string.match(s.encryption, '^wep') then
+ if encr:formvalue(section) then
+ if string.find(encr:formvalue(section), '^wep') then
uci:set("wireless", m.hidden.cfg, "encryption", encr:formvalue(section))
uci:set("wireless", m.hidden.cfg, "key", wkey:formvalue(section) or "")
- elseif string.match(s.encryption, '^psk') then
- if ciph:formvalue(section) ~= "auto" then
- uci:set("wireless", m.hidden.cfg, "encryption", encr:formvalue(section) .. "+" .. ciph:formvalue(section))
- else
- uci:set("wireless", m.hidden.cfg, "encryption", encr:formvalue(section))
- end
- uci:set("wireless", m.hidden.cfg, "key", wkey:formvalue(section) or "")
- elseif string.match(s.encryption, '^wpa') then
- if ciph:formvalue(section) ~= "auto" then
- uci:set("wireless", m.hidden.cfg, "encryption", encr:formvalue(section) .. "+" .. ciph:formvalue(section))
- else
- uci:set("wireless", m.hidden.cfg, "encryption", encr:formvalue(section))
- end
+ elseif string.find(encr:formvalue(section), '^wpa') then
uci:set("wireless", m.hidden.cfg, "eap_type", eaptype:formvalue(section))
uci:set("wireless", m.hidden.cfg, "auth", authentication:formvalue(section))
uci:set("wireless", m.hidden.cfg, "identity", ident:formvalue(section) or "")
uci:set("wireless", m.hidden.cfg, "priv_key", privkey:formvalue(section) or "")
uci:set("wireless", m.hidden.cfg, "priv_key_pwd", privkeypwd:formvalue(section) or "")
end
+ if encr:formvalue(section) ~= "owe" then
+ uci:set("wireless", m.hidden.cfg, "key", wkey:formvalue(section) or "")
+ end
+ if ciph:formvalue(section) and ciph:formvalue(section) ~= "auto" then
+ uci:set("wireless", m.hidden.cfg, "encryption", encr:formvalue(section) .. "+" .. ciph:formvalue(section))
+ else
+ uci:set("wireless", m.hidden.cfg, "encryption", encr:formvalue(section))
+ end
end
local login_section = (wssid:formvalue(section) or "") .. (bssid:formvalue(section) or "")
login_section = login_section:gsub("[^%w_]", "_")
<%#
-Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
+Copyright 2017-2019 Dirk Brenken (dev@brenken.org)
This is free software, licensed under the Apache License, Version 2.0
-%>
input = json.data.faulty_stations;
view.innerHTML = input || "-";
view = document.getElementById("value_6");
+ input = json.data.wpa_capabilities;
+ view.innerHTML = input || "-";
+ view = document.getElementById("value_7");
input = json.data.last_rundate;
view.innerHTML = input || "-";
}
</div>
</div>
<div class="cbi-value" id="status_6">
- <label class="cbi-value-title" for="status_6"><%:Last Run%></label>
+ <label class="cbi-value-title" for="status_6"><%:WPA Capabilities%></label>
<div class="cbi-value-field">
<span class="runtime" id="value_6">-</span>
</div>
</div>
+<div class="cbi-value" id="status_7">
+ <label class="cbi-value-title" for="status_7"><%:Last Run%></label>
+ <div class="cbi-value-field">
+ <span class="runtime" id="value_7">-</span>
+ </div>
+</div>
<hr />
<div class="cbi-value" id="button_1">
<label class="cbi-value-title" for="button_1"><%:Restart Travelmate%></label>
<%#
-Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
+Copyright 2017-2019 Dirk Brenken (dev@brenken.org)
This is free software, licensed under the Apache License, Version 2.0
-%>
<%-
- local sys = require("luci.sys")
- local utl = require("luci.util")
- local dev = luci.http.formvalue("device")
- local iw = luci.sys.wifi.getiwinfo(dev)
- local label = {translate("WPA"), translate("WPA2"), translate("WPA/WPA2")}
+ local sys = require("luci.sys")
+ local utl = require("luci.util")
+ local dev = luci.http.formvalue("device")
+ local iw = luci.sys.wifi.getiwinfo(dev)
if not iw then
luci.http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations"))
end
- function format_wifi_encryption(info)
- if info.wep == true then
- return translate("WEP")
- elseif info.wpa > 0 then
- return "%s (%s/%s)" %{label[info.wpa] or translate("Unknown"), table.concat(info.auth_suites), table.concat(info.group_ciphers)}
- elseif info.enabled then
- return translate("Unknown")
- else
- return translate("Open")
- end
- end
-
function percent_wifi_signal(info)
local qc = info.quality or 0
local qm = info.quality_max or 0
<%=net.bssid and utl.pcdata(net.bssid)%>
</div>
<div class="td left" style="text-align: left !important">
- <%=format_wifi_encryption(net.encryption)%>
+ <%=net.encryption.description%>
</div>
<div class="td left" style="text-align: left !important">
<%=percent_wifi_signal(net)%> %
<input type="hidden" name="device" value="<%=utl.pcdata(dev)%>"/>
<input type="hidden" name="ssid" value="<%=utl.pcdata(net.ssid)%>"/>
<input type="hidden" name="bssid" value="<%=utl.pcdata(net.bssid)%>"/>
+ <input type="hidden" name="description" value="<%=net.encryption.description%>"/>
<input type="hidden" name="wep" value="<%=net.encryption.wep and 1 or 0%>"/>
<%- if net.encryption.wpa then -%>
<input type="hidden" name="wpa_version" value="<%=net.encryption.wpa%>"/>