Software /
code /
prosody
Annotate
plugins/adhoc/adhoc.lib.lua @ 12429:16a49f04d507
adhoc: Include stanza and origin in adhoc event data
This allows easier access to these, which could be useful for all sorts
of reasons
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 06 Mar 2017 15:19:35 +0100 |
parent | 11351:6b541d3c4c1b |
child | 12642:9061f9621330 |
rev | line source |
---|---|
3230
a5c3a82d677e
mod_adhoc/adhoc.lib: Add copyright header
Matthew Wild <mwild1@gmail.com>
parents:
3229
diff
changeset
|
1 -- Copyright (C) 2009-2010 Florian Zeitz |
a5c3a82d677e
mod_adhoc/adhoc.lib: Add copyright header
Matthew Wild <mwild1@gmail.com>
parents:
3229
diff
changeset
|
2 -- |
a5c3a82d677e
mod_adhoc/adhoc.lib: Add copyright header
Matthew Wild <mwild1@gmail.com>
parents:
3229
diff
changeset
|
3 -- This file is MIT/X11 licensed. Please see the |
a5c3a82d677e
mod_adhoc/adhoc.lib: Add copyright header
Matthew Wild <mwild1@gmail.com>
parents:
3229
diff
changeset
|
4 -- COPYING file in the source package for more information. |
a5c3a82d677e
mod_adhoc/adhoc.lib: Add copyright header
Matthew Wild <mwild1@gmail.com>
parents:
3229
diff
changeset
|
5 -- |
a5c3a82d677e
mod_adhoc/adhoc.lib: Add copyright header
Matthew Wild <mwild1@gmail.com>
parents:
3229
diff
changeset
|
6 |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 local st, uuid = require "util.stanza", require "util.uuid"; |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 local xmlns_cmd = "http://jabber.org/protocol/commands"; |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 local states = {} |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 local _M = {}; |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 |
4975
6f689c155186
adhoc.lib: Make some globals local
Kim Alvefur <zash@zash.se>
parents:
4860
diff
changeset
|
15 local function _cmdtag(desc, status, sessionid, action) |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 local cmd = st.stanza("command", { xmlns = xmlns_cmd, node = desc.node, status = status }); |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 if sessionid then cmd.attr.sessionid = sessionid; end |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 if action then cmd.attr.action = action; end |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 return cmd; |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 end |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 function _M.new(name, node, handler, permission) |
10565
421b2f8369fd
mod_adhoc: Improve permission setting (fix #1482) BC
Kim Alvefur <zash@zash.se>
parents:
8472
diff
changeset
|
24 if not permission then |
421b2f8369fd
mod_adhoc: Improve permission setting (fix #1482) BC
Kim Alvefur <zash@zash.se>
parents:
8472
diff
changeset
|
25 error "adhoc.new() expects a permission argument, none given" |
421b2f8369fd
mod_adhoc: Improve permission setting (fix #1482) BC
Kim Alvefur <zash@zash.se>
parents:
8472
diff
changeset
|
26 end |
421b2f8369fd
mod_adhoc: Improve permission setting (fix #1482) BC
Kim Alvefur <zash@zash.se>
parents:
8472
diff
changeset
|
27 if permission == "user" then |
421b2f8369fd
mod_adhoc: Improve permission setting (fix #1482) BC
Kim Alvefur <zash@zash.se>
parents:
8472
diff
changeset
|
28 error "the permission mode 'user' has been renamed 'any', please update your code" |
421b2f8369fd
mod_adhoc: Improve permission setting (fix #1482) BC
Kim Alvefur <zash@zash.se>
parents:
8472
diff
changeset
|
29 end |
421b2f8369fd
mod_adhoc: Improve permission setting (fix #1482) BC
Kim Alvefur <zash@zash.se>
parents:
8472
diff
changeset
|
30 return { name = name, node = node, handler = handler, cmdtag = _cmdtag, permission = permission }; |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 end |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 function _M.handle_cmd(command, origin, stanza) |
8471
a6f58305411e
Backed out changeset 84c117cdd048, broke things
Kim Alvefur <zash@zash.se>
parents:
8459
diff
changeset
|
34 local cmdtag = stanza.tags[1] |
a6f58305411e
Backed out changeset 84c117cdd048, broke things
Kim Alvefur <zash@zash.se>
parents:
8459
diff
changeset
|
35 local sessionid = cmdtag.attr.sessionid or uuid.generate(); |
7951
2b91da49285a
mod_adhoc/adhoc.lib: instantiate table with all fields
Kim Alvefur <zash@zash.se>
parents:
6302
diff
changeset
|
36 local dataIn = { |
12429
16a49f04d507
adhoc: Include stanza and origin in adhoc event data
Kim Alvefur <zash@zash.se>
parents:
11351
diff
changeset
|
37 origin = origin; |
16a49f04d507
adhoc: Include stanza and origin in adhoc event data
Kim Alvefur <zash@zash.se>
parents:
11351
diff
changeset
|
38 stanza = stanza; |
7951
2b91da49285a
mod_adhoc/adhoc.lib: instantiate table with all fields
Kim Alvefur <zash@zash.se>
parents:
6302
diff
changeset
|
39 to = stanza.attr.to; |
2b91da49285a
mod_adhoc/adhoc.lib: instantiate table with all fields
Kim Alvefur <zash@zash.se>
parents:
6302
diff
changeset
|
40 from = stanza.attr.from; |
8471
a6f58305411e
Backed out changeset 84c117cdd048, broke things
Kim Alvefur <zash@zash.se>
parents:
8459
diff
changeset
|
41 action = cmdtag.attr.action or "execute"; |
a6f58305411e
Backed out changeset 84c117cdd048, broke things
Kim Alvefur <zash@zash.se>
parents:
8459
diff
changeset
|
42 form = cmdtag:get_child("x", "jabber:x:data"); |
7951
2b91da49285a
mod_adhoc/adhoc.lib: instantiate table with all fields
Kim Alvefur <zash@zash.se>
parents:
6302
diff
changeset
|
43 }; |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 local data, state = command:handler(dataIn, states[sessionid]); |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 states[sessionid] = state; |
8472
d88dc6827675
adhoc.lib: Rename other variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8471
diff
changeset
|
47 local cmdreply; |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 if data.status == "completed" then |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 states[sessionid] = nil; |
8472
d88dc6827675
adhoc.lib: Rename other variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8471
diff
changeset
|
50 cmdreply = command:cmdtag("completed", sessionid); |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 elseif data.status == "canceled" then |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 states[sessionid] = nil; |
8472
d88dc6827675
adhoc.lib: Rename other variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8471
diff
changeset
|
53 cmdreply = command:cmdtag("canceled", sessionid); |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 elseif data.status == "error" then |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 states[sessionid] = nil; |
11351
6b541d3c4c1b
adhoc.lib: Tweak to allow using util.error objects
Kim Alvefur <zash@zash.se>
parents:
10565
diff
changeset
|
56 local reply = st.error_reply(stanza, data.error); |
5758
ebc074918173
adhoc.lib: Don't build error reply from reply stanza
Kim Alvefur <zash@zash.se>
parents:
5075
diff
changeset
|
57 origin.send(reply); |
3229
0abb73c43bc8
mod_adhoc/adhoc.lib: Handle errors according to XEP
Matthew Wild <mwild1@gmail.com>
parents:
3220
diff
changeset
|
58 return true; |
3540
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3484
diff
changeset
|
59 else |
8472
d88dc6827675
adhoc.lib: Rename other variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8471
diff
changeset
|
60 cmdreply = command:cmdtag("executing", sessionid); |
4860
b66e73793cb7
adhoc.lib: Default actions to 'complete' (replacement for rev 52b6901cabb0)
Kim Alvefur <zash@zash.se>
parents:
4858
diff
changeset
|
61 data.actions = data.actions or { "complete" }; |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 end |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 for name, content in pairs(data) do |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 if name == "info" then |
8472
d88dc6827675
adhoc.lib: Rename other variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8471
diff
changeset
|
66 cmdreply:tag("note", {type="info"}):text(content):up(); |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 elseif name == "warn" then |
8472
d88dc6827675
adhoc.lib: Rename other variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8471
diff
changeset
|
68 cmdreply:tag("note", {type="warn"}):text(content):up(); |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 elseif name == "error" then |
8472
d88dc6827675
adhoc.lib: Rename other variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8471
diff
changeset
|
70 cmdreply:tag("note", {type="error"}):text(content.message):up(); |
5075
4d939d2b1574
mod_adhoc: Add support for specifying a default action
Florian Zeitz <florob@babelmonkeys.de>
parents:
4993
diff
changeset
|
71 elseif name == "actions" then |
4d939d2b1574
mod_adhoc: Add support for specifying a default action
Florian Zeitz <florob@babelmonkeys.de>
parents:
4993
diff
changeset
|
72 local actions = st.stanza("actions", { execute = content.default }); |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
73 for _, action in ipairs(content) do |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 if (action == "prev") or (action == "next") or (action == "complete") then |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 actions:tag(action):up(); |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
76 else |
4993
5243b74a4cbb
Hopefully inert commit to clean up logging across a number of modules, removing all cases of concatenation when building log messages
Matthew Wild <mwild1@gmail.com>
parents:
4975
diff
changeset
|
77 module:log("error", "Command %q at node %q provided an invalid action %q", |
5243b74a4cbb
Hopefully inert commit to clean up logging across a number of modules, removing all cases of concatenation when building log messages
Matthew Wild <mwild1@gmail.com>
parents:
4975
diff
changeset
|
78 command.name, command.node, action); |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 end |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 end |
8472
d88dc6827675
adhoc.lib: Rename other variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8471
diff
changeset
|
81 cmdreply:add_child(actions); |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
82 elseif name == "form" then |
8472
d88dc6827675
adhoc.lib: Rename other variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8471
diff
changeset
|
83 cmdreply:add_child((content.layout or content):form(content.values)); |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 elseif name == "result" then |
8472
d88dc6827675
adhoc.lib: Rename other variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8471
diff
changeset
|
85 cmdreply:add_child((content.layout or content):form(content.values, "result")); |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 elseif name == "other" then |
8472
d88dc6827675
adhoc.lib: Rename other variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8471
diff
changeset
|
87 cmdreply:add_child(content); |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
88 end |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 end |
5758
ebc074918173
adhoc.lib: Don't build error reply from reply stanza
Kim Alvefur <zash@zash.se>
parents:
5075
diff
changeset
|
90 local reply = st.reply(stanza); |
8472
d88dc6827675
adhoc.lib: Rename other variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8471
diff
changeset
|
91 reply:add_child(cmdreply); |
5758
ebc074918173
adhoc.lib: Don't build error reply from reply stanza
Kim Alvefur <zash@zash.se>
parents:
5075
diff
changeset
|
92 origin.send(reply); |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
93 |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
94 return true; |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
95 end |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
96 |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
97 return _M; |