Software /
code /
prosody-modules
Comparison
mod_rest/jsonmap.lib.lua @ 3875:93f71ab6cb00
mod_rest: Support passing 'node' attr in disco#items queries
But only in queries. Should be fine if you can't include it in responses
since the requester should remember what node they asked for.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 04 Feb 2020 21:04:02 +0100 |
parent | 3871:e5d08bb58155 |
child | 3877:562b34050561 |
comparison
equal
deleted
inserted
replaced
3874:505ae524b635 | 3875:93f71ab6cb00 |
---|---|
96 end; | 96 end; |
97 }; | 97 }; |
98 | 98 |
99 items = { | 99 items = { |
100 "func", "http://jabber.org/protocol/disco#items", "query", | 100 "func", "http://jabber.org/protocol/disco#items", "query", |
101 function (s) --> array of features | 101 function (s) --> array of features | map with node |
102 if s.attr.node and s.tags[1] == nil then | |
103 return { node = s.attr. node }; | |
104 end | |
105 | |
102 local items = array(); | 106 local items = array(); |
103 for item in s:childtags("item") do | 107 for item in s:childtags("item") do |
104 items:push({ jid = item.attr.jid, node = item.attr.node, name = item.attr.name }); | 108 items:push({ jid = item.attr.jid, node = item.attr.node, name = item.attr.name }); |
105 end | 109 end |
106 return items; | 110 return items; |
107 end; | 111 end; |
108 function (s) | 112 function (s) |
109 local disco = st.stanza("query", { xmlns = "http://jabber.org/protocol/disco#items" }); | |
110 if type(s) == "table" and s ~= json.null then | 113 if type(s) == "table" and s ~= json.null then |
114 local disco = st.stanza("query", { xmlns = "http://jabber.org/protocol/disco#items", node = s.node }); | |
111 for _, item in ipairs(s) do | 115 for _, item in ipairs(s) do |
112 if type(item) == "string" then | 116 if type(item) == "string" then |
113 disco:tag("item", { jid = item }); | 117 disco:tag("item", { jid = item }); |
114 elseif type(item) == "table" then | 118 elseif type(item) == "table" then |
115 disco:tag("item", { jid = item.jid, node = item.node, name = item.name }); | 119 disco:tag("item", { jid = item.jid, node = item.node, name = item.name }); |
116 end | 120 end |
117 end | 121 end |
118 end | 122 return disco; |
119 return disco; | 123 else |
124 return st.stanza("query", { xmlns = "http://jabber.org/protocol/disco#items", }); | |
125 end | |
120 end; | 126 end; |
121 }; | 127 }; |
122 | 128 |
123 -- XEP-0066: Out of Band Data | 129 -- XEP-0066: Out of Band Data |
124 oob_url = {"func", "jabber:iq:oob", "query", | 130 oob_url = {"func", "jabber:iq:oob", "query", |