* Splitted up value validation code from ffluci.http.formvalue to ffluci.util.validate
authorSteven Barth <steven@midlink.org>
Thu, 20 Mar 2008 17:30:33 +0000 (17:30 +0000)
committerSteven Barth <steven@midlink.org>
Thu, 20 Mar 2008 17:30:33 +0000 (17:30 +0000)
src/ffluci/http.lua
src/ffluci/util.lua

index 7aadf8b..5e17719 100644 (file)
@@ -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
 
 
index 4f0551e..12031ff 100644 (file)
@@ -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)