Software / code / prosody
Annotate
plugins/mod_vcard.lua @ 13869:f44f2a8a8c37 13.0
mod_admin_shell: Fix matching logic in s2s:close (Thanks Menel)
It was matching 'from' on the wrong field and the boolean logic was
wrong.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Mon, 28 Apr 2025 19:41:19 +0200 |
| parent | 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 |
|
13658
33806569d7c5
mod_vcard: Switch store name for MUC hosts (thanks lissine)
Matthew Wild <mwild1@gmail.com>
parents:
13656
diff
changeset
|
15 local store_name = module:get_option_string("vcard_store_name"); |
|
33806569d7c5
mod_vcard: Switch store name for MUC hosts (thanks lissine)
Matthew Wild <mwild1@gmail.com>
parents:
13656
diff
changeset
|
16 |
|
33806569d7c5
mod_vcard: Switch store name for MUC hosts (thanks lissine)
Matthew Wild <mwild1@gmail.com>
parents:
13656
diff
changeset
|
17 local is_component = module:get_host_type() == "component"; |
|
33806569d7c5
mod_vcard: Switch store name for MUC hosts (thanks lissine)
Matthew Wild <mwild1@gmail.com>
parents:
13656
diff
changeset
|
18 if is_component and not store_name and module:get_option_string("component_module") == "muc" then |
|
33806569d7c5
mod_vcard: Switch store name for MUC hosts (thanks lissine)
Matthew Wild <mwild1@gmail.com>
parents:
13656
diff
changeset
|
19 store_name = "vcard_muc"; |
|
33806569d7c5
mod_vcard: Switch store name for MUC hosts (thanks lissine)
Matthew Wild <mwild1@gmail.com>
parents:
13656
diff
changeset
|
20 end |
|
33806569d7c5
mod_vcard: Switch store name for MUC hosts (thanks lissine)
Matthew Wild <mwild1@gmail.com>
parents:
13656
diff
changeset
|
21 |
|
33806569d7c5
mod_vcard: Switch store name for MUC hosts (thanks lissine)
Matthew Wild <mwild1@gmail.com>
parents:
13656
diff
changeset
|
22 local vcards = module:open_store(store_name); |
|
86
a2085854c72c
Added: vCard plugin: mod_vcard
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
23 |
|
2004
5033348feba8
mod_vcard: Cleaned up unused variables and global accesses.
Waqas Hussain <waqas20@gmail.com>
parents:
2003
diff
changeset
|
24 module:add_feature("vcard-temp"); |
|
86
a2085854c72c
Added: vCard plugin: mod_vcard
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
25 |
|
13656
4298e6565fec
mod_vcard: Some support for handling vcards on components
Matthew Wild <mwild1@gmail.com>
parents:
13655
diff
changeset
|
26 |
|
2004
5033348feba8
mod_vcard: Cleaned up unused variables and global accesses.
Waqas Hussain <waqas20@gmail.com>
parents:
2003
diff
changeset
|
27 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
|
28 local session, stanza = event.origin, event.stanza; |
|
2002
fa71261d8a15
mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
2001
diff
changeset
|
29 local to = stanza.attr.to; |
|
fa71261d8a15
mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
2001
diff
changeset
|
30 if stanza.attr.type == "get" then |
|
fa71261d8a15
mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
2001
diff
changeset
|
31 local vCard; |
|
fa71261d8a15
mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
2001
diff
changeset
|
32 if to then |
|
10552
f1cf8c08a09d
mod_vcard: Remove unused variable [luacheck]
Kim Alvefur <zash@zash.se>
parents:
9228
diff
changeset
|
33 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
|
34 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
|
35 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
|
36 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
|
37 end |
|
fa71261d8a15
mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
2001
diff
changeset
|
38 if vCard then |
|
fa71261d8a15
mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
2001
diff
changeset
|
39 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
|
40 else |
|
fa71261d8a15
mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
2001
diff
changeset
|
41 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
|
42 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
|
43 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
|
44 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
|
45 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
|
46 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
|
47 session.send(st.reply(stanza)); |
|
13655
6902bb3dd196
mod_vcard: Fire event when vcard updated
Matthew Wild <mwild1@gmail.com>
parents:
13654
diff
changeset
|
48 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
|
49 else |
|
2002
fa71261d8a15
mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
2001
diff
changeset
|
50 -- 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
|
51 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
|
52 end |
|
2002
fa71261d8a15
mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
2001
diff
changeset
|
53 else |
|
fa71261d8a15
mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
2001
diff
changeset
|
54 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
|
55 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
|
56 end |
|
2002
fa71261d8a15
mod_vcard: Refactoring and cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
2001
diff
changeset
|
57 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
|
58 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
|
59 |
|
2001
2f73fe2b3edd
mod_vcard: Moved completely to new event based hooks.
Waqas Hussain <waqas20@gmail.com>
parents:
2000
diff
changeset
|
60 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
|
61 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
|
62 |
|
39c35f7e6cfa
mod_vcard: Add API to get hash of the vcard avatar
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
63 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
|
64 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
|
65 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
|
66 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
|
67 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
|
68 |
|
39c35f7e6cfa
mod_vcard: Add API to get hash of the vcard avatar
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
69 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
|
70 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
|
71 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
|
72 end |