diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2010-11-16 18:48:02 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2010-11-16 18:48:02 +0000 |
commit | c20dcb3612de13eeb870de31d83e816d93bdc830 (patch) | |
tree | ac807d0631b39202598812f75c8939b21f589752 /libs/web/luasrc | |
parent | b17848e82e0a7fa482900559aaf5c3a11d3f07d9 (diff) |
libs/web: add range(min,max) datatype validator
Diffstat (limited to 'libs/web/luasrc')
-rw-r--r-- | libs/web/luasrc/cbi.lua | 33 | ||||
-rw-r--r-- | libs/web/luasrc/cbi/datatypes.lua | 12 |
2 files changed, 36 insertions, 9 deletions
diff --git a/libs/web/luasrc/cbi.lua b/libs/web/luasrc/cbi.lua index 403935aec1..6c9e7a544f 100644 --- a/libs/web/luasrc/cbi.lua +++ b/libs/web/luasrc/cbi.lua @@ -1358,20 +1358,35 @@ end -- Validate the form value function AbstractValue.validate(self, value) - if self.datatype and value and datatypes[self.datatype] then - if type(value) == "table" then - local v - for _, v in ipairs(value) do - if v and #v > 0 and not datatypes[self.datatype](v) then - return nil - end + if self.datatype and value then + local args = { } + local dt, ar = self.datatype:match("^(%w+)%(([^%(%)]+)%)") + + if dt and ar then + local a + for a in ar:gmatch("[^%s,]+") do + args[#args+1] = a end else - if not datatypes[self.datatype](value) then - return nil + dt = self.datatype + end + + if dt and datatypes[dt] then + if type(value) == "table" then + local v + for _, v in ipairs(value) do + if v and #v > 0 and not datatypes[dt](v, unpack(args)) then + return nil + end + end + else + if not datatypes[dt](value, unpack(args)) then + return nil + end end end end + return value end diff --git a/libs/web/luasrc/cbi/datatypes.lua b/libs/web/luasrc/cbi/datatypes.lua index f8d8153779..2fdb5802c4 100644 --- a/libs/web/luasrc/cbi/datatypes.lua +++ b/libs/web/luasrc/cbi/datatypes.lua @@ -208,3 +208,15 @@ end function uciname(val) return (val:match("^[a-zA-Z0-9_]+$") ~= nil) end + +function range(val, min, max) + val = tonumber(val) + min = tonumber(min) + max = tonumber(max) + + if val ~= nil and min ~= nil and max ~= nil then + return ((val >= min) and (val <= max)) + end + + return false +end |