--- 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 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"
+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_wpa = {"wpa", "wpa2", "wpa-mixed"}
wpa_version = http.formvalue("wpa_version")
}
-if m.hidden.ssid ~= "" then
- wssid = m:field(Value, "ssid", translate("SSID"))
- wssid.datatype = "rangelength(1,32)"
- wssid.default = m.hidden.ssid or ""
-else
+if m.hidden.ssid == "" then
wssid = m:field(Value, "ssid", translate("SSID (hidden)"))
+else
+ wssid = m:field(Value, "ssid", translate("SSID"))
end
+wssid.datatype = "rangelength(1,32)"
+wssid.default = m.hidden.ssid or ""
nobssid = m:field(Flag, "no_bssid", translate("Ignore BSSID"))
-nobssid.default = nobssid.enabled
+if m.hidden.ssid == "" then
+ nobssid.default = nobssid.disabled
+else
+ nobssid.default = nobssid.enabled
+end
-bssid = m:field(Value, "bssid", translate("BSSID"))
+bssid = m:field(Value, "bssid", translate("BSSID"),
+ translatef("The BSSID information '%s' is optional and only required for hidden networks", m.hidden.bssid or ""))
bssid:depends("no_bssid", 0)
bssid.datatype = "macaddr"
bssid.default = m.hidden.bssid or ""
authentication:value("EAP-MD5")
authentication:value("EAP-MSCHAPV2")
authentication:value("EAP-TLS")
+ authentication:value("auth=PAP")
+ authentication:value("auth=MSCHAPV2")
authentication.default = "EAP-MSCHAPV2"
ident = m:field(Value, "identity", translate("Identity"))
end
end
+local login_section = (m.hidden.ssid or "") .. (m.hidden.bssid or "")
+login_section = login_section:gsub("[^%w_]", "_")
+local cmd = uci:get("travelmate", login_section, "command")
+cmd_list = m:field(ListValue, "cmdlist", translate("Auto Login Script"),
+ translate("External script reference which will be called for automated captive portal logins."))
+cmd_list:value("none")
+for _, z in ipairs(scripts) do
+ cmd_list:value(z)
+end
+cmd_list.default = cmd or "none"
+
function wssid.write(self, section, value)
newsection = uci:section("wireless", "wifi-iface", nil, {
mode = "sta",
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
+ uci:set("travelmate", login_section, "login")
+ end
+ if uci:get("travelmate", login_section) then
+ uci:set("travelmate", login_section, "command", cmd_list:formvalue(section))
+ uci:save("travelmate")
+ uci:commit("travelmate")
+ end
uci:save("wireless")
uci:commit("wireless")
+ luci.sys.call("env -i /bin/ubus call network reload >/dev/null 2>&1")
http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations"))
end