summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2014-04-13 22:44:05 +0200
committerJo-Philipp Wich <jow@openwrt.org>2014-04-13 22:44:05 +0200
commite93a839d17e933f970baf9b2481817d0598e1746 (patch)
treefd79ddd6979452a576355a8c6be396bf79397dfc
parentf6527cd1e850286708787c6a98fcd5c1cfc417d9 (diff)
downloadluci2-ui-e93a839d17e933f970baf9b2481817d0598e1746.tar.gz
luci2: rework datatype validators to use new global parseIPv4(), parseIPv6() and isNetmask() helpers
-rw-r--r--luci2/htdocs/luci2/luci2.js114
1 files changed, 58 insertions, 56 deletions
diff --git a/luci2/htdocs/luci2/luci2.js b/luci2/htdocs/luci2/luci2.js
index 5e95105..e47f5bd 100644
--- a/luci2/htdocs/luci2/luci2.js
+++ b/luci2/htdocs/luci2/luci2.js
@@ -4611,8 +4611,7 @@ function LuCI2()
'ipaddr': function()
{
- if (validation.types['ip4addr'].apply(this) ||
- validation.types['ip6addr'].apply(this))
+ if (L.parseIPv4(this) || L.parseIPv6(this))
return true;
validation.i18n('Must be a valid IP address');
@@ -4621,17 +4620,8 @@ function LuCI2()
'ip4addr': function()
{
- if (this.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})(\/(\S+))?$/))
- {
- if ((RegExp.$1 >= 0) && (RegExp.$1 <= 255) &&
- (RegExp.$2 >= 0) && (RegExp.$2 <= 255) &&
- (RegExp.$3 >= 0) && (RegExp.$3 <= 255) &&
- (RegExp.$4 >= 0) && (RegExp.$4 <= 255) &&
- ((RegExp.$6.indexOf('.') < 0)
- ? ((RegExp.$6 >= 0) && (RegExp.$6 <= 32))
- : (validation.types['ip4addr'].apply(RegExp.$6))))
- return true;
- }
+ if (L.parseIPv4(this))
+ return true;
validation.i18n('Must be a valid IPv4 address');
return false;
@@ -4639,62 +4629,74 @@ function LuCI2()
'ip6addr': function()
{
- if (this.match(/^([a-fA-F0-9:.]+)(\/(\d+))?$/))
- {
- if (!RegExp.$2 || ((RegExp.$3 >= 0) && (RegExp.$3 <= 128)))
- {
- var addr = RegExp.$1;
+ if (L.parseIPv6(this))
+ return true;
- if (addr == '::')
- {
- return true;
- }
+ validation.i18n('Must be a valid IPv6 address');
+ return false;
+ },
- if (addr.indexOf('.') > 0)
- {
- var off = addr.lastIndexOf(':');
+ 'netmask4': function()
+ {
+ if (L.isNetmask(L.parseIPv4(this)))
+ return true;
- if (!(off && validation.types['ip4addr'].apply(addr.substr(off+1))))
- {
- validation.i18n('Must be a valid IPv6 address');
- return false;
- }
+ validation.i18n('Must be a valid IPv4 netmask');
+ return false;
+ },
- addr = addr.substr(0, off) + ':0:0';
- }
+ 'netmask6': function()
+ {
+ if (L.isNetmask(L.parseIPv6(this)))
+ return true;
- if (addr.indexOf('::') >= 0)
- {
- var colons = 0;
- var fill = '0';
+ validation.i18n('Must be a valid IPv6 netmask6');
+ return false;
+ },
- for (var i = 1; i < (addr.length-1); i++)
- if (addr.charAt(i) == ':')
- colons++;
+ 'cidr4': function()
+ {
+ if (this.match(/^([0-9.]+)\/(\d{1,2})$/))
+ if (RegExp.$2 <= 32 && L.parseIPv4(RegExp.$1))
+ return true;
- if (colons > 7)
- {
- validation.i18n('Must be a valid IPv6 address');
- return false;
- }
+ validation.i18n('Must be a valid IPv4 prefix');
+ return false;
+ },
- for (var i = 0; i < (7 - colons); i++)
- fill += ':0';
+ 'cidr6': function()
+ {
+ if (this.match(/^([a-fA-F0-9:.]+)\/(\d{1,3})$/))
+ if (RegExp.$2 <= 128 && L.parseIPv6(RegExp.$1))
+ return true;
- if (addr.match(/^(.*?)::(.*?)$/))
- addr = (RegExp.$1 ? RegExp.$1 + ':' : '') + fill +
- (RegExp.$2 ? ':' + RegExp.$2 : '');
- }
+ validation.i18n('Must be a valid IPv6 prefix');
+ return false;
+ },
- if (addr.match(/^(?:[a-fA-F0-9]{1,4}:){7}[a-fA-F0-9]{1,4}$/) != null)
- return true;
+ 'ipmask4': function()
+ {
+ if (this.match(/^([0-9.]+)\/([0-9.]+)$/))
+ {
+ var addr = RegExp.$1, mask = RegExp.$2;
+ if (L.parseIPv4(addr) && L.isNetmask(L.parseIPv4(mask)))
+ return true;
+ }
- validation.i18n('Must be a valid IPv6 address');
- return false;
- }
+ validation.i18n('Must be a valid IPv4 address/netmask pair');
+ return false;
+ },
+
+ 'ipmask6': function()
+ {
+ if (this.match(/^([a-fA-F0-9:.]+)\/([a-fA-F0-9:.]+)$/))
+ {
+ var addr = RegExp.$1, mask = RegExp.$2;
+ if (L.parseIPv6(addr) && L.isNetmask(L.parseIPv6(mask)))
+ return true;
}
- validation.i18n('Must be a valid IPv6 address');
+ validation.i18n('Must be a valid IPv6 address/netmask pair');
return false;
},