Merge pull request #3210 from dibdot/travelmate

luci-app-travelmate: sync with update 1.5.0
This commit is contained in:
Dirk Brenken 2019-10-18 19:02:21 +02:00 committed by GitHub
commit 29e4b397da
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 117 additions and 98 deletions

View file

@ -7,7 +7,7 @@ local http = require("luci.http")
local util = require("luci.util") 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 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 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"} local encr_wpa = {"wpa", "wpa2", "wpa-mixed"}
m = SimpleForm("add", translate("Add Wireless Uplink Configuration")) m = SimpleForm("add", translate("Add Wireless Uplink Configuration"))
@ -23,11 +23,18 @@ m.hidden = {
device = http.formvalue("device"), device = http.formvalue("device"),
ssid = http.formvalue("ssid"), ssid = http.formvalue("ssid"),
bssid = http.formvalue("bssid"), 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_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 if m.hidden.ssid == "" then
wssid = m:field(Value, "ssid", translate("SSID (hidden)")) wssid = m:field(Value, "ssid", translate("SSID (hidden)"))
else else
@ -49,7 +56,7 @@ bssid:depends("no_bssid", 0)
bssid.datatype = "macaddr" bssid.datatype = "macaddr"
bssid.default = m.hidden.bssid or "" 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 = m:field(ListValue, "encryption", translate("Encryption"))
encr:value("wep", "WEP") encr:value("wep", "WEP")
encr:value("wep+open", "WEP Open System") encr:value("wep+open", "WEP Open System")
@ -60,30 +67,13 @@ if (tonumber(m.hidden.wep) or 0) == 1 then
wkey = m:field(Value, "key", translate("WEP-Passphrase")) wkey = m:field(Value, "key", translate("WEP-Passphrase"))
wkey.password = true wkey.password = true
wkey.datatype = "wepkey" wkey.datatype = "wepkey"
elseif (tonumber(m.hidden.wpa_version) or 0) > 0 then elseif m.hidden.wpa_version > 0 then
if m.hidden.wpa_suites == "PSK" or m.hidden.wpa_suites == "PSK2" then if m.hidden.wpa_suites == "802.1X" 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
encr = m:field(ListValue, "encryption", translate("Encryption")) encr = m:field(ListValue, "encryption", translate("Encryption"))
encr:value("wpa", "WPA Enterprise") encr:value("wpa", "WPA Enterprise")
encr:value("wpa-mixed", "WPA/WPA2 Enterprise mixed") encr:value("wpa-mixed", "WPA/WPA2 Enterprise mixed")
encr:value("wpa2", "WPA2 Enterprise") 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 = m:field(ListValue, "cipher", translate("Cipher"))
ciph:value("auto", translate("Automatic")) ciph:value("auto", translate("Automatic"))
@ -134,6 +124,34 @@ elseif (tonumber(m.hidden.wpa_version) or 0) > 0 then
privkeypwd.datatype = "wpakey" privkeypwd.datatype = "wpakey"
privkeypwd.password = true privkeypwd.password = true
privkeypwd.rmempty = 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
end end
@ -144,7 +162,7 @@ local cmd_args_default = uci:get("travelmate", login_section, "command_args")
cmd_list = m:field(ListValue, "cmdlist", translate("Auto Login Script"), cmd_list = m:field(ListValue, "cmdlist", translate("Auto Login Script"),
translate("External script reference which will be called for automated captive portal logins.")) translate("External script reference which will be called for automated captive portal logins."))
cmd_args = m:field(Value, "cmdargs", translate("Optional Arguments"), 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 for _, z in ipairs(scripts) do
cmd_list:value(z) cmd_list:value(z)
cmd_args:depends("cmdlist", z) cmd_args:depends("cmdlist", z)
@ -154,7 +172,7 @@ cmd_list.default = cmd or "none"
cmd_args.default = cmd_args_default cmd_args.default = cmd_args_default
function wssid.write(self, section, value) function wssid.write(self, section, value)
newsection = uci:section("wireless", "wifi-iface", nil, { newsection = uci:section("wireless", "wifi-iface", "trm_" .. login_section, {
mode = "sta", mode = "sta",
network = trmiface, network = trmiface,
device = m.hidden.device, device = m.hidden.device,
@ -163,23 +181,11 @@ function wssid.write(self, section, value)
disabled = "1" disabled = "1"
}) })
if (tonumber(m.hidden.wep) or 0) == 1 then if encr:formvalue(section) then
uci:set("wireless", newsection, "encryption", encr:formvalue(section)) if string.find(encr:formvalue(section), '^wep') then
uci:set("wireless", newsection, "key", wkey:formvalue(section) or "") uci:set("wireless", newsection, "encryption", encr:formvalue(section))
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
uci:set("wireless", newsection, "key", wkey:formvalue(section) or "") uci:set("wireless", newsection, "key", wkey:formvalue(section) or "")
elseif m.hidden.wpa_suites == "802.1X" then elseif string.find(encr:formvalue(section), '^wpa') 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
uci:set("wireless", newsection, "eap_type", eaptype:formvalue(section)) uci:set("wireless", newsection, "eap_type", eaptype:formvalue(section))
uci:set("wireless", newsection, "auth", authentication:formvalue(section)) uci:set("wireless", newsection, "auth", authentication:formvalue(section))
uci:set("wireless", newsection, "identity", ident:formvalue(section) or "") uci:set("wireless", newsection, "identity", ident:formvalue(section) or "")
@ -188,10 +194,18 @@ function wssid.write(self, section, value)
uci:set("wireless", newsection, "client_cert", clientcert: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", privkey:formvalue(section) or "")
uci:set("wireless", newsection, "priv_key_pwd", privkeypwd: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 end
else else
uci:set("wireless", newsection, "encryption", "none") uci:set("wireless", newsection, "encryption", "none")
end end
local login_section = (wssid:formvalue(section) or "") .. (bssid:formvalue(section) or "") local login_section = (wssid:formvalue(section) or "") .. (bssid:formvalue(section) or "")
login_section = login_section:gsub("[^%w_]", "_") login_section = login_section:gsub("[^%w_]", "_")
if not uci:get("travelmate", login_section) and cmd_list:formvalue(section) ~= "none" then if not uci:get("travelmate", login_section) and cmd_list:formvalue(section) ~= "none" then

View file

@ -31,7 +31,6 @@ if s ~= nil then
bssid.datatype = "macaddr" bssid.datatype = "macaddr"
bssid.default = s.bssid or "" bssid.default = s.bssid or ""
s.cipher = "auto"
if string.match(s.encryption, '%+') and not string.match(s.encryption, '^wep') then if string.match(s.encryption, '%+') and not string.match(s.encryption, '^wep') then
s.pos = string.find(s.encryption, '%+') s.pos = string.find(s.encryption, '%+')
s.cipher = string.sub(s.encryption, s.pos + 1) s.cipher = string.sub(s.encryption, s.pos + 1)
@ -49,22 +48,6 @@ if s ~= nil then
wkey = m:field(Value, "key", translate("Passphrase")) wkey = m:field(Value, "key", translate("Passphrase"))
wkey.datatype = "wepkey" 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 elseif string.match(s.encryption, '^wpa') then
encr = m:field(ListValue, "encryption", translate("Encryption")) encr = m:field(ListValue, "encryption", translate("Encryption"))
encr:value("wpa", "WPA Enterprise") encr:value("wpa", "WPA Enterprise")
@ -104,6 +87,8 @@ if s ~= nil then
wkey = m:field(Value, "password", translate("Passphrase")) wkey = m:field(Value, "password", translate("Passphrase"))
wkey.datatype = "wpakey" wkey.datatype = "wpakey"
wkey.password = true
wkey.default = s.password
cacert = m:field(Value, "ca_cert", translate("Path to CA-Certificate")) cacert = m:field(Value, "ca_cert", translate("Path to CA-Certificate"))
cacert.rmempty = true cacert.rmempty = true
@ -125,9 +110,36 @@ if s ~= nil then
privkeypwd.password = true privkeypwd.password = true
privkeypwd.rmempty = true privkeypwd.rmempty = true
privkeypwd.default = s.priv_key_pwd or "" 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 end
wkey.password = true
wkey.default = s.key or s.password
end end
local login_section = (s.ssid or "") .. (s.bssid or "") local login_section = (s.ssid or "") .. (s.bssid or "")
@ -137,7 +149,7 @@ if s ~= nil then
cmd_list = m:field(ListValue, "cmdlist", translate("Auto Login Script"), cmd_list = m:field(ListValue, "cmdlist", translate("Auto Login Script"),
translate("External script reference which will be called for automated captive portal logins.")) translate("External script reference which will be called for automated captive portal logins."))
cmd_args = m:field(Value, "cmdargs", translate("Optional Arguments"), 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 for _, z in ipairs(scripts) do
cmd_list:value(z) cmd_list:value(z)
cmd_args:depends("cmdlist", z) cmd_args:depends("cmdlist", z)
@ -152,23 +164,11 @@ end
function wssid.write(self, section, value) function wssid.write(self, section, value)
uci:set("wireless", m.hidden.cfg, "ssid", wssid:formvalue(section)) uci:set("wireless", m.hidden.cfg, "ssid", wssid:formvalue(section))
uci:set("wireless", m.hidden.cfg, "bssid", bssid:formvalue(section)) uci:set("wireless", m.hidden.cfg, "bssid", bssid:formvalue(section))
if s.encryption and s.encryption ~= "none" then if encr:formvalue(section) then
if string.match(s.encryption, '^wep') 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, "encryption", encr:formvalue(section))
uci:set("wireless", m.hidden.cfg, "key", wkey:formvalue(section) or "") uci:set("wireless", m.hidden.cfg, "key", wkey:formvalue(section) or "")
elseif string.match(s.encryption, '^psk') then elseif string.find(encr:formvalue(section), '^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
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
uci:set("wireless", m.hidden.cfg, "eap_type", eaptype:formvalue(section)) 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, "auth", authentication:formvalue(section))
uci:set("wireless", m.hidden.cfg, "identity", ident:formvalue(section) or "") uci:set("wireless", m.hidden.cfg, "identity", ident:formvalue(section) or "")
@ -178,6 +178,14 @@ function wssid.write(self, section, value)
uci:set("wireless", m.hidden.cfg, "priv_key", privkey: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 "") uci:set("wireless", m.hidden.cfg, "priv_key_pwd", privkeypwd:formvalue(section) or "")
end 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 end
local login_section = (wssid:formvalue(section) or "") .. (bssid:formvalue(section) or "") local login_section = (wssid:formvalue(section) or "") .. (bssid:formvalue(section) or "")
login_section = login_section:gsub("[^%w_]", "_") login_section = login_section:gsub("[^%w_]", "_")

View file

@ -1,5 +1,5 @@
<%# <%#
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 This is free software, licensed under the Apache License, Version 2.0
-%> -%>
@ -28,6 +28,9 @@ This is free software, licensed under the Apache License, Version 2.0
input = json.data.faulty_stations; input = json.data.faulty_stations;
view.innerHTML = input || "-"; view.innerHTML = input || "-";
view = document.getElementById("value_6"); view = document.getElementById("value_6");
input = json.data.wpa_capabilities;
view.innerHTML = input || "-";
view = document.getElementById("value_7");
input = json.data.last_rundate; input = json.data.last_rundate;
view.innerHTML = input || "-"; view.innerHTML = input || "-";
} }
@ -128,11 +131,17 @@ This is free software, licensed under the Apache License, Version 2.0
</div> </div>
</div> </div>
<div class="cbi-value" id="status_6"> <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"> <div class="cbi-value-field">
<span class="runtime" id="value_6">-</span> <span class="runtime" id="value_6">-</span>
</div> </div>
</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 /> <hr />
<div class="cbi-value" id="button_1"> <div class="cbi-value" id="button_1">
<label class="cbi-value-title" for="button_1"><%:Restart Travelmate%></label> <label class="cbi-value-title" for="button_1"><%:Restart Travelmate%></label>

View file

@ -1,31 +1,18 @@
<%# <%#
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 This is free software, licensed under the Apache License, Version 2.0
-%> -%>
<%- <%-
local sys = require("luci.sys") local sys = require("luci.sys")
local utl = require("luci.util") local utl = require("luci.util")
local dev = luci.http.formvalue("device") local dev = luci.http.formvalue("device")
local iw = luci.sys.wifi.getiwinfo(dev) local iw = luci.sys.wifi.getiwinfo(dev)
local label = {translate("WPA"), translate("WPA2"), translate("WPA/WPA2")}
if not iw then if not iw then
luci.http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations")) luci.http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations"))
end 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) function percent_wifi_signal(info)
local qc = info.quality or 0 local qc = info.quality or 0
local qm = info.quality_max or 0 local qm = info.quality_max or 0
@ -59,7 +46,7 @@ This is free software, licensed under the Apache License, Version 2.0
<%=net.bssid and utl.pcdata(net.bssid)%> <%=net.bssid and utl.pcdata(net.bssid)%>
</div> </div>
<div class="td left" style="text-align: left !important"> <div class="td left" style="text-align: left !important">
<%=format_wifi_encryption(net.encryption)%> <%=net.encryption.description%>
</div> </div>
<div class="td left" style="text-align: left !important"> <div class="td left" style="text-align: left !important">
<%=percent_wifi_signal(net)%> % <%=percent_wifi_signal(net)%> %
@ -70,6 +57,7 @@ This is free software, licensed under the Apache License, Version 2.0
<input type="hidden" name="device" value="<%=utl.pcdata(dev)%>"/> <input type="hidden" name="device" value="<%=utl.pcdata(dev)%>"/>
<input type="hidden" name="ssid" value="<%=utl.pcdata(net.ssid)%>"/> <input type="hidden" name="ssid" value="<%=utl.pcdata(net.ssid)%>"/>
<input type="hidden" name="bssid" value="<%=utl.pcdata(net.bssid)%>"/> <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%>"/> <input type="hidden" name="wep" value="<%=net.encryption.wep and 1 or 0%>"/>
<%- if net.encryption.wpa then -%> <%- if net.encryption.wpa then -%>
<input type="hidden" name="wpa_version" value="<%=net.encryption.wpa%>"/> <input type="hidden" name="wpa_version" value="<%=net.encryption.wpa%>"/>