plugins/muc/hats.lib.lua
author JC Brand <jc@opkode.com>
Sun, 19 Apr 2020 21:49:45 +0200
changeset 11249 43b43e7156b8
parent 10718 9ecad2304297
child 12981 74b9e05af71e
permissions -rw-r--r--
MUC: Add support for presence probes (fixes #1535) The following patch allows Prosody to respond to `probe` presences and send out the probed occupant's current presence. This is based on line 17.3 in XEP-0045: A MUC service MAY handle presence probes sent to the room JID <room@service> or an occupant JID <room@service/nick> (e.g, these might be sent by an occupant's home server to determine if the room is still online or to synchronize presence information if the user or the user's server has gone offline temporarily or has started sharing presence again, as for instance when Stanza Interception and Filtering Technology (XEP-0273) is used).
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10697
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     1
local st = require "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
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     4
local xmlns_hats = "xmpp:prosody.im/protocol/hats:1";
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     5
10718
9ecad2304297 MUC: Switch hats to new presence APIs
Matthew Wild <mwild1@gmail.com>
parents: 10697
diff changeset
     6
-- 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
     7
muc_util.add_filtered_namespace(xmlns_hats);
10697
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     8
11249
43b43e7156b8 MUC: Add support for presence probes (fixes #1535)
JC Brand <jc@opkode.com>
parents: 10718
diff changeset
     9
10718
9ecad2304297 MUC: Switch hats to new presence APIs
Matthew Wild <mwild1@gmail.com>
parents: 10697
diff changeset
    10
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
    11
	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
    12
	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
    13
	local hats = aff_data and aff_data.hats;
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    14
	if not hats then return; end
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    15
	local hats_el;
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    16
	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
    17
		if hat_data.active then
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    18
			if not hats_el then
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    19
				hats_el = st.stanza("hats", { xmlns = xmlns_hats });
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    20
			end
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    21
			hats_el:tag("hat", { uri = hat_id, title = hat_data.title }):up();
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    22
		end
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    23
	end
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    24
	if not hats_el then return; end
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    25
	event.stanza:add_direct_child(hats_el);
76bb806cdd4b MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    26
end);