summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSteven Barth <steven@midlink.org>2008-03-20 17:30:33 +0000
committerSteven Barth <steven@midlink.org>2008-03-20 17:30:33 +0000
commite8b87fffb9ec6654eeb82c49e49ca9491ff4299c (patch)
tree045d658345f6ba9360d7b881b9eb4c500a9f62b3
parentf989f6ee00aad6bc655948df5add6df772c51f92 (diff)
* Splitted up value validation code from ffluci.http.formvalue to ffluci.util.validate
-rw-r--r--src/ffluci/http.lua43
-rw-r--r--src/ffluci/util.lua23
2 files changed, 32 insertions, 34 deletions
diff --git a/src/ffluci/http.lua b/src/ffluci/http.lua
index 7aadf8b33d..5e177195e1 100644
--- a/src/ffluci/http.lua
+++ b/src/ffluci/http.lua
@@ -54,43 +54,18 @@ function request_redirect(category, module, action)
redirect(pattern:format(category, module, action))
end
--- Form validation function:
--- Gets a form variable "key".
--- If it does not exist: return "default"
--- If cast_number is true and "key" is not a number: return "default"
--- If valid is a table and "key" is not in it: return "default"
--- If valid is a function and returns nil: return "default"
--- Else return the value of "key"
---
--- Examples:
--- Get a form variable "foo" and return "bar" if it is not set
--- = formvalue("foo", "bar")
---
--- Get "foo" and make sure it is either "bar" or "baz"
--- = formvalue("foo", nil, nil, {"bar", "baz"})
---
--- Get "foo", make sure its a number and below 10 else return 5
--- = formvalue("foo", 5, true, function(a) return a < 10 and a or nil end)
-function formvalue(key, default, cast_number, valid, table)
- table = table or formvalues()
+-- Gets form value from key
+function formvalue(key, default)
+ local c = formvalues()
- if table[key] == nil then
- return default
- else
- local value = table[key]
-
- value = cast_number and tonumber(value) or not cast_number and nil
-
- if type(valid) == "function" then
- value = valid(value)
- elseif type(valid) == "table" then
- if not ffluci.util.contains(valid, value) then
- value = nil
- end
+ for match in key:gmatch("%w+") do
+ c = c[match]
+ if c == nil then
+ return default
end
-
- return value or default
end
+
+ return c
end
diff --git a/src/ffluci/util.lua b/src/ffluci/util.lua
index 4f0551e694..12031ff7d8 100644
--- a/src/ffluci/util.lua
+++ b/src/ffluci/util.lua
@@ -141,6 +141,29 @@ function updfenv(f, extscope)
end
+-- Validates a variable
+function validate(value, cast_number, cast_int, valid)
+ if cast_number or cast_int then
+ value = tonumber(value)
+ end
+
+ if cast_int and not(value % 1 == 0) then
+ value = nil
+ end
+
+
+ if type(valid) == "function" then
+ value = valid(value)
+ elseif type(valid) == "table" then
+ if not ffluci.util.contains(valid, value) then
+ value = nil
+ end
+ end
+
+ return value
+end
+
+
-- Returns the filename of the calling script
function __file__()
return debug.getinfo(2, 'S').source:sub(2)