treewide: fix luacheck warnings
This commit is contained in:
parent
80b6e7f18f
commit
4249d65af7
@ -5,7 +5,7 @@ local file = '/etc/dropbear/authorized_keys'
|
||||
|
||||
local keys = {}
|
||||
|
||||
function load_keys()
|
||||
local function load_keys()
|
||||
for line in io.lines(file) do
|
||||
keys[line] = true
|
||||
end
|
||||
|
@ -2,8 +2,6 @@ return function(form, uci)
|
||||
local pkg_i18n = i18n 'gluon-config-mode-contact-info'
|
||||
local site_i18n = i18n 'gluon-site'
|
||||
|
||||
local site = require 'gluon.site'
|
||||
|
||||
local owner = uci:get_first("gluon-node-info", "owner")
|
||||
|
||||
local help = site_i18n._translate("gluon-config-mode:contact-help") or pkg_i18n.translate(
|
||||
|
@ -7,7 +7,8 @@ return function(form, uci)
|
||||
local util = require 'gluon.util'
|
||||
|
||||
local selected_domain = uci:get('gluon', 'core', 'domain')
|
||||
local configured = uci:get_first('gluon-setup-mode','setup_mode', 'configured') == '1' or (selected_domain ~= site.default_domain())
|
||||
local configured = uci:get_first('gluon-setup-mode','setup_mode', 'configured') == '1' or
|
||||
(selected_domain ~= site.default_domain())
|
||||
|
||||
local function hide_domain_code(domain, code)
|
||||
if configured and code == selected_domain then
|
||||
|
@ -9,7 +9,8 @@ M.MapValue = osm.MapValue
|
||||
function M.help(i18n)
|
||||
local pkg_i18n = i18n 'gluon-config-mode-geo-location-osm'
|
||||
return pkg_i18n.translate(
|
||||
'You may also select the position on the map displayed below if your computer is connected to the internet at the moment.'
|
||||
'You may also select the position on the map displayed below '
|
||||
.. 'if your computer is connected to the internet at the moment.'
|
||||
)
|
||||
end
|
||||
|
||||
|
@ -43,7 +43,7 @@ return function(form, uci)
|
||||
end
|
||||
end
|
||||
|
||||
local map = {}
|
||||
local map
|
||||
if osm then
|
||||
map = s:option(osm.MapValue, "map", osm.options())
|
||||
map:depends(share_location, true)
|
||||
@ -56,7 +56,9 @@ return function(form, uci)
|
||||
function o:write(data)
|
||||
uci:set("gluon-node-info", location, "latitude", data)
|
||||
end
|
||||
map.lat = o
|
||||
if osm then
|
||||
map.lat = o
|
||||
end
|
||||
|
||||
o = s:option(Value, "longitude", pkg_i18n.translate("Longitude"), pkg_i18n.translatef("e.g. %s", "10.689901"))
|
||||
o.default = uci:get("gluon-node-info", location, "longitude")
|
||||
@ -65,7 +67,9 @@ return function(form, uci)
|
||||
function o:write(data)
|
||||
uci:set("gluon-node-info", location, "longitude", data)
|
||||
end
|
||||
map.lon = o
|
||||
if osm then
|
||||
map.lon = o
|
||||
end
|
||||
|
||||
if show_altitude then
|
||||
o = s:option(Value, "altitude",
|
||||
|
@ -14,7 +14,8 @@ return function(form, uci)
|
||||
|
||||
local current_hostname = pretty_hostname.get(uci)
|
||||
local default_hostname = util.default_hostname()
|
||||
local configured = uci:get_first('gluon-setup-mode', 'setup_mode', 'configured', false) or (current_hostname ~= default_hostname)
|
||||
local configured = uci:get_first('gluon-setup-mode', 'setup_mode', 'configured', false) or
|
||||
(current_hostname ~= default_hostname)
|
||||
|
||||
local s = form:section(Section)
|
||||
local o = s:option(Value, "hostname", pkg_i18n.translate("Node name"))
|
||||
|
@ -8,7 +8,6 @@ if sysconfig.lan_ifname or sysconfig.wan_ifname then
|
||||
end
|
||||
|
||||
|
||||
local util = require 'gluon.util'
|
||||
local platform = require 'gluon.platform'
|
||||
local site = require 'gluon.site'
|
||||
|
||||
|
@ -15,7 +15,7 @@ local sysconfig = require 'gluon.sysconfig'
|
||||
local platform = require 'gluon.platform'
|
||||
|
||||
local config = site.wifi5.outdoors('preset')
|
||||
local outdoor = false
|
||||
local outdoor
|
||||
|
||||
if sysconfig.gluon_version then
|
||||
-- don't enable the outdoor mode after an upgrade
|
||||
|
@ -16,14 +16,12 @@ if not sysconfig.gluon_version then
|
||||
-- capable of operating in the 2.4 GHz and 5 GHz band need
|
||||
-- to be distributed evenly.
|
||||
local radio_band_count = {band24=0, band5=0}
|
||||
util.foreach_radio(uci, function(radio, index, config)
|
||||
util.foreach_radio(uci, function(radio)
|
||||
local hwmodes = iwinfo.nl80211.hwmodelist(util.find_phy(radio))
|
||||
if (hwmodes.a or hwmodes.ac) and hwmodes.g then
|
||||
-- Dualband - do nothing in this step
|
||||
elseif hwmodes.g then
|
||||
if hwmodes.g and not (hwmodes.a or hwmodes.ac) then
|
||||
-- 2.4 GHz
|
||||
radio_band_count["band24"] = radio_band_count["band24"] + 1
|
||||
elseif hwmodes.a or hwmodes.ac then
|
||||
elseif (hwmodes.a or hwmodes.ac) and not hwmodes.g then
|
||||
-- 5 GHz
|
||||
radio_band_count["band5"] = radio_band_count["band5"] + 1
|
||||
end
|
||||
@ -31,7 +29,7 @@ if not sysconfig.gluon_version then
|
||||
|
||||
-- Use the number of all fixed 2.4G GHz and 5 GHz radios to
|
||||
-- distribute dualband radios in this step.
|
||||
util.foreach_radio(uci, function(radio, index, config)
|
||||
util.foreach_radio(uci, function(radio)
|
||||
local radio_name = radio['.name']
|
||||
local hwmodes = iwinfo.nl80211.hwmodelist(util.find_phy(radio))
|
||||
if (hwmodes.a or hwmodes.ac) and hwmodes.g then
|
||||
|
@ -46,7 +46,7 @@ for line in io.lines('/etc/opkg/distfeeds.conf') do
|
||||
table.insert(distfeeds, line)
|
||||
end
|
||||
|
||||
local f = io.open('/etc/opkg/distfeeds.conf', 'w')
|
||||
f = io.open('/etc/opkg/distfeeds.conf', 'w')
|
||||
|
||||
for _, line in ipairs(distfeeds) do
|
||||
local name = line:match('^src/gz%s' .. prefix .. '(%S+)%s')
|
||||
@ -62,7 +62,7 @@ end
|
||||
f:close()
|
||||
|
||||
if next(extra) then
|
||||
local f = io.open('/etc/opkg/gluon.conf', 'w')
|
||||
f = io.open('/etc/opkg/gluon.conf', 'w')
|
||||
|
||||
for k, v in pairs(extra) do
|
||||
f:write(string.format('src/gz %s %s\n', k, replace_patterns(v)))
|
||||
|
@ -85,10 +85,9 @@ function M.mac_to_ip(prefix, mac)
|
||||
local h3 = 0x100 * m5 + tonumber(m6, 16)
|
||||
local h4 = 0x100 * tonumber(m7, 16) + tonumber(m8, 16)
|
||||
|
||||
local prefix, plen = string.match(prefix, '(.*)/(%d+)')
|
||||
plen = tonumber(plen, 10)
|
||||
prefix = string.match(prefix, '(.*)/%d+')
|
||||
|
||||
local p1, p2, p3, p4, p5, p6, p7, p8 = M.IPv6(prefix)
|
||||
local p1, p2, p3, p4 = M.IPv6(prefix)
|
||||
|
||||
return string.format("%x:%x:%x:%x:%x:%x:%x:%x/%d", p1, p2, p3, p4, h1, h2, h3, h4, 128)
|
||||
end
|
||||
|
@ -157,7 +157,7 @@ function M.find_phy(config)
|
||||
end
|
||||
end
|
||||
|
||||
local function get_addresses(uci, radio)
|
||||
local function get_addresses(radio)
|
||||
local phy = M.find_phy(radio)
|
||||
if not phy then
|
||||
return function() end
|
||||
@ -200,11 +200,11 @@ function M.generate_mac(i)
|
||||
return string.format('%02x:%s:%s:%s:%s:%02x', m1, m2, m3, m4, m5, m6)
|
||||
end
|
||||
|
||||
local function get_wlan_mac_from_driver(uci, radio, vif)
|
||||
local function get_wlan_mac_from_driver(radio, vif)
|
||||
local primary = sysconfig.primary_mac:lower()
|
||||
|
||||
local addresses = {}
|
||||
for address in get_addresses(uci, radio) do
|
||||
for address in get_addresses(radio) do
|
||||
if address:lower() ~= primary then
|
||||
table.insert(addresses, address)
|
||||
end
|
||||
@ -222,8 +222,8 @@ local function get_wlan_mac_from_driver(uci, radio, vif)
|
||||
end
|
||||
end
|
||||
|
||||
function M.get_wlan_mac(uci, radio, index, vif)
|
||||
local addr = get_wlan_mac_from_driver(uci, radio, vif)
|
||||
function M.get_wlan_mac(_, radio, index, vif)
|
||||
local addr = get_wlan_mac_from_driver(radio, vif)
|
||||
if addr then
|
||||
return addr
|
||||
end
|
||||
|
@ -3,7 +3,7 @@
|
||||
local site = require 'gluon.site'
|
||||
local babelconf='/etc/gluon-babeld.conf'
|
||||
|
||||
file = io.open(babelconf, "w")
|
||||
local file = io.open(babelconf, "w")
|
||||
file:write("ipv6-subtrees true\n")
|
||||
file:write("reflect-kernel-metric true\n")
|
||||
file:write("export-table 254\n")
|
||||
|
@ -5,7 +5,6 @@
|
||||
|
||||
|
||||
local site = require 'gluon.site'
|
||||
local sysconfig = require 'gluon.sysconfig'
|
||||
local util = require 'gluon.util'
|
||||
local uci = require('simple-uci').cursor()
|
||||
|
||||
@ -39,7 +38,7 @@ local networks = uci:get_list('firewall', 'mesh', 'network')
|
||||
util.add_to_set(networks, 'client')
|
||||
uci:set_list('firewall', 'mesh', 'network', networks)
|
||||
|
||||
local networks = uci:get_list('firewall', 'drop', 'network')
|
||||
networks = uci:get_list('firewall', 'drop', 'network')
|
||||
util.remove_from_set(networks, 'client')
|
||||
uci:set_list('firewall', 'drop', 'network', networks)
|
||||
|
||||
|
@ -2,7 +2,8 @@ local fastd_methods = {'salsa2012+gmac', 'salsa2012+umac', 'null+salsa2012+gmac'
|
||||
need_array_of({'mesh_vpn', 'fastd', 'methods'}, fastd_methods)
|
||||
need_boolean(in_site({'mesh_vpn', 'fastd', 'configurable'}), false)
|
||||
|
||||
need_one_of(in_site({'mesh_vpn', 'fastd', 'syslog_level'}), {'error', 'warn', 'info', 'verbose', 'debug', 'debug2'}, false)
|
||||
need_one_of(in_site({'mesh_vpn', 'fastd', 'syslog_level'}),
|
||||
{'error', 'warn', 'info', 'verbose', 'debug', 'debug2'}, false)
|
||||
|
||||
local function check_peer(k)
|
||||
need_alphanumeric_key(k)
|
||||
|
@ -1,4 +1,4 @@
|
||||
if need_table(in_domain({'domain_switch'}), check_domain_switch, false) then
|
||||
if need_table(in_domain({'domain_switch'}), nil, false) then
|
||||
need_domain_name(in_domain({'domain_switch', 'target_domain'}))
|
||||
need_number(in_domain({'domain_switch', 'switch_after_offline_mins'}))
|
||||
need_number(in_domain({'domain_switch', 'switch_time'}))
|
||||
|
@ -1,8 +1,6 @@
|
||||
#!/usr/bin/lua
|
||||
|
||||
local json = require 'jsonc'
|
||||
local site = require 'gluon.site'
|
||||
local unistd = require 'posix.unistd'
|
||||
|
||||
local cronfile = "/usr/lib/micron.d/gluon-scheduled-domain-switch"
|
||||
|
||||
|
@ -6,7 +6,7 @@ local util = require 'gluon.util'
|
||||
local site = require 'gluon.site'
|
||||
|
||||
-- Returns true if node was offline long enough to perform domain switch
|
||||
function switch_after_min_reached()
|
||||
local function switch_after_min_reached()
|
||||
if not unistd.access("/tmp/gluon_offline") then
|
||||
return false
|
||||
end
|
||||
@ -33,7 +33,7 @@ function switch_after_min_reached()
|
||||
end
|
||||
|
||||
-- Returns true in case switch time has passed
|
||||
function switch_time_passed()
|
||||
local function switch_time_passed()
|
||||
local current_time = os.time()
|
||||
local switch_time = site.domain_switch.switch_time()
|
||||
|
||||
|
@ -15,10 +15,11 @@ package 'gluon-web-admin'
|
||||
local util = require 'gluon.util'
|
||||
local unistd = require 'posix.unistd'
|
||||
|
||||
local file
|
||||
local tmpfile = "/tmp/firmware.img"
|
||||
|
||||
|
||||
local function filehandler(meta, chunk, eof)
|
||||
local function filehandler(_, chunk, eof)
|
||||
if not unistd.access(tmpfile) and not file and chunk and #chunk > 0 then
|
||||
file = io.open(tmpfile, "w")
|
||||
end
|
||||
@ -33,7 +34,6 @@ end
|
||||
local function action_upgrade(http, renderer)
|
||||
local fcntl = require 'posix.fcntl'
|
||||
local stat = require 'posix.sys.stat'
|
||||
local wait = require 'posix.sys.wait'
|
||||
|
||||
local function fork_exec(argv)
|
||||
local pid = unistd.fork()
|
||||
@ -63,15 +63,15 @@ local function action_upgrade(http, renderer)
|
||||
end
|
||||
end
|
||||
|
||||
local function image_supported(tmpfile)
|
||||
return (os.execute(string.format("exec /sbin/sysupgrade -T %q >/dev/null", tmpfile)) == 0)
|
||||
local function image_supported(supported_tmpfile)
|
||||
return (os.execute(string.format("exec /sbin/sysupgrade -T %q >/dev/null", supported_tmpfile)) == 0)
|
||||
end
|
||||
|
||||
local function storage_size()
|
||||
local size = 0
|
||||
if unistd.access("/proc/mtd") then
|
||||
for l in io.lines("/proc/mtd") do
|
||||
local d, s, e, n = l:match('^([^%s]+)%s+([^%s]+)%s+([^%s]+)%s+"([^%s]+)"')
|
||||
local s, n = l:match('^[^%s]+%s+([^%s]+)%s+[^%s]+%s+"([^%s]+)"')
|
||||
if n == "linux" then
|
||||
size = tonumber(s, 16)
|
||||
break
|
||||
@ -79,7 +79,7 @@ local function action_upgrade(http, renderer)
|
||||
end
|
||||
elseif unistd.access("/proc/partitions") then
|
||||
for l in io.lines("/proc/partitions") do
|
||||
local x, y, b, n = l:match('^%s*(%d+)%s+(%d+)%s+([^%s]+)%s+([^%s]+)')
|
||||
local b, n = l:match('^%s*%d+%s+%d+%s+([^%s]+)%s+([^%s]+)')
|
||||
if b and n and not n:match('[0-9]') then
|
||||
size = tonumber(b) * 1024
|
||||
break
|
||||
@ -89,8 +89,8 @@ local function action_upgrade(http, renderer)
|
||||
return size
|
||||
end
|
||||
|
||||
local function image_checksum(tmpfile)
|
||||
return (util.exec(string.format("exec sha256sum %q", tmpfile)):match("^([^%s]+)"))
|
||||
local function image_checksum(checksum_tmpfile)
|
||||
return (util.exec(string.format("exec sha256sum %q", checksum_tmpfile)):match("^([^%s]+)"))
|
||||
end
|
||||
|
||||
|
||||
|
@ -57,7 +57,7 @@ local f_password = Form(translate("Password"), translate(
|
||||
)
|
||||
f_password.reset = false
|
||||
|
||||
local s = f_password:section(Section)
|
||||
s = f_password:section(Section)
|
||||
|
||||
local pw1 = s:option(Value, "pw1", translate("Password"))
|
||||
pw1.password = true
|
||||
|
@ -22,18 +22,18 @@ function mode:write(data)
|
||||
|
||||
-- methods will be recreated and filled with the original values from site.mesh_vpn.fastd.methods
|
||||
-- if performance mode was selected, and the method 'null' was not present in the original table, it will be added
|
||||
local methods = {}
|
||||
local site_methods = {}
|
||||
if data == 'performance' then
|
||||
table.insert(methods, 'null')
|
||||
table.insert(site_methods, 'null')
|
||||
end
|
||||
|
||||
for _, method in ipairs(site.mesh_vpn.fastd.methods()) do
|
||||
if method ~= 'null' then
|
||||
table.insert(methods, method)
|
||||
table.insert(site_methods, method)
|
||||
end
|
||||
end
|
||||
|
||||
uci:set('fastd', 'mesh_vpn', 'method', methods)
|
||||
uci:set('fastd', 'mesh_vpn', 'method', site_methods)
|
||||
|
||||
uci:save('fastd')
|
||||
uci:commit('fastd')
|
||||
|
@ -13,7 +13,7 @@ local function load(filename, i18n)
|
||||
local func = assert(loadfile(filename))
|
||||
|
||||
setfenv(func, setmetatable({}, {__index =
|
||||
function(tbl, key)
|
||||
function(_, key)
|
||||
return classes[key] or i18n[key] or _G[key]
|
||||
end
|
||||
}))
|
||||
|
@ -145,7 +145,7 @@ function AbstractValue:depends(field, value)
|
||||
table.insert(self.deps, deps)
|
||||
end
|
||||
|
||||
function AbstractValue:deplist(section, deplist)
|
||||
function AbstractValue:deplist(_, deplist)
|
||||
local deps = {}
|
||||
|
||||
for _, d in ipairs(deplist or self.deps) do
|
||||
@ -257,7 +257,8 @@ function AbstractValue:handle()
|
||||
end
|
||||
end
|
||||
|
||||
function AbstractValue:write(value)
|
||||
-- will be overridden: write(value)
|
||||
function AbstractValue:write()
|
||||
end
|
||||
|
||||
|
||||
|
@ -42,7 +42,7 @@ ipv4_gateway.default = wan.gateway
|
||||
ipv4_gateway.datatype = "ip4addr"
|
||||
|
||||
|
||||
local s = f:section(Section)
|
||||
s = f:section(Section)
|
||||
|
||||
local ipv6 = s:option(ListValue, "ipv6", translate("IPv6"))
|
||||
ipv6:value("dhcpv6", translate("Automatic (RA/DHCPv6)"))
|
||||
@ -61,7 +61,7 @@ ipv6_gateway.default = wan6.ip6gw
|
||||
ipv6_gateway.datatype = "ip6addr"
|
||||
|
||||
if dns_static then
|
||||
local s = f:section(Section)
|
||||
s = f:section(Section)
|
||||
|
||||
local dns = s:option(DynamicList, "dns", translate("Static DNS servers"))
|
||||
dns.default = uci:get_list("gluon-wan-dnsmasq", dns_static, "server")
|
||||
@ -74,7 +74,7 @@ if dns_static then
|
||||
end
|
||||
end
|
||||
|
||||
local s = f:section(Section)
|
||||
s = f:section(Section)
|
||||
|
||||
local mesh_wan = s:option(Flag, "mesh_wan", translate("Enable meshing on the WAN interface"))
|
||||
mesh_wan.default = not uci:get_bool("network", "mesh_wan", "disabled")
|
||||
@ -84,7 +84,7 @@ function mesh_wan:write(data)
|
||||
end
|
||||
|
||||
if sysconfig.lan_ifname then
|
||||
local s = f:section(Section)
|
||||
s = f:section(Section)
|
||||
|
||||
local mesh_lan = s:option(Flag, "mesh_lan", translate("Enable meshing on the LAN interface"))
|
||||
mesh_lan.default = not uci:get_bool("network", "mesh_lan", "disabled")
|
||||
@ -107,24 +107,24 @@ if sysconfig.lan_ifname then
|
||||
end
|
||||
|
||||
local section
|
||||
uci:foreach("system", "gpio_switch", function(s)
|
||||
if s[".name"]:match("poe") then
|
||||
uci:foreach("system", "gpio_switch", function(si)
|
||||
if si[".name"]:match("poe") then
|
||||
if not section then
|
||||
section = f:section(Section)
|
||||
end
|
||||
|
||||
local port = s.name:match("^PoE Power Port(%d*)$")
|
||||
local port = si.name:match("^PoE Power Port(%d*)$")
|
||||
local name
|
||||
if port then
|
||||
name = translatef("Enable PoE Power Port %s", port)
|
||||
else
|
||||
name = translate("Enable " .. s.name)
|
||||
name = translate("Enable " .. si.name)
|
||||
end
|
||||
local poe = section:option(Flag, s[".name"], name)
|
||||
poe.default = uci:get_bool("system", s[".name"], "value")
|
||||
local poe = section:option(Flag, si[".name"], name)
|
||||
poe.default = uci:get_bool("system", si[".name"], "value")
|
||||
|
||||
function poe:write(data)
|
||||
uci:set("system", s[".name"], "value", data)
|
||||
uci:set("system", si[".name"], "value", data)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
@ -17,8 +17,8 @@ s = f:section(Section, nil, translate(
|
||||
|
||||
o = s:option(ListValue, "role", translate("Role"))
|
||||
o.default = role
|
||||
for _, role in ipairs(site.roles.list()) do
|
||||
o:value(role, site_i18n.translate('gluon-web-node-role:role:' .. role))
|
||||
for _, role_value in ipairs(site.roles.list()) do
|
||||
o:value(role, site_i18n.translate('gluon-web-node-role:role:' .. role_value))
|
||||
end
|
||||
|
||||
function o:write(data)
|
||||
|
@ -1,5 +1,4 @@
|
||||
local iwinfo = require 'iwinfo'
|
||||
local site = require 'gluon.site'
|
||||
local uci = require("simple-uci").cursor()
|
||||
local util = require 'gluon.util'
|
||||
|
||||
|
@ -109,8 +109,8 @@ local function dispatch(config, http, request)
|
||||
return _node({...})
|
||||
end,
|
||||
|
||||
entry = function(path, target, title, order)
|
||||
local c = _node(path, true)
|
||||
entry = function(entry_path, target, title, order)
|
||||
local c = _node(entry_path, true)
|
||||
|
||||
c.target = target
|
||||
c.title = title
|
||||
@ -204,7 +204,7 @@ return function(config, http)
|
||||
table.insert(request, node)
|
||||
end
|
||||
|
||||
ok, err = pcall(dispatch, config, http, request)
|
||||
local ok, err = pcall(dispatch, config, http, request)
|
||||
if not ok then
|
||||
http:status(500, "Internal Server Error")
|
||||
http:prepare_content("text/plain")
|
||||
|
@ -53,7 +53,7 @@ end
|
||||
function Http:getcookie(name)
|
||||
local c = string.gsub(";" .. (self:getenv("HTTP_COOKIE") or "") .. ";", "%s*;%s*", ";")
|
||||
local p = ";" .. name .. "=(.-);"
|
||||
local i, j, value = c:find(p)
|
||||
local _, _, value = c:find(p)
|
||||
return value and protocol.urldecode(value)
|
||||
end
|
||||
|
||||
|
@ -124,13 +124,13 @@ local function mimedecode_message_body(src, msg, filecb)
|
||||
local store = nil
|
||||
local lchunk = nil
|
||||
|
||||
local function parse_headers(chunk, field)
|
||||
local function parse_headers(chunk, pfield)
|
||||
local stat
|
||||
repeat
|
||||
chunk, stat = chunk:gsub(
|
||||
"^([A-Z][A-Za-z0-9%-_]+): +([^\r\n]+)\r\n",
|
||||
function(k,v)
|
||||
field.headers[k] = v
|
||||
pfield.headers[k] = v
|
||||
return ""
|
||||
end
|
||||
)
|
||||
@ -140,26 +140,26 @@ local function mimedecode_message_body(src, msg, filecb)
|
||||
|
||||
-- End of headers
|
||||
if stat > 0 then
|
||||
if field.headers["Content-Disposition"] then
|
||||
if field.headers["Content-Disposition"]:match("^form%-data; ") then
|
||||
field.name = field.headers["Content-Disposition"]:match('name="(.-)"')
|
||||
field.file = field.headers["Content-Disposition"]:match('filename="(.+)"$')
|
||||
if pfield.headers["Content-Disposition"] then
|
||||
if pfield.headers["Content-Disposition"]:match("^form%-data; ") then
|
||||
pfield.name = pfield.headers["Content-Disposition"]:match('name="(.-)"')
|
||||
pfield.file = pfield.headers["Content-Disposition"]:match('filename="(.+)"$')
|
||||
end
|
||||
end
|
||||
|
||||
if not field.headers["Content-Type"] then
|
||||
field.headers["Content-Type"] = "text/plain"
|
||||
if not pfield.headers["Content-Type"] then
|
||||
pfield.headers["Content-Type"] = "text/plain"
|
||||
end
|
||||
|
||||
|
||||
if field.name then
|
||||
initval(msg.params, field.name)
|
||||
if field.file then
|
||||
appendval(msg.params, field.name, field.file)
|
||||
if pfield.name then
|
||||
initval(msg.params, pfield.name)
|
||||
if pfield.file then
|
||||
appendval(msg.params, pfield.name, pfield.file)
|
||||
store = filecb
|
||||
else
|
||||
store = function(hdr, buf, eof)
|
||||
appendval(msg.params, field.name, buf)
|
||||
store = function(_, buf, _)
|
||||
appendval(msg.params, pfield.name, buf)
|
||||
end
|
||||
end
|
||||
else
|
||||
@ -197,6 +197,7 @@ local function mimedecode_message_body(src, msg, filecb)
|
||||
|
||||
if spos then
|
||||
local predata = data:sub(1, spos - 1)
|
||||
local eof
|
||||
|
||||
if inhdr then
|
||||
predata, eof = parse_headers(predata, field)
|
||||
@ -225,11 +226,12 @@ local function mimedecode_message_body(src, msg, filecb)
|
||||
-- We found at least some boundary. Save
|
||||
-- the unparsed remaining data for the
|
||||
-- next chunk.
|
||||
lchunk, data = data, nil
|
||||
lchunk = data
|
||||
else
|
||||
-- There was a complete chunk without a boundary. Parse it as headers or
|
||||
-- append it as data, depending on our current state.
|
||||
if inhdr then
|
||||
local eof
|
||||
lchunk, eof = parse_headers(data, field)
|
||||
inhdr = not eof
|
||||
else
|
||||
@ -240,7 +242,7 @@ local function mimedecode_message_body(src, msg, filecb)
|
||||
if store then
|
||||
store(field, lchunk, false)
|
||||
end
|
||||
lchunk, chunk = chunk, nil
|
||||
lchunk = chunk
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -13,7 +13,7 @@ return function(config)
|
||||
return string.format('%s/%s.%s.lmo', i18ndir, pkg, lang)
|
||||
end
|
||||
|
||||
local function no_translation(key)
|
||||
local function no_translation()
|
||||
return nil
|
||||
end
|
||||
|
||||
|
@ -44,13 +44,13 @@ return function(config, env)
|
||||
translate = t.translate,
|
||||
translatef = t.translatef,
|
||||
_translate = t._translate,
|
||||
include = function(name)
|
||||
ctx.render(name, scope, pkg)
|
||||
include = function(include_name)
|
||||
ctx.render(include_name, scope, pkg)
|
||||
end,
|
||||
}
|
||||
|
||||
setfenv(template, setmetatable({}, {
|
||||
__index = function(tbl, key)
|
||||
__index = function(_, key)
|
||||
return scope[key] or locals[key] or env[key]
|
||||
end
|
||||
}))
|
||||
|
@ -37,7 +37,7 @@ local site, domain_code, domain, conf
|
||||
local function merge(a, b)
|
||||
local function is_array(t)
|
||||
local n = 0
|
||||
for k, v in pairs(t) do
|
||||
for _ in pairs(t) do
|
||||
n = n + 1
|
||||
end
|
||||
return n == #t
|
||||
@ -216,12 +216,12 @@ local function check_chanlist(channels)
|
||||
return function(chanlist)
|
||||
for group in chanlist:gmatch("%S+") do
|
||||
if group:match("^%d+$") then
|
||||
channel = tonumber(group)
|
||||
local channel = tonumber(group)
|
||||
if not is_valid_channel(channel) then
|
||||
return false
|
||||
end
|
||||
elseif group:match("^%d+-%d+$") then
|
||||
from, to = group:match("^(%d+)-(%d+)$")
|
||||
local from, to = group:match("^(%d+)-(%d+)$")
|
||||
from = tonumber(from)
|
||||
to = tonumber(to)
|
||||
if from >= to then
|
||||
@ -344,8 +344,9 @@ end
|
||||
|
||||
function need_chanlist(path, channels, required)
|
||||
local valid_chanlist = check_chanlist(channels)
|
||||
return need(path, valid_chanlist, required, 'be a space-separated list of WiFi channels or channel-ranges (separated by a hyphen). ' ..
|
||||
'Valid channels are: ' .. array_to_string(channels))
|
||||
return need(path, valid_chanlist, required,
|
||||
'be a space-separated list of WiFi channels or channel-ranges (separated by a hyphen). '
|
||||
.. 'Valid channels are: ' .. array_to_string(channels))
|
||||
end
|
||||
|
||||
function need_domain_name(path)
|
||||
|
Loading…
Reference in New Issue
Block a user