projects
/
project
/
luci.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
libs/web: add new datatypes min(...), max(...) and neg_network_ip4addr
[project/luci.git]
/
libs
/
web
/
luasrc
/
cbi
/
datatypes.lua
diff --git
a/libs/web/luasrc/cbi/datatypes.lua
b/libs/web/luasrc/cbi/datatypes.lua
index
67cb63d
..
6640db6
100644
(file)
--- a/
libs/web/luasrc/cbi/datatypes.lua
+++ b/
libs/web/luasrc/cbi/datatypes.lua
@@
-17,8
+17,8
@@
local fs = require "nixio.fs"
local ip = require "luci.ip"
local math = require "math"
local util = require "luci.util"
local ip = require "luci.ip"
local math = require "math"
local util = require "luci.util"
+local tonumber, type = tonumber, type
-local tonumber = tonumber
module "luci.cbi.datatypes"
module "luci.cbi.datatypes"
@@
-66,6
+66,13
@@
function ipaddr(val)
return ip4addr(val) or ip6addr(val)
end
return ip4addr(val) or ip6addr(val)
end
+function neg_ipaddr(v)
+ if type(v) == "string" then
+ v = v:gsub("^%s*!", "")
+ end
+ return v and ipaddr(v)
+end
+
function ip4addr(val)
if val then
return ip.IPv4(val) and true or false
function ip4addr(val)
if val then
return ip.IPv4(val) and true or false
@@
-74,6
+81,13
@@
function ip4addr(val)
return false
end
return false
end
+function neg_ip4addr(v)
+ if type(v) == "string" then
+ v = v:gsub("^%s*!", "")
+ end
+ return v and ip4addr(v)
+end
+
function ip4prefix(val)
val = tonumber(val)
return ( val and val >= 0 and val <= 32 )
function ip4prefix(val)
val = tonumber(val)
return ( val and val >= 0 and val <= 32 )
@@
-94,7
+108,7
@@
end
function port(val)
val = tonumber(val)
function port(val)
val = tonumber(val)
- return ( val and val >=
1
and val <= 65535 )
+ return ( val and val >=
0
and val <= 65535 )
end
function portrange(val)
end
function portrange(val)
@@
-127,10
+141,9
@@
function macaddr(val)
end
function hostname(val)
end
function hostname(val)
- if val and
val:match("[a-zA-Z0-9_][a-zA-Z0-9_%-%.]*
") then
- return true
-- XXX: ToDo: need better solution
+ if val and
(#val < 254) and val.match(val, "^[a-zA-Z0-9][a-zA-Z0-9%-%.]*[a-zA-Z0-9]$
") then
+ return true
end
end
-
return false
end
return false
end
@@
-214,6
+227,13
@@
function uciname(val)
return (val:match("^[a-zA-Z0-9_]+$") ~= nil)
end
return (val:match("^[a-zA-Z0-9_]+$") ~= nil)
end
+function neg_network_ip4addr(val)
+ if type(v) == "string" then
+ v = v:gsub("^%s*!", "")
+ return (uciname(v) or ip4addr(v))
+ end
+end
+
function range(val, min, max)
val = tonumber(val)
min = tonumber(min)
function range(val, min, max)
val = tonumber(val)
min = tonumber(min)
@@
-225,3
+245,25
@@
function range(val, min, max)
return false
end
return false
end
+
+function min(val, min)
+ val = tonumber(val)
+ min = tonumber(min)
+
+ if val ~= nil and min ~= nil then
+ return (val >= min)
+ end
+
+ return false
+end
+
+function max(val, max)
+ val = tonumber(val)
+ max = tonumber(max)
+
+ if val ~= nil and max ~= nil then
+ return (val <= max)
+ end
+
+ return false
+end