Software / code / prosody-modules
Comparison
mod_rest/jsonmap.lib.lua @ 3877:562b34050561
mod_rest: Add basic support for XEP-0050: Ad-Hoc commands (no forms)
This allows calling simple commands like the one provided by mod_uptime
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Tue, 04 Feb 2020 21:49:14 +0100 |
| parent | 3875:93f71ab6cb00 |
| child | 3878:9a3dfe0bf9fd |
comparison
equal
deleted
inserted
replaced
| 3876:75b330d4fa6f | 3877:562b34050561 |
|---|---|
| 124 return st.stanza("query", { xmlns = "http://jabber.org/protocol/disco#items", }); | 124 return st.stanza("query", { xmlns = "http://jabber.org/protocol/disco#items", }); |
| 125 end | 125 end |
| 126 end; | 126 end; |
| 127 }; | 127 }; |
| 128 | 128 |
| 129 -- XEP-0050: Ad-Hoc Commands | |
| 130 command = {"func", "http://jabber.org/protocol/commands", "command", | |
| 131 function (s) | |
| 132 local cmd = { | |
| 133 action = s.attr.action, | |
| 134 node = s.attr.node, | |
| 135 sessionid = s.attr.sessionid, | |
| 136 status = s.attr.status, | |
| 137 }; | |
| 138 local actions = s:get_child("actions"); | |
| 139 local note = s:get_child("note"); | |
| 140 -- TODO -- local form = s:get_child("x", "jabber:x:data"); | |
| 141 if actions then | |
| 142 cmd.actions = { | |
| 143 execute = actions.attr.execute, | |
| 144 }; | |
| 145 for action in actions:childtags() do | |
| 146 cmd.actions[action.name] = true | |
| 147 end | |
| 148 elseif note then | |
| 149 cmd.note = { | |
| 150 type = note.attr.type; | |
| 151 text = note:get_text(); | |
| 152 }; | |
| 153 end | |
| 154 return cmd; | |
| 155 end; | |
| 156 function (s) | |
| 157 if type(s) == "table" and s ~= json.null then | |
| 158 local cmd = st.stanza("command", { | |
| 159 xmlns = "http://jabber.org/protocol/commands", | |
| 160 action = s.action, | |
| 161 node = s.node, | |
| 162 sessionid = s.sessionid, | |
| 163 status = s.status, | |
| 164 }); | |
| 165 return cmd; | |
| 166 elseif type(s) == "string" then -- assume node | |
| 167 return st.stanza("command", { xmlns = "http://jabber.org/protocol/commands", node = s }); | |
| 168 end | |
| 169 -- else .. missing required attribute | |
| 170 end; | |
| 171 }; | |
| 172 | |
| 129 -- XEP-0066: Out of Band Data | 173 -- XEP-0066: Out of Band Data |
| 130 oob_url = {"func", "jabber:iq:oob", "query", | 174 oob_url = {"func", "jabber:iq:oob", "query", |
| 131 function (s) | 175 function (s) |
| 132 return s:get_child_text("url"); | 176 return s:get_child_text("url"); |
| 133 end; | 177 end; |
| 163 local implied_kinds = { | 207 local implied_kinds = { |
| 164 disco = "iq", | 208 disco = "iq", |
| 165 items = "iq", | 209 items = "iq", |
| 166 ping = "iq", | 210 ping = "iq", |
| 167 version = "iq", | 211 version = "iq", |
| 212 command = "iq", | |
| 168 | 213 |
| 169 body = "message", | 214 body = "message", |
| 170 html = "message", | 215 html = "message", |
| 171 replace = "message", | 216 replace = "message", |
| 172 state = "message", | 217 state = "message", |