annotate mod_muc_batched_probe/mod_muc_batched_probe.lua @ 6319:04c3273cb81f

mod_auth_cyrus: Add empty 'profile' table to SASL handler objects This is for compatibility with Prosody's built-in util.sasl objects. A SASL profile table usually includes methods supported by the backend, which can be used by SASL mechanism handlers to perform operations (such as testing the password). It also optionally contains a 'cb' field with channel binding method handlers. The Cyrus backend doesn't support channel binding, and doesn't have the same concept of auth backend methods (it handles all that internally, and Prosody has no insight or control over it). Thus, we create an empty profile which informs Prosody that the SASL handler does not support any of the auth or channel binding methods. Some features will not work, but they didn't work anyway. This just makes it explicit. This fixes a traceback in mod_sasl2_fast, which expected SASL handlers to always contain a 'profile' field.
author Matthew Wild <mwild1@gmail.com>
date Thu, 04 Sep 2025 10:14:46 +0100
parents e06258fc6cf1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4000
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
1 -- This module allows you to probe the MUC presences for multiple occupants.
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
2 -- Copyright (C) 2020 JC Brand
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
3
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
4 local st = require "util.stanza";
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
5 local mod_muc = module:depends"muc";
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
6 local get_room_from_jid = rawget(mod_muc, "get_room_from_jid") or
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
7 function (jid)
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
8 local rooms = rawget(mod_muc, "rooms");
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
9 return rooms[jid];
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
10 end
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
11
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
12 module:log("debug", "Module loaded");
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
13
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
14 local function respondToBatchedProbe(event)
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
15 local stanza = event.stanza;
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
16 if stanza.attr.type ~= "get" then
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
17 return;
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
18 end
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
19 local query = stanza:get_child("query", "http://jabber.org/protocol/muc#user");
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
20 if not query then
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
21 return;
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
22 end;
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
23
4188
4611999fd8d3 mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents: 4007
diff changeset
24 local origin = event.origin;
4000
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
25 local room = get_room_from_jid(stanza.attr.to);
4188
4611999fd8d3 mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents: 4007
diff changeset
26 local probing_occupant = room:get_occupant_by_real_jid(stanza.attr.from);
4611999fd8d3 mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents: 4007
diff changeset
27 if probing_occupant == nil then
4611999fd8d3 mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents: 4007
diff changeset
28 origin.send(st.error_reply(stanza, "cancel", "not-acceptable", "You are not currently connected to this chat", room.jid));
4611999fd8d3 mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents: 4007
diff changeset
29 return true;
4611999fd8d3 mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents: 4007
diff changeset
30 end
4611999fd8d3 mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents: 4007
diff changeset
31
4007
845d13ab0dc0 mod_muc_batched_probe: Call instance method
JC Brand <jc@opkode.com>
parents: 4000
diff changeset
32 for item in query:children() do
4000
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
33 local probed_jid = item.attr.jid;
4188
4611999fd8d3 mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents: 4007
diff changeset
34 local probed_occupant = room:get_occupant_by_nick(probed_jid);
4611999fd8d3 mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents: 4007
diff changeset
35 if probed_occupant == nil then
4611999fd8d3 mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents: 4007
diff changeset
36 local pr = room:build_unavailable_presence(probed_jid, stanza.attr.from);
4611999fd8d3 mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents: 4007
diff changeset
37 if pr then
4611999fd8d3 mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents: 4007
diff changeset
38 room:route_stanza(pr);
4611999fd8d3 mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents: 4007
diff changeset
39 end
4190
e06258fc6cf1 muc_batched_probe: don't return too quickly
JC Brand <jc@opkode.com>
parents: 4188
diff changeset
40 else
e06258fc6cf1 muc_batched_probe: don't return too quickly
JC Brand <jc@opkode.com>
parents: 4188
diff changeset
41 local x = st.stanza("x", {xmlns = "http://jabber.org/protocol/muc#user"});
e06258fc6cf1 muc_batched_probe: don't return too quickly
JC Brand <jc@opkode.com>
parents: 4188
diff changeset
42 room:publicise_occupant_status(probed_occupant, x, nil, nil, nil, nil, false, probing_occupant);
4188
4611999fd8d3 mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents: 4007
diff changeset
43 end
4000
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
44 end
4188
4611999fd8d3 mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents: 4007
diff changeset
45 origin.send(st.reply(stanza));
4000
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
46 return true;
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
47 end
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
48
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
49
d56b3c0195a8 mod_muc_batched_probe: New module
JC Brand <jc@opkode.com>
parents:
diff changeset
50 module:hook("iq/bare", respondToBatchedProbe, 1);