Software /
code /
prosody
Annotate
plugins/adhoc/adhoc.lib.lua @ 12803:2e12290820e8
mod_smacks: Factor out resumption token table key generation
So that happens in a single place, where it can be changed easier.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 13 Nov 2022 19:44:53 +0100 |
parent | 12642:9061f9621330 |
child | 12977:74b9e05af71e |
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" |
12642
9061f9621330
Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents:
12429
diff
changeset
|
26 elseif permission == "user" then |
9061f9621330
Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents:
12429
diff
changeset
|
27 error "the permission mode 'user' has been renamed 'any', please update your code" |
10565
421b2f8369fd
mod_adhoc: Improve permission setting (fix #1482) BC
Kim Alvefur <zash@zash.se>
parents:
8472
diff
changeset
|
28 end |
12642
9061f9621330
Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents:
12429
diff
changeset
|
29 if permission == "admin" then |
9061f9621330
Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents:
12429
diff
changeset
|
30 module:default_permission("prosody:admin", "mod_adhoc:"..node); |
9061f9621330
Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents:
12429
diff
changeset
|
31 permission = "check"; |
9061f9621330
Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents:
12429
diff
changeset
|
32 elseif permission == "global_admin" then |
9061f9621330
Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents:
12429
diff
changeset
|
33 module:default_permission("prosody:operator", "mod_adhoc:"..node); |
9061f9621330
Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents:
12429
diff
changeset
|
34 permission = "check"; |
10565
421b2f8369fd
mod_adhoc: Improve permission setting (fix #1482) BC
Kim Alvefur <zash@zash.se>
parents:
8472
diff
changeset
|
35 end |
421b2f8369fd
mod_adhoc: Improve permission setting (fix #1482) BC
Kim Alvefur <zash@zash.se>
parents:
8472
diff
changeset
|
36 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
|
37 end |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 function _M.handle_cmd(command, origin, stanza) |
8471
a6f58305411e
Backed out changeset 84c117cdd048, broke things
Kim Alvefur <zash@zash.se>
parents:
8459
diff
changeset
|
40 local cmdtag = stanza.tags[1] |
a6f58305411e
Backed out changeset 84c117cdd048, broke things
Kim Alvefur <zash@zash.se>
parents:
8459
diff
changeset
|
41 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
|
42 local dataIn = { |
12429
16a49f04d507
adhoc: Include stanza and origin in adhoc event data
Kim Alvefur <zash@zash.se>
parents:
11351
diff
changeset
|
43 origin = origin; |
16a49f04d507
adhoc: Include stanza and origin in adhoc event data
Kim Alvefur <zash@zash.se>
parents:
11351
diff
changeset
|
44 stanza = stanza; |
7951
2b91da49285a
mod_adhoc/adhoc.lib: instantiate table with all fields
Kim Alvefur <zash@zash.se>
parents:
6302
diff
changeset
|
45 to = stanza.attr.to; |
2b91da49285a
mod_adhoc/adhoc.lib: instantiate table with all fields
Kim Alvefur <zash@zash.se>
parents:
6302
diff
changeset
|
46 from = stanza.attr.from; |
8471
a6f58305411e
Backed out changeset 84c117cdd048, broke things
Kim Alvefur <zash@zash.se>
parents:
8459
diff
changeset
|
47 action = cmdtag.attr.action or "execute"; |
a6f58305411e
Backed out changeset 84c117cdd048, broke things
Kim Alvefur <zash@zash.se>
parents:
8459
diff
changeset
|
48 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
|
49 }; |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 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
|
52 states[sessionid] = state; |
8472
d88dc6827675
adhoc.lib: Rename other variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8471
diff
changeset
|
53 local cmdreply; |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 if data.status == "completed" then |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 states[sessionid] = nil; |
8472
d88dc6827675
adhoc.lib: Rename other variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8471
diff
changeset
|
56 cmdreply = command:cmdtag("completed", sessionid); |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 elseif data.status == "canceled" then |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 states[sessionid] = nil; |
8472
d88dc6827675
adhoc.lib: Rename other variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8471
diff
changeset
|
59 cmdreply = command:cmdtag("canceled", sessionid); |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 elseif data.status == "error" then |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 states[sessionid] = nil; |
11351
6b541d3c4c1b
adhoc.lib: Tweak to allow using util.error objects
Kim Alvefur <zash@zash.se>
parents:
10565
diff
changeset
|
62 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
|
63 origin.send(reply); |
3229
0abb73c43bc8
mod_adhoc/adhoc.lib: Handle errors according to XEP
Matthew Wild <mwild1@gmail.com>
parents:
3220
diff
changeset
|
64 return true; |
3540
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3484
diff
changeset
|
65 else |
8472
d88dc6827675
adhoc.lib: Rename other variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8471
diff
changeset
|
66 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
|
67 data.actions = data.actions or { "complete" }; |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 end |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 for name, content in pairs(data) do |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 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
|
72 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
|
73 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
|
74 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
|
75 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
|
76 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
|
77 elseif name == "actions" then |
4d939d2b1574
mod_adhoc: Add support for specifying a default action
Florian Zeitz <florob@babelmonkeys.de>
parents:
4993
diff
changeset
|
78 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
|
79 for _, action in ipairs(content) do |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 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
|
81 actions:tag(action):up(); |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
82 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
|
83 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
|
84 command.name, command.node, action); |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
85 end |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 end |
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(actions); |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
88 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
|
89 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
|
90 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
|
91 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
|
92 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
|
93 cmdreply:add_child(content); |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
94 end |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
95 end |
5758
ebc074918173
adhoc.lib: Don't build error reply from reply stanza
Kim Alvefur <zash@zash.se>
parents:
5075
diff
changeset
|
96 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
|
97 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
|
98 origin.send(reply); |
3220
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
99 |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
100 return true; |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
101 end |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
102 |
b3772f9bc359
mod_adhoc: Imported from prosody-modules, thanks Florob!
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
103 return _M; |