Mercurial > prosody-modules
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 |
| rev | line source |
|---|---|
| 4000 | 1 -- This module allows you to probe the MUC presences for multiple occupants. |
| 2 -- Copyright (C) 2020 JC Brand | |
| 3 | |
| 4 local st = require "util.stanza"; | |
| 5 local mod_muc = module:depends"muc"; | |
| 6 local get_room_from_jid = rawget(mod_muc, "get_room_from_jid") or | |
| 7 function (jid) | |
| 8 local rooms = rawget(mod_muc, "rooms"); | |
| 9 return rooms[jid]; | |
| 10 end | |
| 11 | |
| 12 module:log("debug", "Module loaded"); | |
| 13 | |
| 14 local function respondToBatchedProbe(event) | |
| 15 local stanza = event.stanza; | |
| 16 if stanza.attr.type ~= "get" then | |
| 17 return; | |
| 18 end | |
| 19 local query = stanza:get_child("query", "http://jabber.org/protocol/muc#user"); | |
| 20 if not query then | |
| 21 return; | |
| 22 end; | |
| 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 | 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 | 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 | 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 | 46 return true; |
| 47 end | |
| 48 | |
| 49 | |
| 50 module:hook("iq/bare", respondToBatchedProbe, 1); |
