mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-07-28 03:01:54 +08:00
127 lines
2.6 KiB
Lua
127 lines
2.6 KiB
Lua
|
|
local type, pairs, ipairs, table, luci, math
|
|
= type, pairs, ipairs, table, luci, math
|
|
|
|
local tpl = require "luci.template.parser"
|
|
local utl = require "luci.util"
|
|
local uci = require "luci.model.uci"
|
|
local fs = require "nixio.fs"
|
|
module "luci.tools.dnscrypt"
|
|
|
|
local uci_r, uci_s
|
|
local dsec, dlst = "dnscrypt", "resolvers"
|
|
local dglb, dsrc = "source", "urls"
|
|
|
|
function _valid_id(x)
|
|
return (x and #x > 0 and x:match("^[a-zA-Z0-9_]+$"))
|
|
end
|
|
|
|
function _get(c, s, o)
|
|
return uci_r:get(c, s, o)
|
|
end
|
|
|
|
function _set(c, s, o, v)
|
|
if v ~= nil then
|
|
if type(v) == "boolean" then v = v and "1" or "0" end
|
|
return uci_r:set(c, s, o, v)
|
|
else
|
|
return uci_r:delete(c, s, o)
|
|
end
|
|
end
|
|
|
|
function typicalcfg(self, cfg)
|
|
local dnscrypt_types, all_val, k, t = {"source", "dnscrypt"}, uci_r:get_all(cfg)
|
|
if not all_val then return true end
|
|
for k, t in pairs(all_val) do
|
|
if not luci.util.contains(dnscrypt_types, t[".type"]) then return false end
|
|
end
|
|
return true
|
|
end
|
|
|
|
function resolvers_list(self, with_src)
|
|
local _, cfg, r = nil, nil, { }
|
|
for cfg in (fs.glob(uci_r:get_confdir() .. "/*")) do
|
|
cfg=fs.basename(cfg)
|
|
uci_r:foreach(cfg, dsec,
|
|
function(s)
|
|
if s.name and s.stamp and s.proto and s.country then
|
|
local src = uci_r:get_first(cfg, dglb, dsrc)
|
|
r[#r+1] = with_src and "%s|%s" %{cfg, src or "Unknown"} or cfg
|
|
end
|
|
return false
|
|
end)
|
|
end
|
|
return r
|
|
end
|
|
|
|
function country_list(self)
|
|
local _, cfg, r = nil, nil, { }
|
|
for _, cfg in pairs(self:resolvers_list(false)) do
|
|
uci_r:foreach(cfg, dsec,
|
|
function(s)
|
|
if s.country then
|
|
r[s.country] = s.country
|
|
end
|
|
end)
|
|
end
|
|
return r
|
|
end
|
|
|
|
function proto_list(self)
|
|
local _, cfg, r = nil, nil, { }
|
|
for _, cfg in pairs(self:resolvers_list(false)) do
|
|
uci_r:foreach(cfg, dsec,
|
|
function(s)
|
|
if s.proto then
|
|
r[s.proto] = s.proto
|
|
end
|
|
end)
|
|
end
|
|
return r
|
|
end
|
|
|
|
function dns_list(self, rf, cf, prf)
|
|
local _, cfg, r = nil, nil, { }
|
|
for _, cfg in pairs(self:resolvers_list(false)) do
|
|
uci_r:foreach(cfg, dsec,
|
|
function(s)
|
|
if rf and cfg ~= rf then return false end
|
|
if s.name and s.stamp and s.proto then
|
|
if cf and cf ~= s.country then return true end
|
|
if prf and prf ~= s.proto then return true end
|
|
r[#r+1] = {
|
|
['resolver'] = cfg,
|
|
['proto'] = s.proto,
|
|
['country'] = s.country,
|
|
['name'] = s.name,
|
|
['stamp'] = s.stamp,
|
|
['addrs'] = s.addrs,
|
|
['ports'] = s.ports,
|
|
}
|
|
end
|
|
end)
|
|
end
|
|
return r
|
|
end
|
|
|
|
function init(cursor)
|
|
uci_r = cursor or uci_r or uci.cursor()
|
|
uci_s = uci_r:substate()
|
|
|
|
return _M
|
|
end
|
|
|
|
function save(self, ...)
|
|
uci_r:save(...)
|
|
uci_r:load(...)
|
|
end
|
|
|
|
function commit(self, ...)
|
|
uci_r:commit(...)
|
|
uci_r:load(...)
|
|
end
|
|
|
|
function get_defaults()
|
|
return defaults()
|
|
end
|