Mercurial > prosody-modules
annotate mod_onhold/mod_onhold.lua @ 3503:882180b459a0
mod_pubsub_post: Restructure authentication and authorization (BC)
This deprecates the default "superuser" actor model and makes the
default equivalent to the previous "request.id".
A single actor and secret per node is supported because HTTP and
WebHooks don't normally include any authorization identity.
Allowing authentication bypass when no secret is given should be
relatively safe when the actor is unprivileged, as will be unless
explicitly configured otherwise.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 30 Mar 2019 21:16:13 +0100 |
parents | 7dbde05b48a9 |
children |
rev | line source |
---|---|
2
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
1 -- Prosody IM |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
2 -- Copyright (C) 2008-2009 Matthew Wild |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
3 -- Copyright (C) 2008-2009 Waqas Hussain |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
4 -- Copyright (C) 2009 Jeff Mitchell |
1343
7dbde05b48a9
all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
2
diff
changeset
|
5 -- |
2
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
6 -- This project is MIT/X11 licensed. Please see the |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
7 -- COPYING file in the source package for more information. |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
8 -- |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
9 |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
10 local datamanager = require "util.datamanager"; |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
11 local jid_bare = require "util.jid".bare; |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
12 local jid_split = require "util.jid".split; |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
13 local st = require "util.stanza"; |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
14 local datetime = require "util.datetime"; |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
15 local ipairs = ipairs; |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
16 local onhold_jids = module:get_option("onhold_jids") or {}; |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
17 for _, jid in ipairs(onhold_jids) do onhold_jids[jid] = true; end |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
18 |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
19 function process_message(event) |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
20 local session, stanza = event.origin, event.stanza; |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
21 local to = stanza.attr.to; |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
22 local from = jid_bare(stanza.attr.from); |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
23 local node, host; |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
24 local onhold_node, onhold_host; |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
25 |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
26 if to then |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
27 node, host = jid_split(to) |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
28 else |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
29 node, host = session.username, session.host; |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
30 end |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
31 |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
32 if onhold_jids[from] then |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
33 stanza.attr.stamp, stanza.attr.stamp_legacy = datetime.datetime(), datetime.legacy(); |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
34 local result = datamanager.list_append(node, host, "onhold", st.preserialize(stanza)); |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
35 stanza.attr.stamp, stanza.attr.stamp_legacy = nil, nil; |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
36 return true; |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
37 end |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
38 return nil; |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
39 end |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
40 |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
41 module:hook("message/bare", process_message, 5); |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
42 |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
43 module:hook("message/full", process_message, 5); |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
44 |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
45 module:hook("presence/bare", function(event) |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
46 if event.origin.presence then return nil; end |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
47 local session = event.origin; |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
48 local node, host = session.username, session.host; |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
49 local from; |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
50 local de_stanza; |
1343
7dbde05b48a9
all the things: Remove trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
2
diff
changeset
|
51 |
2
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
52 local data = datamanager.list_load(node, host, "onhold"); |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
53 local newdata = {}; |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
54 if not data then return nil; end |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
55 for _, stanza in ipairs(data) do |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
56 de_stanza = st.deserialize(stanza); |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
57 from = jid_bare(de_stanza.attr.from); |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
58 if not onhold_jids[from] then |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
59 de_stanza:tag("delay", {xmlns = "urn:xmpp:delay", from = host, stamp = de_stanza.attr.stamp}):up(); -- XEP-0203 |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
60 de_stanza:tag("x", {xmlns = "jabber:x:delay", from = host, stamp = de_stanza.attr.stamp_legacy}):up(); -- XEP-0091 (deprecated) |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
61 de_stanza.attr.stamp, de_stanza.attr.stamp_legacy = nil, nil; |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
62 session.send(de_stanza); |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
63 else |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
64 table.insert(newdata, stanza); |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
65 end |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
66 end |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
67 datamanager.list_store(node, host, "onhold", newdata); |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
68 return nil; |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
69 end, 5); |
b8012f99acfb
Initial commit of mod_onhold, using configuration in prosody config file.
Jeff Mitchell <jeffrey.mitchell@gmail.com>
parents:
diff
changeset
|
70 |