Software /
code /
prosody
Annotate
plugins/mod_vcard.lua @ 13656:4298e6565fec
mod_vcard: Some support for handling vcards on components
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 06 Feb 2025 17:03:03 +0000 |
parent | 13655:6902bb3dd196 |
child | 13658:33806569d7c5 |
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 | 5 -- This project is MIT/X11 licensed. Please see the |
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; |
13656
4298e6565fec
mod_vcard: Some support for handling vcards on components
Matthew Wild <mwild1@gmail.com>
parents:
13655
diff
changeset
|
10 local jid = require "prosody.util.jid"; |
13654
39c35f7e6cfa
mod_vcard: Add API to get hash of the vcard avatar
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
11 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
|
12 local st = require "prosody.util.stanza" |
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
10552
diff
changeset
|
13 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
|
14 |
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
|
15 local vcards = module:open_store(); |
86
a2085854c72c
Added: vCard plugin: mod_vcard
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
16 |
2004
5033348feba8
mod_vcard: Cleaned up unused variables and global accesses.
Waqas Hussain <waqas20@gmail.com>
parents:
2003
diff
changeset
|
17 module:add_feature("vcard-temp"); |
86
a2085854c72c
Added: vCard plugin: mod_vcard
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
18 |
13656
4298e6565fec
mod_vcard: Some support for handling vcards on components
Matthew Wild <mwild1@gmail.com>
parents:
13655
diff
changeset
|
19 local is_component = module:get_host_type() == "component"; |
4298e6565fec
mod_vcard: Some support for handling vcards on components
Matthew Wild <mwild1@gmail.com>
parents:
13655
diff
changeset
|
20 |
2004
5033348feba8
mod_vcard: Cleaned up unused variables and global accesses.
Waqas Hussain <waqas20@gmail.com>
parents:
2003
diff
changeset
|
21 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
|
22 local session, stanza = event.origin, event.stanza; |
2002
fa71261d8a15
mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
2001
diff
changeset
|
23 local to = stanza.attr.to; |
fa71261d8a15
mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
2001
diff
changeset
|
24 if stanza.attr.type == "get" then |
fa71261d8a15
mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
2001
diff
changeset
|
25 local vCard; |
fa71261d8a15
mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
2001
diff
changeset
|
26 if to then |
10552
f1cf8c08a09d
mod_vcard: Remove unused variable [luacheck]
Kim Alvefur <zash@zash.se>
parents:
9228
diff
changeset
|
27 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
|
28 vCard = st.deserialize(vcards:get(node)); -- load vCard for user or server |
13656
4298e6565fec
mod_vcard: Some support for handling vcards on components
Matthew Wild <mwild1@gmail.com>
parents:
13655
diff
changeset
|
29 elseif not is_component 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
|
30 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
|
31 end |
fa71261d8a15
mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
2001
diff
changeset
|
32 if vCard then |
fa71261d8a15
mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
2001
diff
changeset
|
33 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
|
34 else |
fa71261d8a15
mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
2001
diff
changeset
|
35 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
|
36 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
|
37 else -- stanza.attr.type == "set" |
13656
4298e6565fec
mod_vcard: Some support for handling vcards on components
Matthew Wild <mwild1@gmail.com>
parents:
13655
diff
changeset
|
38 if not to or (is_component and event.allow_vcard_modification) then |
4298e6565fec
mod_vcard: Some support for handling vcards on components
Matthew Wild <mwild1@gmail.com>
parents:
13655
diff
changeset
|
39 local node = is_component and jid.node(stanza.attr.to) or session.username; |
4298e6565fec
mod_vcard: Some support for handling vcards on components
Matthew Wild <mwild1@gmail.com>
parents:
13655
diff
changeset
|
40 if vcards:set(node, st.preserialize(stanza.tags[1])) then |
2002
fa71261d8a15
mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
2001
diff
changeset
|
41 session.send(st.reply(stanza)); |
13655
6902bb3dd196
mod_vcard: Fire event when vcard updated
Matthew Wild <mwild1@gmail.com>
parents:
13654
diff
changeset
|
42 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
|
43 else |
2002
fa71261d8a15
mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
2001
diff
changeset
|
44 -- 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
|
45 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
|
46 end |
2002
fa71261d8a15
mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
2001
diff
changeset
|
47 else |
fa71261d8a15
mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
2001
diff
changeset
|
48 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
|
49 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
|
50 end |
2002
fa71261d8a15
mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
2001
diff
changeset
|
51 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
|
52 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
|
53 |
2001
2f73fe2b3edd
mod_vcard: Moved completely to new event based hooks.
Waqas Hussain <waqas20@gmail.com>
parents:
2000
diff
changeset
|
54 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
|
55 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
|
56 |
39c35f7e6cfa
mod_vcard: Add API to get hash of the vcard avatar
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
57 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
|
58 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
|
59 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
|
60 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
|
61 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
|
62 |
39c35f7e6cfa
mod_vcard: Add API to get hash of the vcard avatar
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
63 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
|
64 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
|
65 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
|
66 end |