author | Kim Alvefur <zash@zash.se> |
Thu, 28 Mar 2024 15:39:59 +0100 | |
changeset 13473 | f9171624fd03 |
parent 13472 | 98806cac64c3 |
permissions | -rw-r--r-- |
12981
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
11249
diff
changeset
|
1 |
local st = require "prosody.util.stanza"; |
10718
9ecad2304297
MUC: Switch hats to new presence APIs
Matthew Wild <mwild1@gmail.com>
parents:
10697
diff
changeset
|
2 |
local muc_util = module:require "muc/util"; |
10697
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 |
|
13472
98806cac64c3
MUC: Switch to official XEP-0317 namespace for Hats (including compat) (thanks nicoco)
Kim Alvefur <zash@zash.se>
parents:
12981
diff
changeset
|
4 |
local hats_compat = module:get_option_boolean("muc_hats_compat", true); -- COMPAT for pre-XEP namespace, TODO reconsider default for next release |
98806cac64c3
MUC: Switch to official XEP-0317 namespace for Hats (including compat) (thanks nicoco)
Kim Alvefur <zash@zash.se>
parents:
12981
diff
changeset
|
5 |
|
98806cac64c3
MUC: Switch to official XEP-0317 namespace for Hats (including compat) (thanks nicoco)
Kim Alvefur <zash@zash.se>
parents:
12981
diff
changeset
|
6 |
local xmlns_hats_legacy = "xmpp:prosody.im/protocol/hats:1"; |
98806cac64c3
MUC: Switch to official XEP-0317 namespace for Hats (including compat) (thanks nicoco)
Kim Alvefur <zash@zash.se>
parents:
12981
diff
changeset
|
7 |
local xmlns_hats = "urn:xmpp:hats:0"; |
10697
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 |
|
10718
9ecad2304297
MUC: Switch hats to new presence APIs
Matthew Wild <mwild1@gmail.com>
parents:
10697
diff
changeset
|
9 |
-- Strip any hats claimed by the client (to prevent spoofing) |
9ecad2304297
MUC: Switch hats to new presence APIs
Matthew Wild <mwild1@gmail.com>
parents:
10697
diff
changeset
|
10 |
muc_util.add_filtered_namespace(xmlns_hats); |
10697
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 |
|
11249
43b43e7156b8
MUC: Add support for presence probes (fixes #1535)
JC Brand <jc@opkode.com>
parents:
10718
diff
changeset
|
12 |
|
10718
9ecad2304297
MUC: Switch hats to new presence APIs
Matthew Wild <mwild1@gmail.com>
parents:
10697
diff
changeset
|
13 |
module:hook("muc-build-occupant-presence", function (event) |
11249
43b43e7156b8
MUC: Add support for presence probes (fixes #1535)
JC Brand <jc@opkode.com>
parents:
10718
diff
changeset
|
14 |
local bare_jid = event.occupant and event.occupant.bare_jid or event.bare_jid; |
43b43e7156b8
MUC: Add support for presence probes (fixes #1535)
JC Brand <jc@opkode.com>
parents:
10718
diff
changeset
|
15 |
local aff_data = event.room:get_affiliation_data(bare_jid); |
10697
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 |
local hats = aff_data and aff_data.hats; |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 |
if not hats then return; end |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 |
local hats_el; |
13473
f9171624fd03
MUC: Fix legacy hats (thanks nicoco)
Kim Alvefur <zash@zash.se>
parents:
13472
diff
changeset
|
19 |
local legacy_hats_el; |
10697
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 |
for hat_id, hat_data in pairs(hats) do |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 |
if hat_data.active then |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 |
if not hats_el then |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 |
hats_el = st.stanza("hats", { xmlns = xmlns_hats }); |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 |
end |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 |
hats_el:tag("hat", { uri = hat_id, title = hat_data.title }):up(); |
13473
f9171624fd03
MUC: Fix legacy hats (thanks nicoco)
Kim Alvefur <zash@zash.se>
parents:
13472
diff
changeset
|
26 |
|
13472
98806cac64c3
MUC: Switch to official XEP-0317 namespace for Hats (including compat) (thanks nicoco)
Kim Alvefur <zash@zash.se>
parents:
12981
diff
changeset
|
27 |
if hats_compat then |
98806cac64c3
MUC: Switch to official XEP-0317 namespace for Hats (including compat) (thanks nicoco)
Kim Alvefur <zash@zash.se>
parents:
12981
diff
changeset
|
28 |
if not hats_el then |
13473
f9171624fd03
MUC: Fix legacy hats (thanks nicoco)
Kim Alvefur <zash@zash.se>
parents:
13472
diff
changeset
|
29 |
legacy_hats_el = st.stanza("hats", { xmlns = xmlns_hats_legacy }); |
13472
98806cac64c3
MUC: Switch to official XEP-0317 namespace for Hats (including compat) (thanks nicoco)
Kim Alvefur <zash@zash.se>
parents:
12981
diff
changeset
|
30 |
end |
13473
f9171624fd03
MUC: Fix legacy hats (thanks nicoco)
Kim Alvefur <zash@zash.se>
parents:
13472
diff
changeset
|
31 |
legacy_hats_el:tag("hat", { uri = hat_id, title = hat_data.title }):up(); |
13472
98806cac64c3
MUC: Switch to official XEP-0317 namespace for Hats (including compat) (thanks nicoco)
Kim Alvefur <zash@zash.se>
parents:
12981
diff
changeset
|
32 |
end |
10697
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 |
end |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 |
end |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 |
if not hats_el then return; end |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 |
event.stanza:add_direct_child(hats_el); |
13473
f9171624fd03
MUC: Fix legacy hats (thanks nicoco)
Kim Alvefur <zash@zash.se>
parents:
13472
diff
changeset
|
37 |
|
f9171624fd03
MUC: Fix legacy hats (thanks nicoco)
Kim Alvefur <zash@zash.se>
parents:
13472
diff
changeset
|
38 |
if legacy_hats_el then |
f9171624fd03
MUC: Fix legacy hats (thanks nicoco)
Kim Alvefur <zash@zash.se>
parents:
13472
diff
changeset
|
39 |
event.stanza:add_direct_child(legacy_hats_el); |
f9171624fd03
MUC: Fix legacy hats (thanks nicoco)
Kim Alvefur <zash@zash.se>
parents:
13472
diff
changeset
|
40 |
end |
10697
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 |
end); |