luci-base: add hostport and ipaddrport validation types
authorJo-Philipp Wich <jow@openwrt.org>
Wed, 2 Dec 2015 10:13:18 +0000 (11:13 +0100)
committerJo-Philipp Wich <jow@openwrt.org>
Wed, 2 Dec 2015 10:13:39 +0000 (11:13 +0100)
Add two new types 'hostport' and 'ipaddrport' to validate strings in the form
'sub.example.org:1234' and '0.0.0.0:80'. The 'hostport' accepts hostnames or
IP addresses followed by a colon and a port number while the 'ipaddrport' type
accepts numeric IP addresses only, followed by a colon and a port.

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
modules/luci-base/htdocs/luci-static/resources/cbi.js
modules/luci-base/luasrc/cbi/datatypes.lua

index 02c54ad..8a3cb6f 100644 (file)
@@ -161,6 +161,28 @@ var cbi_validators = {
                        cbi_validators.host.apply(this);
        },
 
+       'hostport': function()
+       {
+               var hp = this.split(/:/);
+
+               if (hp.length == 2)
+                       return (cbi_validators.host.apply(hp[0]) &&
+                               cbi_validators.port.apply(hp[1]));
+
+               return false;
+       },
+
+       'ipaddrport': function()
+       {
+               var hp = this.split(/:/);
+
+               if (hp.length == 2)
+                       return (cbi_validators.ipaddr.apply(hp[0]) &&
+                               cbi_validators.port.apply(hp[1]));
+
+               return false;
+       },
+
        'wpakey': function()
        {
                var v = this;
index ebd7e59..52f90af 100644 (file)
@@ -184,6 +184,16 @@ function network(val)
        return uciname(val) or host(val)
 end
 
+function hostport(val)
+       local h, p = val:match("^([^:]+):([^:]+)$")
+       return not not (h and p and host(h) and port(p))
+end
+
+function ipaddrport(val)
+       local h, p = val:match("^([^:]+):([^:]+)$")
+       return not not (h and p and ipaddr(h) and port(p))
+end
+
 function wpakey(val)
        if #val == 64 then
                return (val:match("^[a-fA-F0-9]+$") ~= nil)