diff options
author | Kim Alvefur <zash@zash.se> | 2015-09-12 17:40:14 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2015-09-12 17:40:14 +0200 |
commit | 8e89a3e5e70b563dd02f1a7664f0580882edf15a (patch) | |
tree | 1a25c33fe0d6ed38dd12a8fefa7d143053a2d89c | |
parent | 9fd5e93f0c2e8c0526d718d17e2b96775436e0dd (diff) | |
download | prosody-8e89a3e5e70b563dd02f1a7664f0580882edf15a.tar.gz prosody-8e89a3e5e70b563dd02f1a7664f0580882edf15a.zip |
util.dataforms: Refactor parsing to reuse simple text parser instead of duplicate code
-rw-r--r-- | util/dataforms.lua | 47 |
1 files changed, 21 insertions, 26 deletions
diff --git a/util/dataforms.lua b/util/dataforms.lua index 244fb3f3..30b5344a 100644 --- a/util/dataforms.lua +++ b/util/dataforms.lua @@ -145,30 +145,28 @@ function form_t.data(layout, stanza) return data; end -field_readers["text-single"] = - function (field_tag, required) - local data = field_tag:get_child_text("value"); - if data and #data > 0 then - return data - elseif required then - return nil, "Required value missing"; - end +local function simple_text(field_tag, required) + local data = field_tag:get_child_text("value"); + if data and #data > 0 then + return data + elseif required then + return nil, "Required value missing"; end +end -field_readers["text-private"] = - field_readers["text-single"]; +field_readers["text-single"] = simple_text; + +field_readers["text-private"] = simple_text; field_readers["jid-single"] = function (field_tag, required) - local raw_data = field_tag:get_child_text("value") + local raw_data, err = simple_text(field_tag, required); + if not raw_data then return raw_data, err; end local data = jid_prep(raw_data); - if data and #data > 0 then - return data - elseif raw_data then + if not data then return nil, "Invalid JID: " .. raw_data; - elseif required then - return nil, "Required value missing"; end + return data; end field_readers["jid-multi"] = @@ -212,8 +210,7 @@ field_readers["text-multi"] = return data, err; end -field_readers["list-single"] = - field_readers["text-single"]; +field_readers["list-single"] = simple_text; local boolean_values = { ["1"] = true, ["true"] = true, @@ -222,15 +219,13 @@ local boolean_values = { field_readers["boolean"] = function (field_tag, required) - local raw_value = field_tag:get_child_text("value"); - local value = boolean_values[raw_value ~= nil and raw_value]; - if value ~= nil then - return value; - elseif raw_value then - return nil, "Invalid boolean representation"; - elseif required then - return nil, "Required value missing"; + local raw_value, err = simple_text(field_tag, required); + if not raw_value then return raw_value, err; end + local value = boolean_values[raw_value]; + if value == nil then + return nil, "Invalid boolean representation:" .. raw_value; end + return value; end field_readers["hidden"] = |