Annotate

plugins/mod_vcard.lua @ 13655:6902bb3dd196

mod_vcard: Fire event when vcard updated
author Matthew Wild <mwild1@gmail.com>
date Thu, 06 Feb 2025 17:02:29 +0000
parent 13654:39c35f7e6cfa
child 13656:4298e6565fec
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1523
841d61be198f Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents: 1042
diff changeset
1 -- Prosody IM
2923
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 2344
diff changeset
2 -- Copyright (C) 2008-2010 Matthew Wild
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 2344
diff changeset
3 -- Copyright (C) 2008-2010 Waqas Hussain
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5500
diff changeset
4 --
758
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 615
diff changeset
5 -- This project is MIT/X11 licensed. Please see the
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 615
diff changeset
6 -- COPYING file in the source package for more information.
519
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 438
diff changeset
7 --
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 438
diff changeset
8
13654
39c35f7e6cfa mod_vcard: Add API to get hash of the vcard avatar
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
9 local base64 = require "prosody.util.encodings".base64;
39c35f7e6cfa mod_vcard: Add API to get hash of the vcard avatar
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
10 local sha1 = require "prosody.util.hashes".sha1;
12977
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 10552
diff changeset
11 local st = require "prosody.util.stanza"
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 10552
diff changeset
12 local jid_split = require "prosody.util.jid".split;
5500
eeea0eb2602a mod_auth_internal_hashed, mod_auth_internal_plain, mod_privacy, mod_private, mod_register, mod_vcard, mod_muc: Use module:open_store()
Kim Alvefur <zash@zash.se>
parents: 5017
diff changeset
13
eeea0eb2602a mod_auth_internal_hashed, mod_auth_internal_plain, mod_privacy, mod_private, mod_register, mod_vcard, mod_muc: Use module:open_store()
Kim Alvefur <zash@zash.se>
parents: 5017
diff changeset
14 local vcards = module:open_store();
86
a2085854c72c Added: vCard plugin: mod_vcard
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
15
2004
5033348feba8 mod_vcard: Cleaned up unused variables and global accesses.
Waqas Hussain <waqas20@gmail.com>
parents: 2003
diff changeset
16 module:add_feature("vcard-temp");
86
a2085854c72c Added: vCard plugin: mod_vcard
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
17
2004
5033348feba8 mod_vcard: Cleaned up unused variables and global accesses.
Waqas Hussain <waqas20@gmail.com>
parents: 2003
diff changeset
18 local function handle_vcard(event)
2001
2f73fe2b3edd mod_vcard: Moved completely to new event based hooks.
Waqas Hussain <waqas20@gmail.com>
parents: 2000
diff changeset
19 local session, stanza = event.origin, event.stanza;
2002
fa71261d8a15 mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 2001
diff changeset
20 local to = stanza.attr.to;
fa71261d8a15 mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 2001
diff changeset
21 if stanza.attr.type == "get" then
fa71261d8a15 mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 2001
diff changeset
22 local vCard;
fa71261d8a15 mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 2001
diff changeset
23 if to then
10552
f1cf8c08a09d mod_vcard: Remove unused variable [luacheck]
Kim Alvefur <zash@zash.se>
parents: 9228
diff changeset
24 local node = jid_split(to);
5500
eeea0eb2602a mod_auth_internal_hashed, mod_auth_internal_plain, mod_privacy, mod_private, mod_register, mod_vcard, mod_muc: Use module:open_store()
Kim Alvefur <zash@zash.se>
parents: 5017
diff changeset
25 vCard = st.deserialize(vcards:get(node)); -- load vCard for user or server
2002
fa71261d8a15 mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 2001
diff changeset
26 else
5500
eeea0eb2602a mod_auth_internal_hashed, mod_auth_internal_plain, mod_privacy, mod_private, mod_register, mod_vcard, mod_muc: Use module:open_store()
Kim Alvefur <zash@zash.se>
parents: 5017
diff changeset
27 vCard = st.deserialize(vcards:get(session.username));-- load user's own vCard
2002
fa71261d8a15 mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 2001
diff changeset
28 end
fa71261d8a15 mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 2001
diff changeset
29 if vCard then
fa71261d8a15 mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 2001
diff changeset
30 session.send(st.reply(stanza):add_child(vCard)); -- send vCard!
fa71261d8a15 mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 2001
diff changeset
31 else
fa71261d8a15 mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 2001
diff changeset
32 session.send(st.error_reply(stanza, "cancel", "item-not-found"));
fa71261d8a15 mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 2001
diff changeset
33 end
9228
e2e2aa76ea31 mod_private, mod_vcard: Use the usual comment on non-get received iqs.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 9219
diff changeset
34 else -- stanza.attr.type == "set"
2002
fa71261d8a15 mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 2001
diff changeset
35 if not to then
5500
eeea0eb2602a mod_auth_internal_hashed, mod_auth_internal_plain, mod_privacy, mod_private, mod_register, mod_vcard, mod_muc: Use module:open_store()
Kim Alvefur <zash@zash.se>
parents: 5017
diff changeset
36 if vcards:set(session.username, st.preserialize(stanza.tags[1])) then
2002
fa71261d8a15 mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 2001
diff changeset
37 session.send(st.reply(stanza));
13655
6902bb3dd196 mod_vcard: Fire event when vcard updated
Matthew Wild <mwild1@gmail.com>
parents: 13654
diff changeset
38 module:fire_event("vcard-updated", event);
1956
ec04b571fa86 mod_vcard: Add vcard_compatibility option to handle vcard stanzas routed to the full JID by ejabberd MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 1779
diff changeset
39 else
2002
fa71261d8a15 mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 2001
diff changeset
40 -- TODO unable to write file, file may be locked, etc, what's the correct error?
fa71261d8a15 mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 2001
diff changeset
41 session.send(st.error_reply(stanza, "wait", "internal-server-error"));
1956
ec04b571fa86 mod_vcard: Add vcard_compatibility option to handle vcard stanzas routed to the full JID by ejabberd MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 1779
diff changeset
42 end
2002
fa71261d8a15 mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 2001
diff changeset
43 else
fa71261d8a15 mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 2001
diff changeset
44 session.send(st.error_reply(stanza, "auth", "forbidden"));
1956
ec04b571fa86 mod_vcard: Add vcard_compatibility option to handle vcard stanzas routed to the full JID by ejabberd MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 1779
diff changeset
45 end
ec04b571fa86 mod_vcard: Add vcard_compatibility option to handle vcard stanzas routed to the full JID by ejabberd MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 1779
diff changeset
46 end
2002
fa71261d8a15 mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents: 2001
diff changeset
47 return true;
1956
ec04b571fa86 mod_vcard: Add vcard_compatibility option to handle vcard stanzas routed to the full JID by ejabberd MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 1779
diff changeset
48 end
ec04b571fa86 mod_vcard: Add vcard_compatibility option to handle vcard stanzas routed to the full JID by ejabberd MUC rooms
Matthew Wild <mwild1@gmail.com>
parents: 1779
diff changeset
49
2001
2f73fe2b3edd mod_vcard: Moved completely to new event based hooks.
Waqas Hussain <waqas20@gmail.com>
parents: 2000
diff changeset
50 module:hook("iq/bare/vcard-temp:vCard", handle_vcard);
2f73fe2b3edd mod_vcard: Moved completely to new event based hooks.
Waqas Hussain <waqas20@gmail.com>
parents: 2000
diff changeset
51 module:hook("iq/host/vcard-temp:vCard", handle_vcard);
13654
39c35f7e6cfa mod_vcard: Add API to get hash of the vcard avatar
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
52
39c35f7e6cfa mod_vcard: Add API to get hash of the vcard avatar
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
53 function get_avatar_hash(username)
39c35f7e6cfa mod_vcard: Add API to get hash of the vcard avatar
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
54 local vcard = st.deserialize(vcards:get(username));
39c35f7e6cfa mod_vcard: Add API to get hash of the vcard avatar
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
55 if not vcard then return end
39c35f7e6cfa mod_vcard: Add API to get hash of the vcard avatar
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
56 local photo = vcard:get_child("PHOTO");
39c35f7e6cfa mod_vcard: Add API to get hash of the vcard avatar
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
57 if not photo then return end
39c35f7e6cfa mod_vcard: Add API to get hash of the vcard avatar
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
58
39c35f7e6cfa mod_vcard: Add API to get hash of the vcard avatar
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
59 local photo_b64 = photo:get_child_text("BINVAL");
39c35f7e6cfa mod_vcard: Add API to get hash of the vcard avatar
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
60 local photo_raw = photo_b64 and base64.decode(photo_b64);
39c35f7e6cfa mod_vcard: Add API to get hash of the vcard avatar
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
61 return (sha1(photo_raw, true));
39c35f7e6cfa mod_vcard: Add API to get hash of the vcard avatar
Matthew Wild <mwild1@gmail.com>
parents: 12977
diff changeset
62 end