luci-proto-wireguard: add support for fwmark option
[project/luci.git] / modules / luci-base / luasrc / cbi / datatypes.lua
index 2039a35..cf56566 100644 (file)
@@ -1,4 +1,5 @@
 -- Copyright 2010 Jo-Philipp Wich <jow@openwrt.org>
+-- Copyright 2017 Dan Luedtke <mail@danrl.com>
 -- Licensed to the public under the Apache License 2.0.
 
 local fs = require "nixio.fs"
@@ -139,11 +140,11 @@ function ipmask4(val)
        local ip, mask = val:match("^([^/]+)/([^/]+)$")
        local bits = tonumber(mask)
 
-       if bits and bits < 0 or bits > 32 then
+       if bits and (bits < 0 or bits > 32) then
                return false
        end
 
-       if not bits and not ip4addr(mask) then
+       if not bits and mask and not ip4addr(mask) then
                return false
        end
 
@@ -154,17 +155,25 @@ function ipmask6(val)
        local ip, mask = val:match("^([^/]+)/([^/]+)$")
        local bits = tonumber(mask)
 
-       if bits and bits < 0 or bits > 128 then
+       if bits and (bits < 0 or bits > 128) then
                return false
        end
 
-       if not bits and not ip6addr(mask) then
+       if not bits and mask and not ip6addr(mask) then
                return false
        end
 
        return ip6addr(ip or val)
 end
 
+function ip6hostid(val)
+       if val and val:match("^[a-fA-F0-9:]+$") and (#val > 2) then
+               return (ip6addr("2001:db8:0:0" .. val) or ip6addr("2001:db8:0:0:" .. val))
+       end
+
+       return false
+end
+
 function port(val)
        val = tonumber(val)
        return ( val and val >= 0 and val <= 65535 )
@@ -267,11 +276,33 @@ function wepkey(val)
        end
 end
 
+function hexstring(val)
+       if val then
+               return (val:match("^[a-fA-F0-9]+$") ~= nil)
+       end
+       return false
+end
+
+function hex(val, maxbytes)
+       maxbytes = tonumber(maxbytes)
+       if val and maxbytes ~= nil then
+               return ((val:match("^0x[a-fA-F0-9]+$") ~= nil) and (#val <= 2 + maxbytes * 2))
+       end
+       return false
+end
+
+function base64(val)
+       if val then
+               return (val:match("^[a-zA-Z0-9/+]+=?=?$") ~= nil) and (math.fmod(#val, 4) == 0)
+       end
+       return false
+end
+
 function string(val)
        return true             -- Everything qualifies as valid string
 end
 
-function directory( val, seen )
+function directory(val, seen)
        local s = fs.stat(val)
        seen = seen or { }
 
@@ -287,7 +318,7 @@ function directory( val, seen )
        return false
 end
 
-function file( val, seen )
+function file(val, seen)
        local s = fs.stat(val)
        seen = seen or { }
 
@@ -303,7 +334,7 @@ function file( val, seen )
        return false
 end
 
-function device( val, seen )
+function device(val, seen)
        local s = fs.stat(val)
        seen = seen or { }
 
@@ -438,4 +469,3 @@ function dateyyyymmdd(val)
        end
        return false
 end
-