diff options
-rw-r--r-- | src/ffluci/http.lua | 43 | ||||
-rw-r--r-- | src/ffluci/util.lua | 23 |
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) |