Software /
code /
prosody
Annotate
plugins/mod_vcard.lua @ 13744:34ac05f6bd10 13.0
core.configmanager: Fix reporting delayed warnings from global section
A Credential in the global section would be stored at
delayed_warnings["*/secret"], but get("example.com","secret") would look
for delayed_warnings["example.com/secret"]
Storing the warnings in the config itself has the unfortunate
side-effect that the config now contains util.error objects, which may
be awkward if something bypasses get(). Should rawget() also do this
filtering? getconfig() too?
Currently this only affects prosodyctl, so maybe it won't be much of a
problem.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 22 Feb 2025 00:08:18 +0100 |
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 |