Annotate

plugins/mod_vcard_legacy.lua @ 9808:00d210deea28 0.11

mod_vcard_legacy: Factor out conversion from vcard-temp to 4
author Kim Alvefur <zash@zash.se>
date Fri, 11 Jan 2019 09:20:45 +0100
parent 9672:e71484c210fb
child 9809:5648e8733569
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9249
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 local st = require "util.stanza"
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2 local jid_split = require "util.jid".split;
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4 local mod_pep = module:depends("pep");
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5
9255
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
6 local sha1 = require "util.hashes".sha1;
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
7 local base64_decode = require "util.encodings".base64.decode;
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
8
9256
12d3d96e3918 mod_vcard_legacy: Respond with old vcard
Kim Alvefur <zash@zash.se>
parents: 9255
diff changeset
9 local vcards = module:open_store("vcard");
12d3d96e3918 mod_vcard_legacy: Respond with old vcard
Kim Alvefur <zash@zash.se>
parents: 9255
diff changeset
10
9249
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 module:add_feature("vcard-temp");
9260
0fc6ffc57dc0 mod_vcard_legacy: Announce feature on bare JID per XEP
Kim Alvefur <zash@zash.se>
parents: 9259
diff changeset
12 module:hook("account-disco-info", function (event)
0fc6ffc57dc0 mod_vcard_legacy: Announce feature on bare JID per XEP
Kim Alvefur <zash@zash.se>
parents: 9259
diff changeset
13 event.reply:tag("feature", { var = "urn:xmpp:pep-vcard-conversion:0" }):up();
0fc6ffc57dc0 mod_vcard_legacy: Announce feature on bare JID per XEP
Kim Alvefur <zash@zash.se>
parents: 9259
diff changeset
14 end);
9249
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15
9268
628b99811301 mod_vcard_legacy: Factor out error handling into a function
Kim Alvefur <zash@zash.se>
parents: 9267
diff changeset
16 local function handle_error(origin, stanza, err)
628b99811301 mod_vcard_legacy: Factor out error handling into a function
Kim Alvefur <zash@zash.se>
parents: 9267
diff changeset
17 if err == "forbidden" then
628b99811301 mod_vcard_legacy: Factor out error handling into a function
Kim Alvefur <zash@zash.se>
parents: 9267
diff changeset
18 origin.send(st.error_reply(stanza, "auth", "forbidden"));
628b99811301 mod_vcard_legacy: Factor out error handling into a function
Kim Alvefur <zash@zash.se>
parents: 9267
diff changeset
19 elseif err == "internal-server-error" then
628b99811301 mod_vcard_legacy: Factor out error handling into a function
Kim Alvefur <zash@zash.se>
parents: 9267
diff changeset
20 origin.send(st.error_reply(stanza, "wait", "internal-server-error"));
628b99811301 mod_vcard_legacy: Factor out error handling into a function
Kim Alvefur <zash@zash.se>
parents: 9267
diff changeset
21 else
628b99811301 mod_vcard_legacy: Factor out error handling into a function
Kim Alvefur <zash@zash.se>
parents: 9267
diff changeset
22 origin.send(st.error_reply(stanza, "modify", "undefined-condition", err));
628b99811301 mod_vcard_legacy: Factor out error handling into a function
Kim Alvefur <zash@zash.se>
parents: 9267
diff changeset
23 end
628b99811301 mod_vcard_legacy: Factor out error handling into a function
Kim Alvefur <zash@zash.se>
parents: 9267
diff changeset
24 end
628b99811301 mod_vcard_legacy: Factor out error handling into a function
Kim Alvefur <zash@zash.se>
parents: 9267
diff changeset
25
9249
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 -- Simple translations
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 -- <foo><text>hey</text></foo> -> <FOO>hey</FOO>
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 local simple_map = {
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 nickname = "text";
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 title = "text";
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 role = "text";
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 categories = "text";
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 note = "text";
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 url = "uri";
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35 bday = "date";
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 }
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38 module:hook("iq-get/bare/vcard-temp:vCard", function (event)
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 local origin, stanza = event.origin, event.stanza;
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40 local pep_service = mod_pep.get_pep_service(jid_split(stanza.attr.to) or origin.username);
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 local ok, id, vcard4_item = pep_service:get_last_item("urn:xmpp:vcard4", stanza.attr.from);
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 local vcard_temp = st.stanza("vCard", { xmlns = "vcard-temp" });
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 if ok and vcard4_item then
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 local vcard4 = vcard4_item.tags[1];
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47 local fn = vcard4:get_child("fn");
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
48 vcard_temp:text_tag("FN", fn and fn:get_child_text("text"));
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
49
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50 local v4n = vcard4:get_child("n");
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
51 vcard_temp:tag("N")
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
52 :text_tag("FAMILY", v4n and v4n:get_child_text("surname"))
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53 :text_tag("GIVEN", v4n and v4n:get_child_text("given"))
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
54 :text_tag("MIDDLE", v4n and v4n:get_child_text("additional"))
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
55 :text_tag("PREFIX", v4n and v4n:get_child_text("prefix"))
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
56 :text_tag("SUFFIX", v4n and v4n:get_child_text("suffix"))
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
57 :up();
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
58
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
59 for tag in vcard4:childtags() do
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
60 local typ = simple_map[tag.name];
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
61 if typ then
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
62 local text = tag:get_child_text(typ);
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
63 if text then
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
64 vcard_temp:text_tag(tag.name:upper(), text);
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
65 end
9251
3f31e10e8256 mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents: 9250
diff changeset
66 elseif tag.name == "email" then
3f31e10e8256 mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents: 9250
diff changeset
67 local text = tag:get_child_text("text");
3f31e10e8256 mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents: 9250
diff changeset
68 if text then
3f31e10e8256 mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents: 9250
diff changeset
69 vcard_temp:tag("EMAIL")
3f31e10e8256 mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents: 9250
diff changeset
70 :text_tag("USERID", text)
3f31e10e8256 mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents: 9250
diff changeset
71 :tag("INTERNET"):up();
3f31e10e8256 mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents: 9250
diff changeset
72 if tag:find"parameters/type/text#" == "home" then
3f31e10e8256 mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents: 9250
diff changeset
73 vcard_temp:tag("HOME"):up();
3f31e10e8256 mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents: 9250
diff changeset
74 elseif tag:find"parameters/type/text#" == "work" then
3f31e10e8256 mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents: 9250
diff changeset
75 vcard_temp:tag("WORK"):up();
3f31e10e8256 mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents: 9250
diff changeset
76 end
3f31e10e8256 mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents: 9250
diff changeset
77 vcard_temp:up();
3f31e10e8256 mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents: 9250
diff changeset
78 end
9252
292d283c7694 mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents: 9251
diff changeset
79 elseif tag.name == "tel" then
292d283c7694 mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents: 9251
diff changeset
80 local text = tag:get_child_text("uri");
292d283c7694 mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents: 9251
diff changeset
81 if text then
292d283c7694 mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents: 9251
diff changeset
82 if text:sub(1, 4) == "tel:" then
292d283c7694 mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents: 9251
diff changeset
83 text = text:sub(5)
292d283c7694 mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents: 9251
diff changeset
84 end
292d283c7694 mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents: 9251
diff changeset
85 vcard_temp:tag("TEL"):text_tag("NUMBER", text);
292d283c7694 mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents: 9251
diff changeset
86 if tag:find"parameters/type/text#" == "home" then
292d283c7694 mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents: 9251
diff changeset
87 vcard_temp:tag("HOME"):up();
292d283c7694 mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents: 9251
diff changeset
88 elseif tag:find"parameters/type/text#" == "work" then
292d283c7694 mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents: 9251
diff changeset
89 vcard_temp:tag("WORK"):up();
292d283c7694 mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents: 9251
diff changeset
90 end
292d283c7694 mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents: 9251
diff changeset
91 vcard_temp:up();
292d283c7694 mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents: 9251
diff changeset
92 end
9254
2ffbcad8ec50 mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents: 9253
diff changeset
93 elseif tag.name == "adr" then
2ffbcad8ec50 mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents: 9253
diff changeset
94 vcard_temp:tag("ADR")
2ffbcad8ec50 mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents: 9253
diff changeset
95 :text_tag("POBOX", tag:get_child_text("pobox"))
2ffbcad8ec50 mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents: 9253
diff changeset
96 :text_tag("EXTADD", tag:get_child_text("ext"))
2ffbcad8ec50 mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents: 9253
diff changeset
97 :text_tag("STREET", tag:get_child_text("street"))
2ffbcad8ec50 mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents: 9253
diff changeset
98 :text_tag("LOCALITY", tag:get_child_text("locality"))
2ffbcad8ec50 mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents: 9253
diff changeset
99 :text_tag("REGION", tag:get_child_text("region"))
2ffbcad8ec50 mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents: 9253
diff changeset
100 :text_tag("PCODE", tag:get_child_text("code"))
2ffbcad8ec50 mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents: 9253
diff changeset
101 :text_tag("CTRY", tag:get_child_text("country"));
2ffbcad8ec50 mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents: 9253
diff changeset
102 if tag:find"parameters/type/text#" == "home" then
2ffbcad8ec50 mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents: 9253
diff changeset
103 vcard_temp:tag("HOME"):up();
2ffbcad8ec50 mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents: 9253
diff changeset
104 elseif tag:find"parameters/type/text#" == "work" then
2ffbcad8ec50 mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents: 9253
diff changeset
105 vcard_temp:tag("WORK"):up();
2ffbcad8ec50 mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents: 9253
diff changeset
106 end
2ffbcad8ec50 mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents: 9253
diff changeset
107 vcard_temp:up();
9249
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
108 end
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
109 end
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
110 end
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
111
9253
dbe3ae6f9746 mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents: 9252
diff changeset
112 local meta_ok, avatar_meta = pep_service:get_items("urn:xmpp:avatar:metadata", stanza.attr.from);
dbe3ae6f9746 mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents: 9252
diff changeset
113 local data_ok, avatar_data = pep_service:get_items("urn:xmpp:avatar:data", stanza.attr.from);
9273
f2258e9750cf mod_vcard_legacy: Include avatar data even if metadata can't be loaded
Kim Alvefur <zash@zash.se>
parents: 9272
diff changeset
114
f2258e9750cf mod_vcard_legacy: Include avatar data even if metadata can't be loaded
Kim Alvefur <zash@zash.se>
parents: 9272
diff changeset
115 if data_ok then
f2258e9750cf mod_vcard_legacy: Include avatar data even if metadata can't be loaded
Kim Alvefur <zash@zash.se>
parents: 9272
diff changeset
116 for _, hash in ipairs(avatar_data) do
f2258e9750cf mod_vcard_legacy: Include avatar data even if metadata can't be loaded
Kim Alvefur <zash@zash.se>
parents: 9272
diff changeset
117 local meta = meta_ok and avatar_meta[hash];
9253
dbe3ae6f9746 mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents: 9252
diff changeset
118 local data = avatar_data[hash];
9257
05bd21c122ae mod_vcard_legacy: Handle incomplete avatar info
Kim Alvefur <zash@zash.se>
parents: 9256
diff changeset
119 local info = meta and meta.tags[1]:get_child("info");
05bd21c122ae mod_vcard_legacy: Handle incomplete avatar info
Kim Alvefur <zash@zash.se>
parents: 9256
diff changeset
120 vcard_temp:tag("PHOTO");
05bd21c122ae mod_vcard_legacy: Handle incomplete avatar info
Kim Alvefur <zash@zash.se>
parents: 9256
diff changeset
121 if info and info.attr.type then
05bd21c122ae mod_vcard_legacy: Handle incomplete avatar info
Kim Alvefur <zash@zash.se>
parents: 9256
diff changeset
122 vcard_temp:text_tag("TYPE", info.attr.type);
05bd21c122ae mod_vcard_legacy: Handle incomplete avatar info
Kim Alvefur <zash@zash.se>
parents: 9256
diff changeset
123 end
05bd21c122ae mod_vcard_legacy: Handle incomplete avatar info
Kim Alvefur <zash@zash.se>
parents: 9256
diff changeset
124 if data then
05bd21c122ae mod_vcard_legacy: Handle incomplete avatar info
Kim Alvefur <zash@zash.se>
parents: 9256
diff changeset
125 vcard_temp:text_tag("BINVAL", data.tags[1]:get_text());
9258
0cc535668fce mod_vcard_legacy: Support external avatars
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
126 elseif info and info.attr.url then
9285
78673e81243f mod_vcard_legacy: Fix EXTVAL conversion (thanks pep.)
Kim Alvefur <zash@zash.se>
parents: 9284
diff changeset
127 vcard_temp:text_tag("EXTVAL", info.attr.url);
9257
05bd21c122ae mod_vcard_legacy: Handle incomplete avatar info
Kim Alvefur <zash@zash.se>
parents: 9256
diff changeset
128 end
05bd21c122ae mod_vcard_legacy: Handle incomplete avatar info
Kim Alvefur <zash@zash.se>
parents: 9256
diff changeset
129 vcard_temp:up();
9253
dbe3ae6f9746 mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents: 9252
diff changeset
130 end
dbe3ae6f9746 mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents: 9252
diff changeset
131 end
dbe3ae6f9746 mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents: 9252
diff changeset
132
9272
c047be86dd51 mod_vcard_legacy: Return old vcard if neither vcard4 or avatar available
Kim Alvefur <zash@zash.se>
parents: 9271
diff changeset
133 if not vcard_temp.tags[1] then
c047be86dd51 mod_vcard_legacy: Return old vcard if neither vcard4 or avatar available
Kim Alvefur <zash@zash.se>
parents: 9271
diff changeset
134 vcard_temp = st.deserialize(vcards:get(jid_split(stanza.attr.to) or origin.username)) or vcard_temp;
c047be86dd51 mod_vcard_legacy: Return old vcard if neither vcard4 or avatar available
Kim Alvefur <zash@zash.se>
parents: 9271
diff changeset
135 end
c047be86dd51 mod_vcard_legacy: Return old vcard if neither vcard4 or avatar available
Kim Alvefur <zash@zash.se>
parents: 9271
diff changeset
136
9249
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
137 origin.send(st.reply(stanza):add_child(vcard_temp));
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
138 return true;
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
139 end);
9250
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9249
diff changeset
140
9518
a62fa766d8f3 mod_vcard_legacy: Create nodes with open access (fixes #1221)
Kim Alvefur <zash@zash.se>
parents: 9286
diff changeset
141 local node_defaults = {
a62fa766d8f3 mod_vcard_legacy: Create nodes with open access (fixes #1221)
Kim Alvefur <zash@zash.se>
parents: 9286
diff changeset
142 access_model = "open";
a62fa766d8f3 mod_vcard_legacy: Create nodes with open access (fixes #1221)
Kim Alvefur <zash@zash.se>
parents: 9286
diff changeset
143 _defaults_only = true;
a62fa766d8f3 mod_vcard_legacy: Create nodes with open access (fixes #1221)
Kim Alvefur <zash@zash.se>
parents: 9286
diff changeset
144 };
a62fa766d8f3 mod_vcard_legacy: Create nodes with open access (fixes #1221)
Kim Alvefur <zash@zash.se>
parents: 9286
diff changeset
145
9808
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
146 function vcard_to_pep(vcard_temp)
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
147 local avatars = {};
9255
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
148
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
149 local vcard4 = st.stanza("item", { xmlns = "http://jabber.org/protocol/pubsub", id = "current" })
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
150 :tag("vcard", { xmlns = 'urn:ietf:params:xml:ns:vcard-4.0' });
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
151
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
152 vcard4:tag("fn"):text_tag("text", vcard_temp:get_child_text("FN")):up();
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
153
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
154 local N = vcard_temp:get_child("N");
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
155
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
156 vcard4:tag("n")
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
157 :text_tag("surname", N and N:get_child_text("FAMILY"))
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
158 :text_tag("given", N and N:get_child_text("GIVEN"))
9284
161f604e14fa mod_vcard_legacy: Fix uppercase tag name (thanks pep.)
Kim Alvefur <zash@zash.se>
parents: 9273
diff changeset
159 :text_tag("additional", N and N:get_child_text("MIDDLE"))
9255
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
160 :text_tag("prefix", N and N:get_child_text("PREFIX"))
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
161 :text_tag("suffix", N and N:get_child_text("SUFFIX"))
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
162 :up();
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
163
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
164 for tag in vcard_temp:childtags() do
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
165 local typ = simple_map[tag.name:lower()];
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
166 if typ then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
167 local text = tag:get_text();
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
168 if text then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
169 vcard4:tag(tag.name:lower()):text_tag(typ, text):up();
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
170 end
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
171 elseif tag.name == "EMAIL" then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
172 local text = tag:get_child_text("USERID");
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
173 if text then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
174 vcard4:tag("email")
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
175 vcard4:text_tag("text", text)
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
176 vcard4:tag("parameters"):tag("type");
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
177 if tag:get_child("HOME") then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
178 vcard4:text_tag("text", "home");
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
179 elseif tag:get_child("WORK") then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
180 vcard4:text_tag("text", "work");
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
181 end
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
182 vcard4:up():up():up();
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
183 end
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
184 elseif tag.name == "TEL" then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
185 local text = tag:get_child_text("NUMBER");
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
186 if text then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
187 vcard4:tag("tel"):text_tag("uri", "tel:"..text);
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
188 end
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
189 vcard4:tag("parameters"):tag("type");
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
190 if tag:get_child("HOME") then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
191 vcard4:text_tag("text", "home");
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
192 elseif tag:get_child("WORK") then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
193 vcard4:text_tag("text", "work");
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
194 end
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
195 vcard4:up():up():up();
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
196 elseif tag.name == "ORG" then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
197 local text = tag:get_child_text("ORGNAME");
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
198 if text then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
199 vcard4:tag("org"):text_tag("text", text):up();
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
200 end
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
201 elseif tag.name == "DESC" then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
202 local text = tag:get_text();
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
203 if text then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
204 vcard4:tag("note"):text_tag("text", text):up();
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
205 end
9286
992e986589b8 mod_vcard_legacy: Add some notes
Kim Alvefur <zash@zash.se>
parents: 9285
diff changeset
206 -- <note> gets mapped into <NOTE> in the other direction
9255
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
207 elseif tag.name == "ADR" then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
208 vcard4:tag("adr")
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
209 :text_tag("pobox", tag:get_child_text("POBOX"))
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
210 :text_tag("ext", tag:get_child_text("EXTADD"))
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
211 :text_tag("street", tag:get_child_text("STREET"))
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
212 :text_tag("locality", tag:get_child_text("LOCALITY"))
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
213 :text_tag("region", tag:get_child_text("REGION"))
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
214 :text_tag("code", tag:get_child_text("PCODE"))
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
215 :text_tag("country", tag:get_child_text("CTRY"));
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
216 vcard4:tag("parameters"):tag("type");
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
217 if tag:get_child("HOME") then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
218 vcard4:text_tag("text", "home");
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
219 elseif tag:get_child("WORK") then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
220 vcard4:text_tag("text", "work");
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
221 end
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
222 vcard4:up():up():up();
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
223 elseif tag.name == "PHOTO" then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
224 local avatar_type = tag:get_child_text("TYPE");
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
225 local avatar_payload = tag:get_child_text("BINVAL");
9286
992e986589b8 mod_vcard_legacy: Add some notes
Kim Alvefur <zash@zash.se>
parents: 9285
diff changeset
226 -- Can EXTVAL be translated? No way to know the sha1 of the data?
9255
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
227
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
228 if avatar_payload then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
229 local avatar_raw = base64_decode(avatar_payload);
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
230 local avatar_hash = sha1(avatar_raw, true);
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
231
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
232 local avatar_meta = st.stanza("item", { id = avatar_hash, xmlns = "http://jabber.org/protocol/pubsub" })
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
233 :tag("metadata", { xmlns="urn:xmpp:avatar:metadata" })
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
234 :tag("info", {
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
235 bytes = tostring(#avatar_raw),
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
236 id = avatar_hash,
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
237 type = avatar_type,
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
238 });
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
239
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
240 local avatar_data = st.stanza("item", { id = avatar_hash, xmlns = "http://jabber.org/protocol/pubsub" })
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
241 :tag("data", { xmlns="urn:xmpp:avatar:data" })
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
242 :text(avatar_payload);
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
243
9808
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
244 table.insert(avatars, { hash = avatar_hash, meta = avatar_meta, data = avatar_data });
9255
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
245 end
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
246 end
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
247 end
9808
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
248 return vcard4, avatars;
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
249 end
9255
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
250
9808
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
251 function save_to_pep(pep_service, actor, vcard4, avatars)
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
252
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
253 if pep_service:purge("urn:xmpp:avatar:metadata", actor) then
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
254 pep_service:purge("urn:xmpp:avatar:data", actor);
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
255 end
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
256
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
257 for _, avatar in ipairs(avatars) do
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
258 local ok, err = pep_service:publish("urn:xmpp:avatar:data", actor, avatar.hash, avatar.data, node_defaults)
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
259 if ok then
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
260 ok, err = pep_service:publish("urn:xmpp:avatar:metadata", actor, avatar.hash, avatar.meta, node_defaults);
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
261 end
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
262 if not ok then
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
263 return ok, err;
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
264 end
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
265 end
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
266
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
267 return pep_service:publish("urn:xmpp:vcard4", actor, "current", vcard4, node_defaults);
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
268 end
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
269
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
270 module:hook("iq-set/self/vcard-temp:vCard", function (event)
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
271 local origin, stanza = event.origin, event.stanza;
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
272 local pep_service = mod_pep.get_pep_service(origin.username);
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
273
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
274 local vcard_temp = stanza.tags[1];
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
275
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9672
diff changeset
276 local ok, err = save_to_pep(pep_service, origin.full_jid, vcard_to_pep(vcard_temp));
9255
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
277 if ok then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
278 origin.send(st.reply(stanza));
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
279 else
9268
628b99811301 mod_vcard_legacy: Factor out error handling into a function
Kim Alvefur <zash@zash.se>
parents: 9267
diff changeset
280 handle_error(origin, stanza, err);
9255
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
281 end
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
282
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
283 return true;
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
284 end);
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
285
9250
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9249
diff changeset
286 local function inject_xep153(event)
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9249
diff changeset
287 local origin, stanza = event.origin, event.stanza;
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9249
diff changeset
288 local username = origin.username;
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9249
diff changeset
289 if not username then return end
9672
e71484c210fb mod_vcard_legacy: Limit injection of XEP-0153 to normal presence (fixes #1252)
Kim Alvefur <zash@zash.se>
parents: 9520
diff changeset
290 if stanza.attr.type then return end
9270
b024fae6919e mod_vcard_legacy: Rename variable for consistency
Kim Alvefur <zash@zash.se>
parents: 9269
diff changeset
291 local pep_service = mod_pep.get_pep_service(username);
9250
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9249
diff changeset
292
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9249
diff changeset
293 stanza:remove_children("x", "vcard-temp:x:update");
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9249
diff changeset
294 local x_update = st.stanza("x", { xmlns = "vcard-temp:x:update" });
9270
b024fae6919e mod_vcard_legacy: Rename variable for consistency
Kim Alvefur <zash@zash.se>
parents: 9269
diff changeset
295 local ok, avatar_hash = pep_service:get_last_item("urn:xmpp:avatar:metadata", true);
9250
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9249
diff changeset
296 if ok and avatar_hash then
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9249
diff changeset
297 x_update:text_tag("photo", avatar_hash);
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9249
diff changeset
298 end
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9249
diff changeset
299 stanza:add_direct_child(x_update);
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9249
diff changeset
300 end
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9249
diff changeset
301
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9249
diff changeset
302 module:hook("pre-presence/full", inject_xep153, 1);
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9249
diff changeset
303 module:hook("pre-presence/bare", inject_xep153, 1);
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9249
diff changeset
304 module:hook("pre-presence/host", inject_xep153, 1);