Software / code / prosody
Annotate
plugins/muc/vcard.lib.lua @ 13792:4ea7bd7325be 13.0
core.portmanager: Restore use of per-host 'ssl' for SNI hosts. Fixes #1915.
This was an unintentional regression, as per-host 'ssl' options became valid
in 0.12 when SNI support was added for direct TLS ports. While we encourage
most people to use the simpler automatic certificate selection (and it seems
most do, given the overlooking of this bug), there are likely always going to
be use cases for manually-configured certificates.
The issue was introduced in commit 7e9ebdc75ce4 which inadvertently removed
the per-host option checking for SNI.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sat, 29 Mar 2025 22:25:19 +0100 |
| parent | 13660:31f8fd2bcab9 |
| rev | line source |
|---|---|
|
13657
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 local mod_vcard = module:depends("vcard"); |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 local jid = require "prosody.util.jid"; |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 local st = require "prosody.util.stanza"; |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 -- This must be the same event that mod_vcard hooks |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 local vcard_event = "iq/bare/vcard-temp:vCard"; |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 local advertise_hashes = module:get_option("muc_avatar_advertise_hashes"); |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 --luacheck: ignore 113/get_room_from_jid |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 local function get_avatar_hash(room) |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 if room.avatar_hash then return room.avatar_hash; end |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 local room_node = jid.split(room.jid); |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 local hash = mod_vcard.get_avatar_hash(room_node); |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 room.avatar_hash = hash; |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 return hash; |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 end |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 local function send_avatar_hash(room, to) |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 local hash = get_avatar_hash(room); |
|
13660
31f8fd2bcab9
MUC: Don't inform people about the avatar hash when there is none
Matthew Wild <mwild1@gmail.com>
parents:
13657
diff
changeset
|
24 if not hash and to then return; end -- Don't announce when no avatar |
|
13657
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 local presence_vcard = st.presence({to = to, from = room.jid}) |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 :tag("x", { xmlns = "vcard-temp:x:update" }) |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 :tag("photo"):text(hash):up(); |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 if to == nil then |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 if not advertise_hashes or advertise_hashes == "presence" then |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 room:broadcast_message(presence_vcard); |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 end |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 if not advertise_hashes or advertise_hashes == "message" then |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 room:broadcast_message(st.message({ from = room.jid, type = "groupchat" }) |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 :tag("x", { xmlns = "http://jabber.org/protocol/muc#user" }) |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 :tag("status", { code = "104" })); |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 end |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 else |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 module:send(presence_vcard); |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 end |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 end |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 module:hook(vcard_event, function (event) |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 local stanza = event.stanza; |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 local to = stanza.attr.to; |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 if stanza.attr.type ~= "set" then |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 return; |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 end |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 local room = get_room_from_jid(to); |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 if not room then |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 return; |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 end |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 local sender_affiliation = room:get_affiliation(stanza.attr.from); |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 if sender_affiliation == "owner" then |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 event.allow_vcard_modification = true; |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 end |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 end, 10); |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 if advertise_hashes ~= "none" then |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 module:hook("muc-occupant-joined", function (event) |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 send_avatar_hash(event.room, event.stanza.attr.from); |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 end); |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 module:hook("vcard-updated", function (event) |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 local room = get_room_from_jid(event.stanza.attr.to); |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 send_avatar_hash(room, nil); |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 end); |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
72 end |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
73 |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 module:hook("muc-disco#info", function (event) |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 event.reply:tag("feature", { var = "vcard-temp" }):up(); |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
76 |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 table.insert(event.form, { |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
78 name = "muc#roominfo_avatarhash", |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 type = "text-multi", |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 }); |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
81 event.formdata["muc#roominfo_avatarhash"] = get_avatar_hash(event.room); |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
82 end); |