annotate mod_addressing/mod_addressing.lua @ 4362:116c88c28532

mod_http_admin_api: restructure group-related info in API - Return the members of the group right in the get_group_by_id call. This is an O(1) of extra work. - Remove the groups attribute from get_user_by_name as that is O(n) of work and rarely immediately needed. The replacement for the group membership information in the user is for now to use the group API and iterate; future work may fix that.
author Jonas Schäfer <jonas@wielicki.name>
date Wed, 20 Jan 2021 15:30:29 +0100
parents f66a08f208ad
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
415
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 -- TODO Querying other servers for support, needs to keep track of remote
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2 -- server disco features
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4 local xmlns_address = 'http://jabber.org/protocol/address';
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6 local function handle_extended_addressing(data)
935
f66a08f208ad mod_addressing: Optimization
Kim Alvefur <zash@zash.se>
parents: 760
diff changeset
7 local stanza = data.stanza;
415
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8 if stanza.attr.type == "error" then
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9 return -- so we don't process bounces
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 end
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 local orig_to = stanza.attr.to;
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12 local addresses = stanza:get_child("addresses", xmlns_address);
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 if addresses then
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 module:log("debug", "Extended addressing found");
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 local destinations = {};
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 addresses:maptags(function(address)
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 if address.attr.xmlns == xmlns_address and address.name == "address" then
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 local type, jid, delivered = address.attr.type, address.attr.jid, address.attr.delivered;
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19 if (type == "cc" or type == "bcc" or type == "to")
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 and jid and not delivered then
935
f66a08f208ad mod_addressing: Optimization
Kim Alvefur <zash@zash.se>
parents: 760
diff changeset
21 destinations[#destinations+1] = jid;
415
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 module:log("debug", "%s to %s", type, jid)
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 if type == "to" or type == "cc" then
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 address.attr.delivered = "true";
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 return address;
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 elseif type == "bcc" then
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 return nil;
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 end
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 end
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 end
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 return address; -- unsupported stuff goes right back
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 end);
935
f66a08f208ad mod_addressing: Optimization
Kim Alvefur <zash@zash.se>
parents: 760
diff changeset
33 for i=1,#destinations do
f66a08f208ad mod_addressing: Optimization
Kim Alvefur <zash@zash.se>
parents: 760
diff changeset
34 stanza.attr.to = destinations[i];
f66a08f208ad mod_addressing: Optimization
Kim Alvefur <zash@zash.se>
parents: 760
diff changeset
35 module:log("debug", "posting stanza to %s", destinations[i])
760
442f88b49d9b mod_addressing: Replace use of core_post_stanza() with module:send()
Kim Alvefur <zash@zash.se>
parents: 415
diff changeset
36 module:send(stanza);
415
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 end
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38 stanza.attr.to = orig_to;
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 return stanza.attr.to == module.host or nil;
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40 end
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 end
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 module:hook("message/host", handle_extended_addressing, 10);
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 module:hook("message/bare", handle_extended_addressing, 10);
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 module:hook("message/full", handle_extended_addressing, 10);
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47 module:hook("presence/host", handle_extended_addressing, 10);
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
48 module:hook("presence/bare", handle_extended_addressing, 10);
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
49 module:hook("presence/full", handle_extended_addressing, 10);
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
51 -- IQ stanzas makes no sense
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
52
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53 module:add_feature(xmlns_address);