Annotate

plugins/adhoc/adhoc.lib.lua @ 13124:f15e23840780

util.http: Implement parser for RFC 7239 Forwarded header Standardized and structured replacement for the X-Forwarded-For, X-Forwarded-Proto set of headers. Notably, this allows per-hop protocol information, unlike X-Forwarded-Proto which is always a single value for some reason.
author Kim Alvefur <zash@zash.se>
date Sat, 03 Jun 2023 16:15:52 +0200
parent 13020:3174308d127e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
12977
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12642
diff changeset
7 local st, uuid = require "prosody.util.stanza", require "prosody.util.uuid";
3220
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
13020
3174308d127e mod_adhoc: Remove "mod_" prefix from permission action name
Kim Alvefur <zash@zash.se>
parents: 12977
diff changeset
30 module:default_permission("prosody:admin", "adhoc:"..node);
12642
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
13020
3174308d127e mod_adhoc: Remove "mod_" prefix from permission action name
Kim Alvefur <zash@zash.se>
parents: 12977
diff changeset
33 module:default_permission("prosody:operator", "adhoc:"..node);
12642
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;