Software /
code /
prosody-modules
Comparison
mod_rest/jsonmap.lib.lua @ 3888:04ea96a0488d
mod_rest: Allow passing form data in a more compact format
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 07 Feb 2020 22:30:38 +0100 |
parent | 3886:b64b08b7bf8e |
child | 3889:59765d1bb6dc |
comparison
equal
deleted
inserted
replaced
3887:3d0e8e32453c | 3888:04ea96a0488d |
---|---|
4 local st = require "util.stanza"; | 4 local st = require "util.stanza"; |
5 local xml = require "util.xml"; | 5 local xml = require "util.xml"; |
6 | 6 |
7 -- Reused in many XEPs so declared up here | 7 -- Reused in many XEPs so declared up here |
8 local dataform = { | 8 local dataform = { |
9 -- Generic and complete dataforms mapping | |
9 "func", "jabber:x:data", "x", | 10 "func", "jabber:x:data", "x", |
10 function (s) | 11 function (s) |
11 local fields = array(); | 12 local fields = array(); |
12 local form = { | 13 local form = { |
13 type = s.attr.type; | 14 type = s.attr.type; |
87 return form; | 88 return form; |
88 end | 89 end |
89 end; | 90 end; |
90 }; | 91 }; |
91 | 92 |
93 local function formdata(s,t) | |
94 local form = st.stanza("x", { xmlns = "jabber:x:data", type = t }); | |
95 for k,v in pairs(s) do | |
96 form:tag("field", { var = k }); | |
97 if type(v) == "string" then | |
98 form:text_tag("value", v); | |
99 elseif type(v) == "table" then | |
100 for _, v_ in ipairs(v) do | |
101 form:text_tag("value", v_); | |
102 end | |
103 end | |
104 end | |
105 return form; | |
106 end | |
107 | |
92 local simple_types = { | 108 local simple_types = { |
93 -- top level stanza attributes | 109 -- top level stanza attributes |
94 -- needed here to mark them as known fields | 110 -- needed here to mark them as known fields |
95 kind = "attr", | 111 kind = "attr", |
96 type = "attr", | 112 type = "attr", |
275 elseif type(s.note) == "table" then | 291 elseif type(s.note) == "table" then |
276 cmd:text_tag("note", s.note.text, { type = s.note.type }); | 292 cmd:text_tag("note", s.note.text, { type = s.note.type }); |
277 end | 293 end |
278 if s.form then | 294 if s.form then |
279 cmd:add_child(dataform[5](s.form)); | 295 cmd:add_child(dataform[5](s.form)); |
296 elseif s.data then | |
297 cmd:add_child(formdata(s.data)); | |
280 end | 298 end |
281 return cmd; | 299 return cmd; |
282 elseif type(s) == "string" then -- assume node | 300 elseif type(s) == "string" then -- assume node |
283 return st.stanza("command", { xmlns = "http://jabber.org/protocol/commands", node = s }); | 301 return st.stanza("command", { xmlns = "http://jabber.org/protocol/commands", node = s }); |
284 end | 302 end |