From 812fdf218f1122d8027ac1fbfc2e578960c470d8 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Wed, 21 Feb 2024 14:37:03 +0100 Subject: [PATCH] luci-base: validation.js: add iprange, iprange4 and iprange6 validators Add datatype validators for IP address ranges which are required for certain firewall inputs. Signed-off-by: Jo-Philipp Wich (cherry picked from commit cf09f89df307f2e9d2b5dda152c571b3d0d1550d) --- .../luci-static/resources/validation.js | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/modules/luci-base/htdocs/luci-static/resources/validation.js b/modules/luci-base/htdocs/luci-static/resources/validation.js index 9504e7f2c4..e4f8c7a201 100644 --- a/modules/luci-base/htdocs/luci-static/resources/validation.js +++ b/modules/luci-base/htdocs/luci-static/resources/validation.js @@ -5,6 +5,19 @@ function bytelen(x) { return new Blob([x]).size; } +function arrayle(a, b) { + if (!Array.isArray(a) || !Array.isArray(b)) + return false; + + for (var i = 0; i < a.length; i++) + if (a[i] > b[i]) + return false; + else if (a[i] < b[i]) + return true; + + return true; +} + var Validator = baseclass.extend({ __name__: 'Validation', @@ -333,6 +346,23 @@ var ValidatorFactory = baseclass.extend({ _('valid IPv6 network')); }, + iprange: function(negative) { + return this.assert(this.apply('iprange4', null, [negative]) || this.apply('iprange6', null, [negative]), + _('valid IP address range')); + }, + + iprange4: function(negative) { + var m = this.value.split('-'); + return this.assert(m.length == 2 && arrayle(this.factory.parseIPv4(m[0]), this.factory.parseIPv4(m[1])), + _('valid IPv4 address range')); + }, + + iprange6: function(negative) { + var m = this.value.split('-'); + return this.assert(m.length == 2 && arrayle(this.factory.parseIPv6(m[0]), this.factory.parseIPv6(m[1])), + _('valid IPv6 address range')); + }, + port: function() { var p = this.factory.parseInteger(this.value); return this.assert(p >= 0 && p <= 65535, _('valid port value')); -- 2.30.2