annotate mod_profile/mod_profile.lua @ 3252:eec70a863d16

mod_profile: Only replace avatar update hash if one is found
author Kim Alvefur <zash@zash.se>
date Tue, 21 Aug 2018 11:01:46 +0200
parents 60821653c5a9
children 628659e2e6b0
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
3207
149cc5ddc64f mod_profile: Update for mod_pep_plus rename
Kim Alvefur <zash@zash.se>
parents: 3194
diff changeset
17 pep_plus = module:depends"pep";
3208
e55172ce68d4 mod_profile: Abort if mod_pep doesn't appear to be the former mod_pep_plus
Kim Alvefur <zash@zash.se>
parents: 3207
diff changeset
18 assert(pep_plus.get_pep_service, "Wrong version of mod_pep loaded, you need to update Prosody");
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
19 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
20
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 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
22 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
23
3186
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
24 module:hook("account-disco-info", function (event)
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
25 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
26 end);
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
27
3181
1f2272cda0d7 mod_profile: Ignore shadowed variable name
Kim Alvefur <zash@zash.se>
parents: 2790
diff changeset
28 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
29 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
30 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
31 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
32 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
33 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
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 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
37
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 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
39 ["\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
40 ["\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
41 ["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
42 ["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
43 ["<?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
44 }
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 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
46 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
47 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
48 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
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 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 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
52 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
53
3190
76a2aca48b4f mod_profile: Refactor wrapping of payloads in <item>
Kim Alvefur <zash@zash.se>
parents: 3187
diff changeset
54 local function item_container(id, payload)
3246
2a54b331f011 mod_profile: Pass item id onto pubsub container element
Kim Alvefur <zash@zash.se>
parents: 3245
diff changeset
55 return id, st.stanza("item", { id = id or "current", xmlns = "http://jabber.org/protocol/pubsub"; })
3190
76a2aca48b4f mod_profile: Refactor wrapping of payloads in <item>
Kim Alvefur <zash@zash.se>
parents: 3187
diff changeset
56 :add_child(payload);
76a2aca48b4f mod_profile: Refactor wrapping of payloads in <item>
Kim Alvefur <zash@zash.se>
parents: 3187
diff changeset
57 end
76a2aca48b4f mod_profile: Refactor wrapping of payloads in <item>
Kim Alvefur <zash@zash.se>
parents: 3187
diff changeset
58
1515
f367d7cbfaa6 mod_profile: Use module:handle_items() for PEP node bootstrapping (see trunk 388786af0dd2)
Kim Alvefur <zash@zash.se>
parents: 1503
diff changeset
59 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
60 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
61 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
62 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
63 if p then t_remove(data, p); end
3190
76a2aca48b4f mod_profile: Refactor wrapping of payloads in <item>
Kim Alvefur <zash@zash.se>
parents: 3187
diff changeset
64 pep:publish("urn:xmpp:vcard4", true, item_container("current", 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
65 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
66 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
67
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 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
69 if nickname and nickname[1] then
3190
76a2aca48b4f mod_profile: Refactor wrapping of payloads in <item>
Kim Alvefur <zash@zash.se>
parents: 3187
diff changeset
70 pep:publish("http://jabber.org/protocol/nick", true, item_container("current",
76a2aca48b4f mod_profile: Refactor wrapping of payloads in <item>
Kim Alvefur <zash@zash.se>
parents: 3187
diff changeset
71 st.stanza("nick", { xmlns="http://jabber.org/protocol/nick" }):text(nickname[1])));
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
72 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
73
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 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
75 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
76 local photo_hash = sha1(photo_raw, true);
3245
1d57f485efef mod_profile: Use type property over content identifiguesstimation
Kim Alvefur <zash@zash.se>
parents: 3208
diff changeset
77 local photo_type = photo.TYPE and photo.TYPE[1];
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
78
3190
76a2aca48b4f mod_profile: Refactor wrapping of payloads in <item>
Kim Alvefur <zash@zash.se>
parents: 3187
diff changeset
79 pep:publish("urn:xmpp:avatar:metadata", true, item_container(photo_hash,
76a2aca48b4f mod_profile: Refactor wrapping of payloads in <item>
Kim Alvefur <zash@zash.se>
parents: 3187
diff changeset
80 st.stanza("metadata", { xmlns="urn:xmpp:avatar:metadata" })
1469
019746bba318 mod_profile: Add the missing <info> child element and move info attributes there
Kim Alvefur <zash@zash.se>
parents: 1446
diff changeset
81 :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
82 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
83 id = photo_hash,
3245
1d57f485efef mod_profile: Use type property over content identifiguesstimation
Kim Alvefur <zash@zash.se>
parents: 3208
diff changeset
84 type = photo_type or identify(photo_raw),
3190
76a2aca48b4f mod_profile: Refactor wrapping of payloads in <item>
Kim Alvefur <zash@zash.se>
parents: 3187
diff changeset
85 })));
76a2aca48b4f mod_profile: Refactor wrapping of payloads in <item>
Kim Alvefur <zash@zash.se>
parents: 3187
diff changeset
86 pep:publish("urn:xmpp:avatar:data", true, item_container(photo_hash,
76a2aca48b4f mod_profile: Refactor wrapping of payloads in <item>
Kim Alvefur <zash@zash.se>
parents: 3187
diff changeset
87 st.stanza("data", { xmlns="urn:xmpp:avatar:data" }):text(photo[1])));
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
88 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
89 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
90
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 -- 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
92 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
93
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 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
95 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
96 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
97 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
98 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
99 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
100 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
101 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
102 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
103 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
104 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
105 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
106 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
107 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
108 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
109 return true;
1441
07c9306c2c1f mod_profile: Don't pass old vcard data trough vcard lib
Kim Alvefur <zash@zash.se>
parents: 1424
diff changeset
110 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
111 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
112 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
113 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
114 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
115 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
116 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
117 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
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 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
121 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
122 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
123 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
124 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
125 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
126 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
127 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
128 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
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 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
131 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
132 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
133 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
134 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
135 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
136 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
137
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 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
139 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
140 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
141
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
142 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
143 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
144 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
145
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 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
147 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
148
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 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
150 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
151
1516
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
152 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
153 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
154 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
155 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
156 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
157 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
158 for k,v in pairs(event) do
3184
c25853bc387b mod_profile: Fix typo
Kim Alvefur <zash@zash.se>
parents: 3181
diff changeset
159 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
160 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
161 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
162 end
1516
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
163 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
164 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
165 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
166 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
167 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
168 if new_photo then
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
169 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
170 elseif i then
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
171 table.remove(data, i);
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
172 end
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
173 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
174 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
175 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
176 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
177 if new_nick then
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
178 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
179 elseif i then
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
180 table.remove(data, i);
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
181 end
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
182 else
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
183 return;
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 storage:set(username, data);
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
186 end
48d95ab404c7 mod_profile: Save photo and nickname from PEP to vCard
Kim Alvefur <zash@zash.se>
parents: 1515
diff changeset
187
1515
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 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
189 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
190 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
191 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
192 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
193 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
194 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
195 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
196 end
f367d7cbfaa6 mod_profile: Use module:handle_items() for PEP node bootstrapping (see trunk 388786af0dd2)
Kim Alvefur <zash@zash.se>
parents: 1503
diff changeset
197
f367d7cbfaa6 mod_profile: Use module:handle_items() for PEP node bootstrapping (see trunk 388786af0dd2)
Kim Alvefur <zash@zash.se>
parents: 1503
diff changeset
198 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
199 -- 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
200 end
f367d7cbfaa6 mod_profile: Use module:handle_items() for PEP node bootstrapping (see trunk 388786af0dd2)
Kim Alvefur <zash@zash.se>
parents: 1503
diff changeset
201
f367d7cbfaa6 mod_profile: Use module:handle_items() for PEP node bootstrapping (see trunk 388786af0dd2)
Kim Alvefur <zash@zash.se>
parents: 1503
diff changeset
202 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
203 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
204 end
1442
253e374824a8 mod_profile: Load profile into PEP on initial presence
Kim Alvefur <zash@zash.se>
parents: 1441
diff changeset
205
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
206 -- 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
207 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
208 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
209
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 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
211 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
212 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
213 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
214 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
215 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
216 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
217 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
218 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
219 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
220 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
221
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 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
223 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
224 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
225 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
226 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
227 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
228 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
229 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
230 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
231 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
232 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
233 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
234 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
235 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
236 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
237 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
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 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
240 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
241
3186
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
242 local function inject_xep153(event)
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
243 local origin, stanza = event.origin, event.stanza;
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
244 local username = origin.username;
3187
7c450c27d4ba mod_profile: Skip injecting xep153 into presence for sessions with no username
Kim Alvefur <zash@zash.se>
parents: 3186
diff changeset
245 if not username then return end
3186
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
246 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
247
3251
60821653c5a9 mod_profile: Only retrieve the last avatar hash from PEP
Kim Alvefur <zash@zash.se>
parents: 3246
diff changeset
248 local ok, avatar_hash = pep:get_last_item("urn:xmpp:avatar:metadata", true);
60821653c5a9 mod_profile: Only retrieve the last avatar hash from PEP
Kim Alvefur <zash@zash.se>
parents: 3246
diff changeset
249 if ok and avatar_hash then
3252
eec70a863d16 mod_profile: Only replace avatar update hash if one is found
Kim Alvefur <zash@zash.se>
parents: 3251
diff changeset
250 stanza:remove_children("x", "vcard-temp:x:update");
eec70a863d16 mod_profile: Only replace avatar update hash if one is found
Kim Alvefur <zash@zash.se>
parents: 3251
diff changeset
251 local x_update = st.stanza("x", { xmlns = "vcard-temp:x:update" });
3251
60821653c5a9 mod_profile: Only retrieve the last avatar hash from PEP
Kim Alvefur <zash@zash.se>
parents: 3246
diff changeset
252 x_update:text_tag("photo", avatar_hash);
3252
eec70a863d16 mod_profile: Only replace avatar update hash if one is found
Kim Alvefur <zash@zash.se>
parents: 3251
diff changeset
253 stanza:add_direct_child(x_update);
3186
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
254 end
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
255 end
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
256
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
257 if pep_plus then
3193
92d80b6ce375 mod_profile: Bump priority of xep153 hook to surely run before mod_presence
Kim Alvefur <zash@zash.se>
parents: 3192
diff changeset
258 module:hook("pre-presence/full", inject_xep153, 1)
92d80b6ce375 mod_profile: Bump priority of xep153 hook to surely run before mod_presence
Kim Alvefur <zash@zash.se>
parents: 3192
diff changeset
259 module:hook("pre-presence/bare", inject_xep153, 1)
92d80b6ce375 mod_profile: Bump priority of xep153 hook to surely run before mod_presence
Kim Alvefur <zash@zash.se>
parents: 3192
diff changeset
260 module:hook("pre-presence/host", inject_xep153, 1)
3186
1fe5b156d220 mod_profile: Add support for XEP-0398
Kim Alvefur <zash@zash.se>
parents: 3185
diff changeset
261 end