Software /
code /
prosody-modules
Annotate
mod_profile/mod_profile.lua @ 1441:07c9306c2c1f
mod_profile: Don't pass old vcard data trough vcard lib
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 20 Jun 2014 18:14:26 +0200 |
parent | 1424:9892a537e7fc |
child | 1442:253e374824a8 |
rev | line source |
---|---|
1419
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 -- mod_profile |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 local st = require"util.stanza"; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 local jid_split, jid_bare = import("util.jid", "split", "bare"); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 local is_admin = require"core.usermanager".is_admin; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 local vcard = require"util.vcard"; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 local base64 = require"util.encodings".base64; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 local sha1 = require"util.hashes".sha1; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 local pep_plus; |
1420
808950ab007b
mod_profile: Integrate with mod_pep_plus by default
Kim Alvefur <zash@zash.se>
parents:
1419
diff
changeset
|
11 if module:get_host_type() == "local" and module:get_option_boolean("vcard_to_pep", true) then |
1419
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 pep_plus = module:depends"pep_plus"; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 local storage = module:open_store(); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 local legacy_storage = module:open_store("vcard"); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 local function get_item(vcard, name) |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 local item; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 for i=1, #vcard do |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 item=vcard[i]; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 if item.name == name then |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 return item, i; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 local magic_mime = { |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 ["\137PNG\r\n\026\n"] = "image/png"; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 ["\255\216"] = "image/jpeg"; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 ["GIF87a"] = "image/gif"; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 ["GIF89a"] = "image/gif"; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 ["<?xml"] = "image/svg+xml"; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 } |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 local function identify(data) |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 for magic, mime in pairs(magic_mime) do |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 if data:sub(1, #magic) == magic then |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 return mime; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 return "application/octet-stream"; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 local function update_pep(username, data) |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
45 local pep = pep_plus.get_pep_service(username.."@"..module.host); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
46 if vcard.to_vcard4 then |
1422
c3882787ae06
mod_profile: Purge nodes before publishing new items
Kim Alvefur <zash@zash.se>
parents:
1420
diff
changeset
|
47 pep:purge("urn:xmpp:vcard4", true); |
1424
9892a537e7fc
mod_profile: Add id to item tag too.
Kim Alvefur <zash@zash.se>
parents:
1423
diff
changeset
|
48 pep:publish("urn:xmpp:vcard4", true, "current", st.stanza("item", {id="current"}) |
9892a537e7fc
mod_profile: Add id to item tag too.
Kim Alvefur <zash@zash.se>
parents:
1423
diff
changeset
|
49 :add_child(vcard.to_vcard4(data))); |
1419
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
50 end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
51 |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 local nickname = get_item(data, "NICKNAME"); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
53 if nickname and nickname[1] then |
1422
c3882787ae06
mod_profile: Purge nodes before publishing new items
Kim Alvefur <zash@zash.se>
parents:
1420
diff
changeset
|
54 pep:purge("http://jabber.org/protocol/nick", true); |
1424
9892a537e7fc
mod_profile: Add id to item tag too.
Kim Alvefur <zash@zash.se>
parents:
1423
diff
changeset
|
55 pep:publish("http://jabber.org/protocol/nick", true, "current", st.stanza("item", {id="current"}) |
1419
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
56 :tag("nick", { xmlns="http://jabber.org/protocol/nick" }):text(nickname[1])); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
57 end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
58 |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
59 local photo = get_item(data, "PHOTO"); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
60 if photo and photo[1] then |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
61 local photo_raw = base64.decode(photo[1]); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
62 local photo_hash = sha1(photo_raw, true); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
63 |
1422
c3882787ae06
mod_profile: Purge nodes before publishing new items
Kim Alvefur <zash@zash.se>
parents:
1420
diff
changeset
|
64 pep:purge("urn:xmpp:avatar:metadata", true); |
c3882787ae06
mod_profile: Purge nodes before publishing new items
Kim Alvefur <zash@zash.se>
parents:
1420
diff
changeset
|
65 pep:purge("urn:xmpp:avatar:data", true); |
1424
9892a537e7fc
mod_profile: Add id to item tag too.
Kim Alvefur <zash@zash.se>
parents:
1423
diff
changeset
|
66 pep:publish("urn:xmpp:avatar:metadata", true, "current", st.stanza("item", {id="current"}) |
1419
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
67 :tag("metadata", { |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
68 xmlns="urn:xmpp:avatar:metadata", |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
69 bytes = tostring(#photo_raw), |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
70 id = photo_hash, |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
71 type = identify(photo_raw), |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
72 })); |
1424
9892a537e7fc
mod_profile: Add id to item tag too.
Kim Alvefur <zash@zash.se>
parents:
1423
diff
changeset
|
73 pep:publish("urn:xmpp:avatar:data", true, photo_hash, st.stanza("item", {id="current"}) |
1419
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
74 :tag("data", { xmlns="urn:xmpp:avatar:data" }):text(photo[1])); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
75 end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
76 end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
78 -- The "temporary" vCard XEP-0054 part |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
79 module:add_feature("vcard-temp"); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
80 |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
81 local function handle_get(event) |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
82 local origin, stanza = event.origin, event.stanza; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
83 local username = origin.username; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
84 local to = stanza.attr.to; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
85 if to then username = jid_split(to); end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
86 local data = storage:get(username); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
87 if not data then |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
88 data = legacy_storage:get(username); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
89 data = data and st.deserialize(data); |
1441
07c9306c2c1f
mod_profile: Don't pass old vcard data trough vcard lib
Kim Alvefur <zash@zash.se>
parents:
1424
diff
changeset
|
90 if data then |
07c9306c2c1f
mod_profile: Don't pass old vcard data trough vcard lib
Kim Alvefur <zash@zash.se>
parents:
1424
diff
changeset
|
91 return origin.send(st.reply(stanza):add_child(data)); |
07c9306c2c1f
mod_profile: Don't pass old vcard data trough vcard lib
Kim Alvefur <zash@zash.se>
parents:
1424
diff
changeset
|
92 end |
1419
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
93 end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
94 if not data then |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
95 return origin.send(st.error_reply(stanza, "cancel", "item-not-found")); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
96 end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
97 return origin.send(st.reply(stanza):add_child(vcard.to_xep54(data))); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
98 end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
99 |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
100 local function handle_set(event) |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
101 local origin, stanza = event.origin, event.stanza; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
102 local data = vcard.from_xep54(stanza.tags[1]); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
103 local username = origin.username; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
104 local to = stanza.attr.to; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
105 if to then |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
106 if not is_admin(jid_bare(stanza.attr.from), module.host) then |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
107 return origin.send(st.error_reply(stanza, "auth", "forbidden")); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
108 end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
109 username = jid_split(to); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
110 end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
111 local ok, err = storage:set(username, data); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
112 if not ok then |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
113 return origin.send(st.error_reply(stanza, "cancel", "internal-server-error", err)); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
114 end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
115 |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
116 if pep_plus and username then |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
117 update_pep(username, data); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
118 end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
119 |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
120 return origin.send(st.reply(stanza)); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
121 end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
122 |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
123 module:hook("iq-get/bare/vcard-temp:vCard", handle_get); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
124 module:hook("iq-get/host/vcard-temp:vCard", handle_get); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
125 |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
126 module:hook("iq-set/bare/vcard-temp:vCard", handle_set); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
127 module:hook("iq-set/host/vcard-temp:vCard", handle_set); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
128 |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
129 -- The vCard4 part |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
130 if vcard.to_vcard4 then |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
131 module:add_feature("urn:ietf:params:xml:ns:vcard-4.0"); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
132 |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
133 module:hook("iq-get/bare/urn:ietf:params:xml:ns:vcard-4.0:vcard", function(event) |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
134 local origin, stanza = event.origin, event.stanza; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
135 local username = jid_split(stanza.attr.to) or origin.username; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
136 local data = storage:get(username); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
137 if not data then |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
138 return origin.send(st.error_reply(stanza, "cancel", "item-not-found")); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
139 end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
140 return origin.send(st.reply(stanza):add_child(vcard.to_vcard4(data))); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
141 end); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
142 |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
143 if vcard.from_vcard4 then |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
144 module:hook("iq-set/self/urn:ietf:params:xml:ns:vcard-4.0:vcard", function(event) |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
145 local origin, stanza = event.origin, event.stanza; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
146 local ok, err = storage:set(origin.username, vcard.from_vcard4(stanza.tags[1])); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
147 if not ok then |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
148 return origin.send(st.error_reply(stanza, "cancel", "internal-server-error", err)); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
149 end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
150 return origin.send(st.reply(stanza)); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
151 end); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
152 else |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
153 module:hook("iq-set/self/urn:ietf:params:xml:ns:vcard-4.0:vcard", function(event) |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
154 local origin, stanza = event.origin, event.stanza; |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
155 return origin.send(st.error_reply(stanza, "cancel", "feature-not-implemented")); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
156 end); |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
157 end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
158 end |
877dc87539ff
mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
159 |