Merge pull request #578 from cshore/pull-request-validator-rework
Pull request validator rework
This commit is contained in:
commit
3dfa111db8
16 changed files with 71 additions and 29 deletions
|
@ -92,7 +92,7 @@ s = m:section(NamedSection, "voicemail_smtp", "voicemail", translate("Outgoing m
|
||||||
s.anonymous = true
|
s.anonymous = true
|
||||||
|
|
||||||
serv = s:option(Value, "smtp_server", translate("SMTP Server Hostname or IP Address"))
|
serv = s:option(Value, "smtp_server", translate("SMTP Server Hostname or IP Address"))
|
||||||
serv.datatype = "host"
|
serv.datatype = "host(0)"
|
||||||
|
|
||||||
port = s:option(Value, "smtp_port", translate("SMTP Port Number"))
|
port = s:option(Value, "smtp_port", translate("SMTP Port Number"))
|
||||||
port.datatype = "port"
|
port.datatype = "port"
|
||||||
|
|
|
@ -264,7 +264,7 @@ h = s:taboption("remote_usage", Value, "externhost", translate("Domain/IP Addres
|
||||||
The best thing to input is a static IP address. If your IP address is dynamic and it changes, \
|
The best thing to input is a static IP address. If your IP address is dynamic and it changes, \
|
||||||
your configuration will become invalid. Hence, it's recommended to set up Dynamic DNS in this case. \
|
your configuration will become invalid. Hence, it's recommended to set up Dynamic DNS in this case. \
|
||||||
and enter your Dynamic DNS hostname here. You can configure Dynamic DNS with the luci-app-ddns package."))
|
and enter your Dynamic DNS hostname here. You can configure Dynamic DNS with the luci-app-ddns package."))
|
||||||
h.datatype = "host"
|
h.datatype = "host(0)"
|
||||||
|
|
||||||
p = s:taboption("remote_usage", Value, "bindport", translate("External SIP Port"),
|
p = s:taboption("remote_usage", Value, "bindport", translate("External SIP Port"),
|
||||||
translate("Pick a random port number between 6500 and 9500 for the service to listen on. \
|
translate("Pick a random port number between 6500 and 9500 for the service to listen on. \
|
||||||
|
|
|
@ -84,7 +84,7 @@ function pwd.write(self, section, value)
|
||||||
end
|
end
|
||||||
|
|
||||||
h = s:option(Value, "host", translate("SIP Server/Registrar"))
|
h = s:option(Value, "host", translate("SIP Server/Registrar"))
|
||||||
h.datatype = "host"
|
h.datatype = "host(0)"
|
||||||
|
|
||||||
p = s:option(ListValue, "register", translate("Enable Incoming Calls (Register via SIP)"),
|
p = s:option(ListValue, "register", translate("Enable Incoming Calls (Register via SIP)"),
|
||||||
translate("This option should be set to \"Yes\" if you have a DID \(real telephone number\) \
|
translate("This option should be set to \"Yes\" if you have a DID \(real telephone number\) \
|
||||||
|
@ -103,7 +103,7 @@ p.default = "yes"
|
||||||
from = s:option(Value, "fromdomain",
|
from = s:option(Value, "fromdomain",
|
||||||
translate("SIP Realm (needed by some providers)"))
|
translate("SIP Realm (needed by some providers)"))
|
||||||
from.optional = true
|
from.optional = true
|
||||||
from.datatype = "host"
|
from.datatype = "host(0)"
|
||||||
|
|
||||||
port = s:option(Value, "port", translate("SIP Server/Registrar Port"))
|
port = s:option(Value, "port", translate("SIP Server/Registrar Port"))
|
||||||
port.optional = true
|
port.optional = true
|
||||||
|
@ -111,6 +111,6 @@ port.datatype = "port"
|
||||||
|
|
||||||
op = s:option(Value, "outboundproxy", translate("Outbound Proxy"))
|
op = s:option(Value, "outboundproxy", translate("Outbound Proxy"))
|
||||||
op.optional = true
|
op.optional = true
|
||||||
op.datatype = "host"
|
op.datatype = "host(0)"
|
||||||
|
|
||||||
return m
|
return m
|
||||||
|
|
|
@ -12,7 +12,7 @@ enable.default = 0
|
||||||
|
|
||||||
host = s:option(Value, "Host", translate("Host"), translate("IP or hostname where to get the txtinfo output from"))
|
host = s:option(Value, "Host", translate("Host"), translate("IP or hostname where to get the txtinfo output from"))
|
||||||
host.placeholder = "127.0.0.1"
|
host.placeholder = "127.0.0.1"
|
||||||
host.datatype = "host"
|
host.datatype = "host(1)"
|
||||||
host.rmempty = true
|
host.rmempty = true
|
||||||
|
|
||||||
port = s:option(Value, "Port", translate("Port"))
|
port = s:option(Value, "Port", translate("Port"))
|
||||||
|
|
|
@ -227,7 +227,7 @@ ta = s:option(Value, "target", translate("Target host"),
|
||||||
|
|
||||||
ta.rmempty = true
|
ta.rmempty = true
|
||||||
ta.placeholder = "0.0.0.0/0"
|
ta.placeholder = "0.0.0.0/0"
|
||||||
ta.datatype = "host"
|
ta.datatype = "host(1)"
|
||||||
|
|
||||||
|
|
||||||
v = s:option(Value, "via", translate("Via proxy"),
|
v = s:option(Value, "via", translate("Via proxy"),
|
||||||
|
@ -235,5 +235,6 @@ v = s:option(Value, "via", translate("Via proxy"),
|
||||||
|
|
||||||
v:depends({type="proxy"})
|
v:depends({type="proxy"})
|
||||||
v.placeholder = "10.0.0.1:8080"
|
v.placeholder = "10.0.0.1:8080"
|
||||||
|
v.datatype = "ip4addrport"
|
||||||
|
|
||||||
return m
|
return m
|
||||||
|
|
|
@ -38,7 +38,7 @@ period = s:option(Value, "period",
|
||||||
pinghost = s:option(Value, "pinghosts",
|
pinghost = s:option(Value, "pinghosts",
|
||||||
translate("Ping host"),
|
translate("Ping host"),
|
||||||
translate("Host address to ping"))
|
translate("Host address to ping"))
|
||||||
pinghost.datatype = "host"
|
pinghost.datatype = "host(1)"
|
||||||
pinghost.default = "8.8.8.8"
|
pinghost.default = "8.8.8.8"
|
||||||
pinghost:depends({mode="ping"})
|
pinghost:depends({mode="ping"})
|
||||||
|
|
||||||
|
|
|
@ -139,10 +139,11 @@ var cbi_validators = {
|
||||||
return (this.match(/^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/) != null);
|
return (this.match(/^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/) != null);
|
||||||
},
|
},
|
||||||
|
|
||||||
'host': function()
|
'host': function(ipv4only)
|
||||||
{
|
{
|
||||||
return cbi_validators.hostname.apply(this) ||
|
return cbi_validators.hostname.apply(this) ||
|
||||||
cbi_validators.ipaddr.apply(this);
|
((ipv4only != 1) && cbi_validators.ipaddr.apply(this)) ||
|
||||||
|
((ipv4only == 1) && cb_validators.ip4addr.apply(this));
|
||||||
},
|
},
|
||||||
|
|
||||||
'hostname': function()
|
'hostname': function()
|
||||||
|
@ -161,28 +162,49 @@ var cbi_validators = {
|
||||||
cbi_validators.host.apply(this);
|
cbi_validators.host.apply(this);
|
||||||
},
|
},
|
||||||
|
|
||||||
'hostport': function()
|
'hostport': function(ipv4only)
|
||||||
{
|
{
|
||||||
var hp = this.split(/:/);
|
var hp = this.split(/:/);
|
||||||
|
|
||||||
if (hp.length == 2)
|
if (hp.length == 2)
|
||||||
return (cbi_validators.host.apply(hp[0]) &&
|
return (cbi_validators.host.apply(hp[0], ipv4only) &&
|
||||||
cbi_validators.port.apply(hp[1]));
|
cbi_validators.port.apply(hp[1]));
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
|
|
||||||
'ipaddrport': function()
|
'ip4addrport': function()
|
||||||
{
|
{
|
||||||
var hp = this.split(/:/);
|
var hp = this.split(/:/);
|
||||||
|
|
||||||
if (hp.length == 2)
|
if (hp.length == 2)
|
||||||
return (cbi_validators.ipaddr.apply(hp[0]) &&
|
return (cbi_validators.ipaddr.apply(hp[0]) &&
|
||||||
cbi_validators.port.apply(hp[1]));
|
cbi_validators.port.apply(hp[1]));
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
'ipaddrport': function(bracket)
|
||||||
|
{
|
||||||
|
if (this.match(/^([^\[\]:]+):([^:]+)$/)) {
|
||||||
|
var addr = RegExp.$1
|
||||||
|
var port = RegExp.$2
|
||||||
|
return (cbi_validators.ip4addr.apply(addr) &&
|
||||||
|
cbi_validators.port.apply(port));
|
||||||
|
} else if ((bracket == 1) && (this.match(/^\[(.+)\]:([^:]+)$/))) {
|
||||||
|
var addr = RegExp.$1
|
||||||
|
var port = RegExp.$2
|
||||||
|
return (cbi_validators.ip6addr.apply(addr) &&
|
||||||
|
cbi_validators.port.apply(port));
|
||||||
|
} else if ((bracket != 1) && (this.match(/^([^\[\]]+):([^:]+)$/))) {
|
||||||
|
var addr = RegExp.$1
|
||||||
|
var port = RegExp.$2
|
||||||
|
return (cbi_validators.ip6addr.apply(addr) &&
|
||||||
|
cbi_validators.port.apply(port));
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
'wpakey': function()
|
'wpakey': function()
|
||||||
{
|
{
|
||||||
var v = this;
|
var v = this;
|
||||||
|
|
|
@ -176,22 +176,41 @@ function hostname(val)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
function host(val)
|
function host(val, ipv4only)
|
||||||
return hostname(val) or ipaddr(val)
|
return hostname(val) or ((ipv4only == 1) and ip4addr(val)) or ((not (ipv4only == 1)) and ipaddr(val))
|
||||||
end
|
end
|
||||||
|
|
||||||
function network(val)
|
function network(val)
|
||||||
return uciname(val) or host(val)
|
return uciname(val) or host(val)
|
||||||
end
|
end
|
||||||
|
|
||||||
function hostport(val)
|
function hostport(val, ipv4only)
|
||||||
local h, p = val:match("^([^:]+):([^:]+)$")
|
local h, p = val:match("^([^:]+):([^:]+)$")
|
||||||
return not not (h and p and host(h) and port(p))
|
return not not (h and p and host(h, ipv4only) and port(p))
|
||||||
end
|
end
|
||||||
|
|
||||||
function ipaddrport(val)
|
function ip4addrport(val, bracket)
|
||||||
local h, p = val:match("^([^:]+):([^:]+)$")
|
local h, p = val:match("^([^:]+):([^:]+)$")
|
||||||
return not not (h and p and ipaddr(h) and port(p))
|
return (h and p and ip4addr(h) and port(p))
|
||||||
|
end
|
||||||
|
|
||||||
|
function ip4addrport(val)
|
||||||
|
local h, p = val:match("^([^:]+):([^:]+)$")
|
||||||
|
return (h and p and ip4addr(h) and port(p))
|
||||||
|
end
|
||||||
|
|
||||||
|
function ipaddrport(val, bracket)
|
||||||
|
local h, p = val:match("^([^%[%]:]+):([^:]+)$")
|
||||||
|
if (h and p and ip4addr(h) and port(p)) then
|
||||||
|
return true
|
||||||
|
elseif (bracket == 1) then
|
||||||
|
h, p = val:match("^%[(.+)%]:([^:]+)$")
|
||||||
|
if (h and p and ip6addr(h) and port(p)) then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
h, p = val:match("^([^%[%]]+):([^:]+)$")
|
||||||
|
return (h and p and ip6addr(h) and port(p))
|
||||||
end
|
end
|
||||||
|
|
||||||
function wpakey(val)
|
function wpakey(val)
|
||||||
|
|
|
@ -135,7 +135,7 @@ rd = s:taboption("general", DynamicList, "rebind_domain",
|
||||||
translate("List of domains to allow RFC1918 responses for"))
|
translate("List of domains to allow RFC1918 responses for"))
|
||||||
|
|
||||||
rd:depends("rebind_protection", "1")
|
rd:depends("rebind_protection", "1")
|
||||||
rd.datatype = "host"
|
rd.datatype = "host(1)"
|
||||||
rd.placeholder = "ihost.netflix.com"
|
rd.placeholder = "ihost.netflix.com"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -749,7 +749,7 @@ auth_server:depends({mode="ap", encryption="wpa2"})
|
||||||
auth_server:depends({mode="ap-wds", encryption="wpa"})
|
auth_server:depends({mode="ap-wds", encryption="wpa"})
|
||||||
auth_server:depends({mode="ap-wds", encryption="wpa2"})
|
auth_server:depends({mode="ap-wds", encryption="wpa2"})
|
||||||
auth_server.rmempty = true
|
auth_server.rmempty = true
|
||||||
auth_server.datatype = "host"
|
auth_server.datatype = "host(0)"
|
||||||
|
|
||||||
auth_port = s:taboption("encryption", Value, "auth_port", translate("Radius-Authentication-Port"), translatef("Default %d", 1812))
|
auth_port = s:taboption("encryption", Value, "auth_port", translate("Radius-Authentication-Port"), translatef("Default %d", 1812))
|
||||||
auth_port:depends({mode="ap", encryption="wpa"})
|
auth_port:depends({mode="ap", encryption="wpa"})
|
||||||
|
@ -773,7 +773,7 @@ acct_server:depends({mode="ap", encryption="wpa2"})
|
||||||
acct_server:depends({mode="ap-wds", encryption="wpa"})
|
acct_server:depends({mode="ap-wds", encryption="wpa"})
|
||||||
acct_server:depends({mode="ap-wds", encryption="wpa2"})
|
acct_server:depends({mode="ap-wds", encryption="wpa2"})
|
||||||
acct_server.rmempty = true
|
acct_server.rmempty = true
|
||||||
acct_server.datatype = "host"
|
acct_server.datatype = "host(0)"
|
||||||
|
|
||||||
acct_port = s:taboption("encryption", Value, "acct_port", translate("Radius-Accounting-Port"), translatef("Default %d", 1813))
|
acct_port = s:taboption("encryption", Value, "acct_port", translate("Radius-Accounting-Port"), translatef("Default %d", 1813))
|
||||||
acct_port:depends({mode="ap", encryption="wpa"})
|
acct_port:depends({mode="ap", encryption="wpa"})
|
||||||
|
|
|
@ -204,7 +204,7 @@ if has_ntpd then
|
||||||
|
|
||||||
|
|
||||||
o = s:option(DynamicList, "server", translate("NTP server candidates"))
|
o = s:option(DynamicList, "server", translate("NTP server candidates"))
|
||||||
o.datatype = "host"
|
o.datatype = "host(0)"
|
||||||
o:depends("enable", "1")
|
o:depends("enable", "1")
|
||||||
|
|
||||||
-- retain server list even if disabled
|
-- retain server list even if disabled
|
||||||
|
|
|
@ -39,7 +39,7 @@ protocol.optional = true
|
||||||
server = section:taboption("general", Value, "server",
|
server = section:taboption("general", Value, "server",
|
||||||
translate("Tunnel setup server"),
|
translate("Tunnel setup server"),
|
||||||
translate("Optional, specify to override default server (tic.sixxs.net)"))
|
translate("Optional, specify to override default server (tic.sixxs.net)"))
|
||||||
server.datatype = "host"
|
server.datatype = "host(0)"
|
||||||
server.optional = true
|
server.optional = true
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ oc_key_file = "/etc/openconnect/user-key-" .. ifc .. ".pem"
|
||||||
oc_ca_file = "/etc/openconnect/ca-" .. ifc .. ".pem"
|
oc_ca_file = "/etc/openconnect/ca-" .. ifc .. ".pem"
|
||||||
|
|
||||||
server = section:taboption("general", Value, "server", translate("VPN Server"))
|
server = section:taboption("general", Value, "server", translate("VPN Server"))
|
||||||
server.datatype = "host"
|
server.datatype = "host(0)"
|
||||||
|
|
||||||
port = section:taboption("general", Value, "port", translate("VPN Server port"))
|
port = section:taboption("general", Value, "port", translate("VPN Server port"))
|
||||||
port.placeholder = "443"
|
port.placeholder = "443"
|
||||||
|
|
|
@ -8,7 +8,7 @@ local ipv6, defaultroute, metric, peerdns, dns, mtu
|
||||||
|
|
||||||
|
|
||||||
server = section:taboption("general", Value, "server", translate("L2TP Server"))
|
server = section:taboption("general", Value, "server", translate("L2TP Server"))
|
||||||
server.datatype = "or(host, hostport)"
|
server.datatype = "or(host(1), hostport(1))"
|
||||||
|
|
||||||
|
|
||||||
username = section:taboption("general", Value, "username", translate("PAP/CHAP username"))
|
username = section:taboption("general", Value, "username", translate("PAP/CHAP username"))
|
||||||
|
|
|
@ -8,7 +8,7 @@ local sshuser, server, port, ssh_options, identity, ipaddr, peeraddr
|
||||||
sshuser = section:taboption("general", Value, "sshuser", translate("SSH username"))
|
sshuser = section:taboption("general", Value, "sshuser", translate("SSH username"))
|
||||||
|
|
||||||
server = section:taboption("general", Value, "server", translate("SSH server address"))
|
server = section:taboption("general", Value, "server", translate("SSH server address"))
|
||||||
server.datatype = "host"
|
server.datatype = "host(0)"
|
||||||
|
|
||||||
port = section:taboption("general", Value, "port", translate("SSH server port"))
|
port = section:taboption("general", Value, "port", translate("SSH server port"))
|
||||||
port.datatype = "port"
|
port.datatype = "port"
|
||||||
|
|
|
@ -9,7 +9,7 @@ local defaultroute, metric, peerdns, dns,
|
||||||
|
|
||||||
|
|
||||||
server = section:taboption("general", Value, "server", translate("VPN Server"))
|
server = section:taboption("general", Value, "server", translate("VPN Server"))
|
||||||
server.datatype = "host"
|
server.datatype = "host(0)"
|
||||||
|
|
||||||
|
|
||||||
username = section:taboption("general", Value, "username", translate("PAP/CHAP username"))
|
username = section:taboption("general", Value, "username", translate("PAP/CHAP username"))
|
||||||
|
|
Loading…
Reference in a new issue