luci-base: add ipmask, ipmask4 and ipmask6 validators
These validators accept IP address specifications in the form - address - address/bits - address/netmask Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
parent
07ceede1be
commit
8297be5485
2 changed files with 78 additions and 0 deletions
|
@ -118,6 +118,50 @@ var cbi_validators = {
|
|||
return false;
|
||||
},
|
||||
|
||||
'ipmask': function()
|
||||
{
|
||||
return cbi_validators.ipmask4.apply(this) ||
|
||||
cbi_validators.ipmask6.apply(this);
|
||||
},
|
||||
|
||||
'ipmask4': function()
|
||||
{
|
||||
var ip = this, mask = 32;
|
||||
|
||||
if (ip.match(/^(\S+)\/(\S+)$/))
|
||||
{
|
||||
ip = RegExp.$1;
|
||||
mask = RegExp.$2;
|
||||
}
|
||||
|
||||
if (!isNaN(mask) && (mask < 0 || mask > 32))
|
||||
return false;
|
||||
|
||||
if (isNaN(mask) && !cbi_validators.ip4addr.apply(mask))
|
||||
return false;
|
||||
|
||||
return cbi_validators.ip4addr.apply(ip);
|
||||
},
|
||||
|
||||
'ipmask6': function()
|
||||
{
|
||||
var ip = this, mask = 128;
|
||||
|
||||
if (ip.match(/^(\S+)\/(\S+)$/))
|
||||
{
|
||||
ip = RegExp.$1;
|
||||
mask = RegExp.$2;
|
||||
}
|
||||
|
||||
if (!isNaN(mask) && (mask < 0 || mask > 128))
|
||||
return false;
|
||||
|
||||
if (isNaN(mask) && !cbi_validators.ip6addr.apply(mask))
|
||||
return false;
|
||||
|
||||
return cbi_validators.ip6addr.apply(ip);
|
||||
},
|
||||
|
||||
'port': function()
|
||||
{
|
||||
var p = Int(this);
|
||||
|
|
|
@ -131,6 +131,40 @@ function ip6prefix(val)
|
|||
return ( val and val >= 0 and val <= 128 )
|
||||
end
|
||||
|
||||
function ipmask(val)
|
||||
return ipmask4(val) or ipmask6(val)
|
||||
end
|
||||
|
||||
function ipmask4(val)
|
||||
local ip, mask = val:match("^([^/]+)/([^/]+)$")
|
||||
local bits = tonumber(mask)
|
||||
|
||||
if bits and bits < 0 or bits > 32 then
|
||||
return false
|
||||
end
|
||||
|
||||
if not bits and not ip4addr(mask) then
|
||||
return false
|
||||
end
|
||||
|
||||
return ip4addr(ip or val)
|
||||
end
|
||||
|
||||
function ipmask6(val)
|
||||
local ip, mask = val:match("^([^/]+)/([^/]+)$")
|
||||
local bits = tonumber(mask)
|
||||
|
||||
if bits and bits < 0 or bits > 128 then
|
||||
return false
|
||||
end
|
||||
|
||||
if not bits and not ip6addr(mask) then
|
||||
return false
|
||||
end
|
||||
|
||||
return ip6addr(ip or val)
|
||||
end
|
||||
|
||||
function port(val)
|
||||
val = tonumber(val)
|
||||
return ( val and val >= 0 and val <= 65535 )
|
||||
|
|
Loading…
Reference in a new issue