106 lines
2.6 KiB
Lua
106 lines
2.6 KiB
Lua
module("luci.controller.cjdns", package.seeall)
|
|
|
|
cjdns = require "cjdns/init"
|
|
dkjson = require "dkjson"
|
|
|
|
function index()
|
|
if not nixio.fs.access("/etc/config/cjdns") then
|
|
return
|
|
end
|
|
|
|
entry({"admin", "services", "cjdns"},
|
|
cbi("cjdns/overview"), _("cjdns")).dependent = true
|
|
|
|
entry({"admin", "services", "cjdns", "overview"},
|
|
cbi("cjdns/overview"), _("Overview"), 1).leaf = false
|
|
|
|
entry({"admin", "services", "cjdns", "peering"},
|
|
cbi("cjdns/peering"), _("Peers"), 2).leaf = false
|
|
|
|
entry({"admin", "services", "cjdns", "iptunnel"},
|
|
cbi("cjdns/iptunnel"), _("IP Tunnel"), 3).leaf = false
|
|
|
|
entry({"admin", "services", "cjdns", "settings"},
|
|
cbi("cjdns/settings"), _("Settings"), 4).leaf = false
|
|
|
|
entry({"admin", "services", "cjdns", "cjdrouteconf"},
|
|
cbi("cjdns/cjdrouteconf"), _("cjdroute.conf"), 5).leaf = false
|
|
|
|
entry({"admin", "services", "cjdns", "peers"}, call("act_peers")).leaf = true
|
|
entry({"admin", "services", "cjdns", "ping"}, call("act_ping")).leaf = true
|
|
end
|
|
|
|
function act_peers()
|
|
require("cjdns/uci")
|
|
admin = cjdns.uci.makeInterface()
|
|
|
|
local page = 0
|
|
local peers = {}
|
|
|
|
while page do
|
|
local response, err = admin:auth({
|
|
q = "InterfaceController_peerStats",
|
|
page = page
|
|
})
|
|
|
|
if err or response.error then
|
|
luci.http.status(502, "Bad Gateway")
|
|
luci.http.prepare_content("application/json")
|
|
luci.http.write_json({ err = err, response = response })
|
|
return
|
|
end
|
|
|
|
for i,peer in pairs(response.peers) do
|
|
peer.ipv6 = publictoip6(peer.publicKey)
|
|
if peer.user == nil then
|
|
peer.user = ''
|
|
uci.cursor():foreach("cjdns", "udp_peer", function(udp_peer)
|
|
if peer.publicKey == udp_peer.public_key then
|
|
peer.user = udp_peer.user
|
|
end
|
|
end)
|
|
end
|
|
peers[#peers + 1] = peer
|
|
end
|
|
|
|
if response.more then
|
|
page = page + 1
|
|
else
|
|
page = nil
|
|
end
|
|
end
|
|
|
|
luci.http.status(200, "OK")
|
|
luci.http.prepare_content("application/json")
|
|
luci.http.write_json(peers)
|
|
end
|
|
|
|
function act_ping()
|
|
require("cjdns/uci")
|
|
admin = cjdns.uci.makeInterface()
|
|
|
|
local response, err = admin:auth({
|
|
q = "SwitchPinger_ping",
|
|
path = luci.http.formvalue("label"),
|
|
timeout = tonumber(luci.http.formvalue("timeout"))
|
|
})
|
|
|
|
if err or response.error then
|
|
luci.http.status(502, "Bad Gateway")
|
|
luci.http.prepare_content("application/json")
|
|
luci.http.write_json({ err = err, response = response })
|
|
return
|
|
end
|
|
|
|
luci.http.status(200, "OK")
|
|
luci.http.prepare_content("application/json")
|
|
luci.http.write_json(response)
|
|
end
|
|
|
|
function publictoip6(publicKey)
|
|
local process = io.popen("/usr/bin/publictoip6 " .. publicKey, "r")
|
|
local ipv6 = process:read()
|
|
process:close()
|
|
return ipv6
|
|
end
|