diff options
author | Kim Alvefur <zash@zash.se> | 2019-11-21 18:56:43 +0100 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2019-11-21 18:56:43 +0100 |
commit | bc20052a9b53c466db12e7d35cf6c073c0ee5a3e (patch) | |
tree | 68e1211a50cbbc77e8f7e125a2027585d44c7fa6 /util | |
parent | 1f159505104015652a3571756aaa71112938c4e9 (diff) | |
download | prosody-bc20052a9b53c466db12e7d35cf6c073c0ee5a3e.tar.gz prosody-bc20052a9b53c466db12e7d35cf6c073c0ee5a3e.zip |
util.dataforms: Add support for validating (integer) ranges
Diffstat (limited to 'util')
-rw-r--r-- | util/dataforms.lua | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/util/dataforms.lua b/util/dataforms.lua index 449c1a58..efb13ac9 100644 --- a/util/dataforms.lua +++ b/util/dataforms.lua @@ -10,6 +10,7 @@ local setmetatable = setmetatable; local ipairs = ipairs; local type, next = type, next; local tonumber = tonumber; +local tostring = tostring; local t_concat = table.concat; local st = require "util.stanza"; local jid_prep = require "util.jid".prep; @@ -54,6 +55,12 @@ function form_t.form(layout, data, formtype) if formtype == "form" and field.datatype then form:tag("validate", { xmlns = xmlns_validate, datatype = field.datatype }); + if field.range_min or field.range_max then + form:tag("range", { + min = field.range_min and tostring(field.range_min), + max = field.range_max and tostring(field.range_max), + }):up(); + end -- <basic/> assumed form:up(); end @@ -290,13 +297,18 @@ field_readers["hidden"] = end data_validators["xs:integer"] = - function (data) + function (data, field) local n = tonumber(data); if not n then return false, "not a number"; elseif n % 1 ~= 0 then return false, "not an integer"; end + if field.range_max and n > field.range_max then + return false, "out of bounds"; + elseif field.range_min and n < field.range_min then + return false, "out of bounds"; + end return true, n; end |