Mercurial > prosody-hg
annotate plugins/muc/vcard.lib.lua @ 13946:f5e8ab42c708
mod_http_file_share: Check that files are still there with correct size
Failed uploads can leave behind unused slots. Files shouldn't change
size after they have been successfully uploaded, but might as well
double check it.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sat, 04 Dec 2021 18:56:51 +0100 |
| parents | 5365227852ce |
| children |
| 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) |
|
13943
758dd39c2808
mod_muc: Revert f4e16e6265e6 and invalidate avatar cache only on vcard change
Link Mauve <linkmauve@linkmauve.fr>
parents:
13941
diff
changeset
|
13 if room.avatar_hash then return room.avatar_hash; end |
|
758dd39c2808
mod_muc: Revert f4e16e6265e6 and invalidate avatar cache only on vcard change
Link Mauve <linkmauve@linkmauve.fr>
parents:
13941
diff
changeset
|
14 |
|
13657
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); |
|
13943
758dd39c2808
mod_muc: Revert f4e16e6265e6 and invalidate avatar cache only on vcard change
Link Mauve <linkmauve@linkmauve.fr>
parents:
13941
diff
changeset
|
16 local hash = mod_vcard.get_avatar_hash(room_node); |
|
758dd39c2808
mod_muc: Revert f4e16e6265e6 and invalidate avatar cache only on vcard change
Link Mauve <linkmauve@linkmauve.fr>
parents:
13941
diff
changeset
|
17 room.avatar_hash = hash; |
|
758dd39c2808
mod_muc: Revert f4e16e6265e6 and invalidate avatar cache only on vcard change
Link Mauve <linkmauve@linkmauve.fr>
parents:
13941
diff
changeset
|
18 |
|
758dd39c2808
mod_muc: Revert f4e16e6265e6 and invalidate avatar cache only on vcard change
Link Mauve <linkmauve@linkmauve.fr>
parents:
13941
diff
changeset
|
19 return hash; |
|
13657
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 |
|
13944
5365227852ce
mod_muc: Send the room avatar hash each time an occupant starts a new session
lissine <lissine@ellini.org>
parents:
13943
diff
changeset
|
65 module:hook("muc-occupant-session-new", function (event) |
|
13657
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); |
|
13943
758dd39c2808
mod_muc: Revert f4e16e6265e6 and invalidate avatar cache only on vcard change
Link Mauve <linkmauve@linkmauve.fr>
parents:
13941
diff
changeset
|
70 room.avatar_hash = nil; |
|
13657
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 send_avatar_hash(room, nil); |
|
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 end |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 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
|
76 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
|
77 |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
78 table.insert(event.form, { |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 name = "muc#roominfo_avatarhash", |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 type = "text-multi", |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
81 }); |
|
404d3644ac4a
mod_muc: Integrate support for vcards/avatars on MUC rooms
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
82 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
|
83 end); |
