Annotate

mod_profile/mod_profile.lua @ 3186:1fe5b156d220

mod_profile: Add support for XEP-0398
author Kim Alvefur <zash@zash.se>
date Fri, 13 Jul 2018 01:13:37 +0200
parent 3185:973caebcb40b
child 3187:7c450c27d4ba
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
3185
973caebcb40b mod_profile: Add copyright header
Kim Alvefur <zash@zash.se>
parents: 3184
diff changeset
2 -- Copyright (C) 2014-2018 Kim Alvefur
973caebcb40b mod_profile: Add copyright header
Kim Alvefur <zash@zash.se>
parents: 3184
diff changeset
3 --
973caebcb40b mod_profile: Add copyright header
Kim Alvefur <zash@zash.se>
parents: 3184
diff changeset
4 -- This file is MIT licensed.
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
5
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 st = require"util.stanza";
1743
8fbe16c83807 mod_profile: Don't use import()
Kim Alvefur <zash@zash.se>
parents: 1516
diff changeset
7 local jid_split = require"util.jid".split;
8fbe16c83807 mod_profile: Don't use import()
Kim Alvefur <zash@zash.se>
parents: 1516
diff changeset
8 local jid_bare = require"util.jid".bare;
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
9 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
10 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
11 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
12 local sha1 = require"util.hashes".sha1;
1446
843769eb40c3 mod_profile: Don't include photo in vCard4 version (use XEP-0084 instead)
Kim Alvefur <zash@zash.se>
parents: 1442
diff changeset
13 local t_insert, t_remove = table.insert, table.remove;
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
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 pep_plus;
1420
808950ab007b mod_profile: Integrate with mod_pep_plus by default
Kim Alvefur <zash@zash.se>
parents: 1419
diff changeset
16 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
17 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
18 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
19
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 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
21 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
22
3186
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
23 module:hook("account-disco-info", function (event)
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
24 event.reply:tag("feature", { var = "urn:xmpp:pep-vcard-conversion:0" }):up();
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
25 end);
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
26
3181
1f2272cda0d7 mod_profile: Ignore shadowed variable name
Kim Alvefur <zash@zash.se>
parents: 2790
diff changeset
27 local function get_item(vcard, name) -- luacheck: ignore 431
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
28 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
29 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
30 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
31 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
32 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
33 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
34 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
35 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
36
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 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
38 ["\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
39 ["\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
40 ["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
41 ["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
42 ["<?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
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 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
45 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
46 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
47 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
48 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
49 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
50 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
51 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
52
1515
f367d7cbfaa6 mod_profile: Use module:handle_items() for PEP node bootstrapping (see trunk 388786af0dd2)
Kim Alvefur <zash@zash.se>
parents: 1503
diff changeset
53 local function update_pep(username, data, pep)
2790
5163f7905371 mod_profile: Update get_pep_service() signature to match recent changes to mod_pep_plus (in trunk)
Kim Alvefur <zash@zash.se>
parents: 2413
diff changeset
54 pep = pep or pep_plus.get_pep_service(username);
1446
843769eb40c3 mod_profile: Don't include photo in vCard4 version (use XEP-0084 instead)
Kim Alvefur <zash@zash.se>
parents: 1442
diff changeset
55 local photo, p = get_item(data, "PHOTO");
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 if vcard.to_vcard4 then
1446
843769eb40c3 mod_profile: Don't include photo in vCard4 version (use XEP-0084 instead)
Kim Alvefur <zash@zash.se>
parents: 1442
diff changeset
57 if p then t_remove(data, p); end
1422
c3882787ae06 mod_profile: Purge nodes before publishing new items
Kim Alvefur <zash@zash.se>
parents: 1420
diff changeset
58 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
59 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
60 :add_child(vcard.to_vcard4(data)));
1446
843769eb40c3 mod_profile: Don't include photo in vCard4 version (use XEP-0084 instead)
Kim Alvefur <zash@zash.se>
parents: 1442
diff changeset
61 if p then t_insert(data, p, photo); 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
62 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
63
877dc87539ff mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff changeset
64 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
65 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
66 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
67 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
68 :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
69 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
70
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 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
72 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
73 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
74
1422
c3882787ae06 mod_profile: Purge nodes before publishing new items
Kim Alvefur <zash@zash.se>
parents: 1420
diff changeset
75 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
76 pep:purge("urn:xmpp:avatar:data", true);
1503
c4c9ccc6e6c9 mod_profile: Set metadata nodes ItemID to the same hash as the data node
Kim Alvefur <zash@zash.se>
parents: 1499
diff changeset
77 pep:publish("urn:xmpp:avatar:metadata", true, photo_hash, st.stanza("item", {id=photo_hash})
1469
019746bba318 mod_profile: Add the missing <info> child element and move info attributes there
Kim Alvefur <zash@zash.se>
parents: 1446
diff changeset
78 :tag("metadata", { xmlns="urn:xmpp:avatar:metadata" })
019746bba318 mod_profile: Add the missing <info> child element and move info attributes there
Kim Alvefur <zash@zash.se>
parents: 1446
diff changeset
79 :tag("info", {
019746bba318 mod_profile: Add the missing <info> child element and move info attributes there
Kim Alvefur <zash@zash.se>
parents: 1446
diff changeset
80 bytes = tostring(#photo_raw),
019746bba318 mod_profile: Add the missing <info> child element and move info attributes there
Kim Alvefur <zash@zash.se>
parents: 1446
diff changeset
81 id = photo_hash,
019746bba318 mod_profile: Add the missing <info> child element and move info attributes there
Kim Alvefur <zash@zash.se>
parents: 1446
diff changeset
82 type = identify(photo_raw),
019746bba318 mod_profile: Add the missing <info> child element and move info attributes there
Kim Alvefur <zash@zash.se>
parents: 1446
diff changeset
83 }));
1470
b291a9423e0f mod_profile: Fix wrong use of "current" as id for avatar data
Kim Alvefur <zash@zash.se>
parents: 1469
diff changeset
84 pep:publish("urn:xmpp:avatar:data", true, photo_hash, st.stanza("item", {id=photo_hash})
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
85 :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
86 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
87 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
88
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 -- 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
90 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
91
877dc87539ff mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff changeset
92 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
93 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
94 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
95 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
96 if to then username = jid_split(to); end
1745
851cb0b3d584 mod_profile: Return error on storage error, don't attempt to migrate from old storage
Kim Alvefur <zash@zash.se>
parents: 1744
diff changeset
97 local data, err = storage:get(username);
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
98 if not data then
1745
851cb0b3d584 mod_profile: Return error on storage error, don't attempt to migrate from old storage
Kim Alvefur <zash@zash.se>
parents: 1744
diff changeset
99 if err then
851cb0b3d584 mod_profile: Return error on storage error, don't attempt to migrate from old storage
Kim Alvefur <zash@zash.se>
parents: 1744
diff changeset
100 origin.send(st.error_reply(stanza, "cancel", "internal-server-error", err));
851cb0b3d584 mod_profile: Return error on storage error, don't attempt to migrate from old storage
Kim Alvefur <zash@zash.se>
parents: 1744
diff changeset
101 return true;
851cb0b3d584 mod_profile: Return error on storage error, don't attempt to migrate from old storage
Kim Alvefur <zash@zash.se>
parents: 1744
diff changeset
102 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
103 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
104 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
105 if data then
1744
fbef84033fae mod_profile: Explicitly return true from handlers, session.send can return nil under some conditions
Kim Alvefur <zash@zash.se>
parents: 1743
diff changeset
106 origin.send(st.reply(stanza):add_child(data));
fbef84033fae mod_profile: Explicitly return true from handlers, session.send can return nil under some conditions
Kim Alvefur <zash@zash.se>
parents: 1743
diff changeset
107 return true;
1441
07c9306c2c1f mod_profile: Don't pass old vcard data trough vcard lib
Kim Alvefur <zash@zash.se>
parents: 1424
diff changeset
108 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
109 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
110 if not data then
1744
fbef84033fae mod_profile: Explicitly return true from handlers, session.send can return nil under some conditions
Kim Alvefur <zash@zash.se>
parents: 1743
diff changeset
111 origin.send(st.error_reply(stanza, "cancel", "item-not-found"));
fbef84033fae mod_profile: Explicitly return true from handlers, session.send can return nil under some conditions
Kim Alvefur <zash@zash.se>
parents: 1743
diff changeset
112 return true;
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
113 end
1744
fbef84033fae mod_profile: Explicitly return true from handlers, session.send can return nil under some conditions
Kim Alvefur <zash@zash.se>
parents: 1743
diff changeset
114 origin.send(st.reply(stanza):add_child(vcard.to_xep54(data)));
fbef84033fae mod_profile: Explicitly return true from handlers, session.send can return nil under some conditions
Kim Alvefur <zash@zash.se>
parents: 1743
diff changeset
115 return true;
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
116 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
117
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 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
119 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
120 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
121 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
122 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
123 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
124 if not is_admin(jid_bare(stanza.attr.from), module.host) then
1744
fbef84033fae mod_profile: Explicitly return true from handlers, session.send can return nil under some conditions
Kim Alvefur <zash@zash.se>
parents: 1743
diff changeset
125 origin.send(st.error_reply(stanza, "auth", "forbidden"));
fbef84033fae mod_profile: Explicitly return true from handlers, session.send can return nil under some conditions
Kim Alvefur <zash@zash.se>
parents: 1743
diff changeset
126 return true;
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
127 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
128 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
129 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
130 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
131 if not ok then
1744
fbef84033fae mod_profile: Explicitly return true from handlers, session.send can return nil under some conditions
Kim Alvefur <zash@zash.se>
parents: 1743
diff changeset
132 origin.send(st.error_reply(stanza, "cancel", "internal-server-error", err));
fbef84033fae mod_profile: Explicitly return true from handlers, session.send can return nil under some conditions
Kim Alvefur <zash@zash.se>
parents: 1743
diff changeset
133 return true;
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
134 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
135
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 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
137 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
138 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
139
1744
fbef84033fae mod_profile: Explicitly return true from handlers, session.send can return nil under some conditions
Kim Alvefur <zash@zash.se>
parents: 1743
diff changeset
140 origin.send(st.reply(stanza));
fbef84033fae mod_profile: Explicitly return true from handlers, session.send can return nil under some conditions
Kim Alvefur <zash@zash.se>
parents: 1743
diff changeset
141 return true;
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
142 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
143
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-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
145 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
146
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 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
148 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
149
1516
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
150 local function on_publish(event)
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
151 if event.actor == true then return end -- Not from a client
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
152 local node, item = event.node, event.item;
2413
b64c0150d663 mod_profile: Add warning and debug logging in order to catch a weird event
Kim Alvefur <zash@zash.se>
parents: 1745
diff changeset
153 local username, host = jid_split(event.actor);
b64c0150d663 mod_profile: Add warning and debug logging in order to catch a weird event
Kim Alvefur <zash@zash.se>
parents: 1745
diff changeset
154 if host ~= module.host then
b64c0150d663 mod_profile: Add warning and debug logging in order to catch a weird event
Kim Alvefur <zash@zash.se>
parents: 1745
diff changeset
155 module:log("warn", "on_publish() called for non-local actor");
b64c0150d663 mod_profile: Add warning and debug logging in order to catch a weird event
Kim Alvefur <zash@zash.se>
parents: 1745
diff changeset
156 for k,v in pairs(event) do
3184
c25853bc387b mod_profile: Fix typo
Kim Alvefur <zash@zash.se>
parents: 3181
diff changeset
157 module:log("debug", "event[%q] = %q", k, v);
2413
b64c0150d663 mod_profile: Add warning and debug logging in order to catch a weird event
Kim Alvefur <zash@zash.se>
parents: 1745
diff changeset
158 end
b64c0150d663 mod_profile: Add warning and debug logging in order to catch a weird event
Kim Alvefur <zash@zash.se>
parents: 1745
diff changeset
159 return;
b64c0150d663 mod_profile: Add warning and debug logging in order to catch a weird event
Kim Alvefur <zash@zash.se>
parents: 1745
diff changeset
160 end
1516
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
161 local data = storage:get(username) or {};
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
162 if node == "urn:xmpp:avatar:data" then
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
163 local new_photo = item:get_child_text("data", "urn:xmpp:avatar:data");
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
164 new_photo = new_photo and { name = "PHOTO"; ENCODING = { "b" }; new_photo } or nil;
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
165 local _, i = get_item(data, "PHOTO")
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
166 if new_photo then
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
167 data[i or #data+1] = new_photo;
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
168 elseif i then
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
169 table.remove(data, i);
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
170 end
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
171 elseif node == "http://jabber.org/protocol/nick" then
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
172 local new_nick = item:get_child_text("nick", "http://jabber.org/protocol/nick");
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
173 new_nick = new_nick and new_nick ~= "" and { name = "NICKNAME"; new_nick } or nil;
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
174 local _, i = get_item(data, "NICKNAME")
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
175 if new_nick then
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
176 data[i or #data+1] = new_nick;
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
177 elseif i then
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
178 table.remove(data, i);
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
179 end
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
180 else
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
181 return;
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
182 end
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
183 storage:set(username, data);
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
184 end
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
185
1515
f367d7cbfaa6 mod_profile: Use module:handle_items() for PEP node bootstrapping (see trunk 388786af0dd2)
Kim Alvefur <zash@zash.se>
parents: 1503
diff changeset
186 local function pep_service_added(event)
f367d7cbfaa6 mod_profile: Use module:handle_items() for PEP node bootstrapping (see trunk 388786af0dd2)
Kim Alvefur <zash@zash.se>
parents: 1503
diff changeset
187 local item = event.item;
f367d7cbfaa6 mod_profile: Use module:handle_items() for PEP node bootstrapping (see trunk 388786af0dd2)
Kim Alvefur <zash@zash.se>
parents: 1503
diff changeset
188 local service, username = item.service, jid_split(item.jid);
1516
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
189 service.events.add_handler("item-published", on_publish);
1515
f367d7cbfaa6 mod_profile: Use module:handle_items() for PEP node bootstrapping (see trunk 388786af0dd2)
Kim Alvefur <zash@zash.se>
parents: 1503
diff changeset
190 local data = storage:get(username);
f367d7cbfaa6 mod_profile: Use module:handle_items() for PEP node bootstrapping (see trunk 388786af0dd2)
Kim Alvefur <zash@zash.se>
parents: 1503
diff changeset
191 if data then
f367d7cbfaa6 mod_profile: Use module:handle_items() for PEP node bootstrapping (see trunk 388786af0dd2)
Kim Alvefur <zash@zash.se>
parents: 1503
diff changeset
192 update_pep(username, data, service);
1442
253e374824a8 mod_profile: Load profile into PEP on initial presence
Kim Alvefur <zash@zash.se>
parents: 1441
diff changeset
193 end
1515
f367d7cbfaa6 mod_profile: Use module:handle_items() for PEP node bootstrapping (see trunk 388786af0dd2)
Kim Alvefur <zash@zash.se>
parents: 1503
diff changeset
194 end
f367d7cbfaa6 mod_profile: Use module:handle_items() for PEP node bootstrapping (see trunk 388786af0dd2)
Kim Alvefur <zash@zash.se>
parents: 1503
diff changeset
195
f367d7cbfaa6 mod_profile: Use module:handle_items() for PEP node bootstrapping (see trunk 388786af0dd2)
Kim Alvefur <zash@zash.se>
parents: 1503
diff changeset
196 local function pep_service_removed()
f367d7cbfaa6 mod_profile: Use module:handle_items() for PEP node bootstrapping (see trunk 388786af0dd2)
Kim Alvefur <zash@zash.se>
parents: 1503
diff changeset
197 -- This would happen when mod_pep_plus gets unloaded, but this module gets unloaded before that
f367d7cbfaa6 mod_profile: Use module:handle_items() for PEP node bootstrapping (see trunk 388786af0dd2)
Kim Alvefur <zash@zash.se>
parents: 1503
diff changeset
198 end
f367d7cbfaa6 mod_profile: Use module:handle_items() for PEP node bootstrapping (see trunk 388786af0dd2)
Kim Alvefur <zash@zash.se>
parents: 1503
diff changeset
199
f367d7cbfaa6 mod_profile: Use module:handle_items() for PEP node bootstrapping (see trunk 388786af0dd2)
Kim Alvefur <zash@zash.se>
parents: 1503
diff changeset
200 function module.load()
f367d7cbfaa6 mod_profile: Use module:handle_items() for PEP node bootstrapping (see trunk 388786af0dd2)
Kim Alvefur <zash@zash.se>
parents: 1503
diff changeset
201 module:handle_items("pep-service", pep_service_added, pep_service_removed, true);
f367d7cbfaa6 mod_profile: Use module:handle_items() for PEP node bootstrapping (see trunk 388786af0dd2)
Kim Alvefur <zash@zash.se>
parents: 1503
diff changeset
202 end
1442
253e374824a8 mod_profile: Load profile into PEP on initial presence
Kim Alvefur <zash@zash.se>
parents: 1441
diff changeset
203
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
204 -- 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
205 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
206 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
207
877dc87539ff mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff changeset
208 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
209 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
210 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
211 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
212 if not data then
1744
fbef84033fae mod_profile: Explicitly return true from handlers, session.send can return nil under some conditions
Kim Alvefur <zash@zash.se>
parents: 1743
diff changeset
213 origin.send(st.error_reply(stanza, "cancel", "item-not-found"));
fbef84033fae mod_profile: Explicitly return true from handlers, session.send can return nil under some conditions
Kim Alvefur <zash@zash.se>
parents: 1743
diff changeset
214 return true;
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
215 end
1744
fbef84033fae mod_profile: Explicitly return true from handlers, session.send can return nil under some conditions
Kim Alvefur <zash@zash.se>
parents: 1743
diff changeset
216 origin.send(st.reply(stanza):add_child(vcard.to_vcard4(data)));
fbef84033fae mod_profile: Explicitly return true from handlers, session.send can return nil under some conditions
Kim Alvefur <zash@zash.se>
parents: 1743
diff changeset
217 return true;
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
218 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
219
877dc87539ff mod_profile: Replacement for mod_vcard with vcard4 support and integration with mod_pep_plus
Kim Alvefur <zash@zash.se>
parents:
diff changeset
220 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
221 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
222 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
223 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
224 if not ok then
1744
fbef84033fae mod_profile: Explicitly return true from handlers, session.send can return nil under some conditions
Kim Alvefur <zash@zash.se>
parents: 1743
diff changeset
225 origin.send(st.error_reply(stanza, "cancel", "internal-server-error", err));
fbef84033fae mod_profile: Explicitly return true from handlers, session.send can return nil under some conditions
Kim Alvefur <zash@zash.se>
parents: 1743
diff changeset
226 return true;
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
227 end
1744
fbef84033fae mod_profile: Explicitly return true from handlers, session.send can return nil under some conditions
Kim Alvefur <zash@zash.se>
parents: 1743
diff changeset
228 origin.send(st.reply(stanza));
fbef84033fae mod_profile: Explicitly return true from handlers, session.send can return nil under some conditions
Kim Alvefur <zash@zash.se>
parents: 1743
diff changeset
229 return true;
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
230 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
231 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
232 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
233 local origin, stanza = event.origin, event.stanza;
1744
fbef84033fae mod_profile: Explicitly return true from handlers, session.send can return nil under some conditions
Kim Alvefur <zash@zash.se>
parents: 1743
diff changeset
234 origin.send(st.error_reply(stanza, "cancel", "feature-not-implemented"));
fbef84033fae mod_profile: Explicitly return true from handlers, session.send can return nil under some conditions
Kim Alvefur <zash@zash.se>
parents: 1743
diff changeset
235 return true;
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
236 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
237 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
238 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
239
3186
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
240 local function inject_xep153(event)
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
241 local origin, stanza = event.origin, event.stanza;
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
242 local username = origin.username;
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
243 local pep = pep_plus.get_pep_service(username);
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
244
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
245 stanza:remove_children("x", "vcard-temp:x:update");
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
246 local x_update = st.stanza("x", { xmlns = "vcard-temp:x:update" });
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
247 local avatar_hash = pep:get_items("urn:xmpp:avatar:metadata");
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
248 if avatar_hash then
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
249 x_update:text_tag("photo", avatar_hash);
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
250 end
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
251 stanza:add_direct_child(x_update);
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
252 end
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
253
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
254 if pep_plus then
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
255 module:hook("pre-presence/full", inject_xep153)
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
256 module:hook("pre-presence/bare", inject_xep153)
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
257 module:hook("pre-presence/host", inject_xep153)
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
258 end