74 lines
1.9 KiB
Lua
Executable File
74 lines
1.9 KiB
Lua
Executable File
#!/usr/bin/lua
|
|
|
|
local json = require("luci.jsonc")
|
|
|
|
local function uci(cmd)
|
|
local h = io.popen("uci " .. cmd .. " 2>&1")
|
|
local out = h:read("*a")
|
|
local ok = h:close()
|
|
return ok, out
|
|
end
|
|
|
|
local function next_uplink_index()
|
|
local h = io.popen("uci show wireless 2>/dev/null | grep -o 'trm_uplink[0-9]*' | grep -o '[0-9]*'")
|
|
local used = {}
|
|
for n in h:lines() do used[tonumber(n)] = true end
|
|
h:close()
|
|
local i = 0
|
|
while used[i] do i = i + 1 end
|
|
return i
|
|
end
|
|
|
|
io.write("Content-Type: application/json\r\n\r\n")
|
|
|
|
local body = io.read("*a") or ""
|
|
local req = json.parse(body)
|
|
|
|
if not req or not req.ssid or req.ssid == "" then
|
|
io.write(json.stringify({ ok = false, error = "missing ssid" }))
|
|
os.exit(0)
|
|
end
|
|
|
|
local ssid = req.ssid
|
|
local key = req.key
|
|
local secured = req.secured and true or false
|
|
|
|
if secured and (not key or key == "") then
|
|
io.write(json.stringify({ ok = false, error = "secured network requires key" }))
|
|
os.exit(0)
|
|
end
|
|
|
|
local idx = next_uplink_index()
|
|
local sec = "wireless.trm_uplink" .. idx
|
|
|
|
local function q(s) return "'" .. tostring(s):gsub("'", "'\\''") .. "'" end
|
|
|
|
uci("set " .. sec .. "=wifi-iface")
|
|
uci("set " .. sec .. ".device='radio0'")
|
|
uci("set " .. sec .. ".mode='sta'")
|
|
uci("set " .. sec .. ".network='tm_wwan'")
|
|
uci("set " .. sec .. ".ssid=" .. q(ssid))
|
|
uci("set " .. sec .. ".disabled='0'")
|
|
if secured then
|
|
uci("set " .. sec .. ".encryption='psk2+ccmp'")
|
|
uci("set " .. sec .. ".key=" .. q(key))
|
|
else
|
|
uci("set " .. sec .. ".encryption='none'")
|
|
end
|
|
|
|
local up = "travelmate.trm_uplink" .. idx
|
|
uci("set " .. up .. "=uplink")
|
|
uci("set " .. up .. ".device='radio0'")
|
|
uci("set " .. up .. ".ssid=" .. q(ssid))
|
|
uci("set " .. up .. ".enabled='1'")
|
|
|
|
local ok_w = uci("commit wireless")
|
|
local ok_t = uci("commit travelmate")
|
|
|
|
io.write(json.stringify({
|
|
ok = (ok_w and ok_t) and true or false,
|
|
ssid = ssid,
|
|
section = "trm_uplink" .. idx,
|
|
secured = secured,
|
|
}))
|