Software /
code /
prosody
Annotate
plugins/mod_vcard_legacy.lua @ 10649:228277be4a28
net.server_epoll: Reduce log level of TLS handshake errors to debug
These are triggered all the time by random HTTPS connections, so they
are mostly just useless noise. When you actually do need them, you
probably have debug logging enabled too, since these messages are fairly
useless without more context.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 15 Feb 2020 16:43:18 +0100 |
parent | 10549:3e50f86e5a2e |
child | 10864:1b657605ea29 |
rev | line source |
---|---|
9811
ce6eb482eb50
mod_vcard_legacy: Add some missing semicolons
Kim Alvefur <zash@zash.se>
parents:
9810
diff
changeset
|
1 local st = require "util.stanza"; |
9249
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); |
10549
3e50f86e5a2e
mod_vcard_legacy: Ignore an unused variable [luacheck]
Kim Alvefur <zash@zash.se>
parents:
10270
diff
changeset
|
41 local ok, _, vcard4_item = pep_service:get_last_item("urn:xmpp:vcard4", stanza.attr.from); |
9249
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(); |
10117
8643b784626c
mod_vcard_legacy: Add support for JABBERID - impp/uri conversion
Kim Alvefur <zash@zash.se>
parents:
9814
diff
changeset
|
108 elseif tag.name == "impp" then |
8643b784626c
mod_vcard_legacy: Add support for JABBERID - impp/uri conversion
Kim Alvefur <zash@zash.se>
parents:
9814
diff
changeset
|
109 local uri = tag:get_child_text("uri"); |
8643b784626c
mod_vcard_legacy: Add support for JABBERID - impp/uri conversion
Kim Alvefur <zash@zash.se>
parents:
9814
diff
changeset
|
110 if uri and uri:sub(1, 5) == "xmpp:" then |
8643b784626c
mod_vcard_legacy: Add support for JABBERID - impp/uri conversion
Kim Alvefur <zash@zash.se>
parents:
9814
diff
changeset
|
111 vcard_temp:text_tag("JABBERID", uri:sub(6)) |
8643b784626c
mod_vcard_legacy: Add support for JABBERID - impp/uri conversion
Kim Alvefur <zash@zash.se>
parents:
9814
diff
changeset
|
112 end |
10118
199dae5b6f11
mod_vcard_legacy: Complete roundtrip support for ORG/ORGNAME
Kim Alvefur <zash@zash.se>
parents:
10117
diff
changeset
|
113 elseif tag.name == "org" then |
199dae5b6f11
mod_vcard_legacy: Complete roundtrip support for ORG/ORGNAME
Kim Alvefur <zash@zash.se>
parents:
10117
diff
changeset
|
114 vcard_temp:tag("ORG") |
199dae5b6f11
mod_vcard_legacy: Complete roundtrip support for ORG/ORGNAME
Kim Alvefur <zash@zash.se>
parents:
10117
diff
changeset
|
115 :text_tag("ORGNAME", tag:get_child_text("text")) |
199dae5b6f11
mod_vcard_legacy: Complete roundtrip support for ORG/ORGNAME
Kim Alvefur <zash@zash.se>
parents:
10117
diff
changeset
|
116 :up(); |
9249
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
117 end |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
118 end |
10215
82abf88db13f
mod_vcard_legacy: Use PEP nickname if vcard4 data is unavailable
Kim Alvefur <zash@zash.se>
parents:
10118
diff
changeset
|
119 else |
82abf88db13f
mod_vcard_legacy: Use PEP nickname if vcard4 data is unavailable
Kim Alvefur <zash@zash.se>
parents:
10118
diff
changeset
|
120 local ok, _, nick_item = pep_service:get_last_item("http://jabber.org/protocol/nick", stanza.attr.from); |
82abf88db13f
mod_vcard_legacy: Use PEP nickname if vcard4 data is unavailable
Kim Alvefur <zash@zash.se>
parents:
10118
diff
changeset
|
121 if ok and nick_item then |
82abf88db13f
mod_vcard_legacy: Use PEP nickname if vcard4 data is unavailable
Kim Alvefur <zash@zash.se>
parents:
10118
diff
changeset
|
122 local nickname = nick_item:get_child_text("nick", "http://jabber.org/protocol/nick"); |
82abf88db13f
mod_vcard_legacy: Use PEP nickname if vcard4 data is unavailable
Kim Alvefur <zash@zash.se>
parents:
10118
diff
changeset
|
123 if nickname then |
82abf88db13f
mod_vcard_legacy: Use PEP nickname if vcard4 data is unavailable
Kim Alvefur <zash@zash.se>
parents:
10118
diff
changeset
|
124 vcard_temp:text_tag("NICKNAME", nickname); |
9249
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
125 end |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
126 end |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
127 end |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
128 |
9253
dbe3ae6f9746
mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents:
9252
diff
changeset
|
129 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
|
130 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
|
131 |
f2258e9750cf
mod_vcard_legacy: Include avatar data even if metadata can't be loaded
Kim Alvefur <zash@zash.se>
parents:
9272
diff
changeset
|
132 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
|
133 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
|
134 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
|
135 local data = avatar_data[hash]; |
9257
05bd21c122ae
mod_vcard_legacy: Handle incomplete avatar info
Kim Alvefur <zash@zash.se>
parents:
9256
diff
changeset
|
136 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
|
137 vcard_temp:tag("PHOTO"); |
05bd21c122ae
mod_vcard_legacy: Handle incomplete avatar info
Kim Alvefur <zash@zash.se>
parents:
9256
diff
changeset
|
138 if info and info.attr.type then |
05bd21c122ae
mod_vcard_legacy: Handle incomplete avatar info
Kim Alvefur <zash@zash.se>
parents:
9256
diff
changeset
|
139 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
|
140 end |
05bd21c122ae
mod_vcard_legacy: Handle incomplete avatar info
Kim Alvefur <zash@zash.se>
parents:
9256
diff
changeset
|
141 if data then |
05bd21c122ae
mod_vcard_legacy: Handle incomplete avatar info
Kim Alvefur <zash@zash.se>
parents:
9256
diff
changeset
|
142 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
|
143 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
|
144 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
|
145 end |
05bd21c122ae
mod_vcard_legacy: Handle incomplete avatar info
Kim Alvefur <zash@zash.se>
parents:
9256
diff
changeset
|
146 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
|
147 end |
dbe3ae6f9746
mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents:
9252
diff
changeset
|
148 end |
dbe3ae6f9746
mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents:
9252
diff
changeset
|
149 |
9249
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
150 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
|
151 return true; |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
152 end); |
9250
9a8006f9e983
mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents:
9249
diff
changeset
|
153 |
9518
a62fa766d8f3
mod_vcard_legacy: Create nodes with open access (fixes #1221)
Kim Alvefur <zash@zash.se>
parents:
9286
diff
changeset
|
154 local node_defaults = { |
a62fa766d8f3
mod_vcard_legacy: Create nodes with open access (fixes #1221)
Kim Alvefur <zash@zash.se>
parents:
9286
diff
changeset
|
155 access_model = "open"; |
a62fa766d8f3
mod_vcard_legacy: Create nodes with open access (fixes #1221)
Kim Alvefur <zash@zash.se>
parents:
9286
diff
changeset
|
156 _defaults_only = true; |
a62fa766d8f3
mod_vcard_legacy: Create nodes with open access (fixes #1221)
Kim Alvefur <zash@zash.se>
parents:
9286
diff
changeset
|
157 }; |
a62fa766d8f3
mod_vcard_legacy: Create nodes with open access (fixes #1221)
Kim Alvefur <zash@zash.se>
parents:
9286
diff
changeset
|
158 |
9808
00d210deea28
mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents:
9672
diff
changeset
|
159 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
|
160 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
|
161 |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
162 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
|
163 :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
|
164 |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
165 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
|
166 |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
167 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
|
168 |
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("n") |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
170 :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
|
171 :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
|
172 :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
|
173 :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
|
174 :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
|
175 :up(); |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
176 |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
177 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
|
178 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
|
179 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
|
180 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
|
181 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
|
182 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
|
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 == "EMAIL" 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("USERID"); |
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("email") |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
188 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
|
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 end |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
197 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
|
198 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
|
199 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
|
200 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
|
201 end |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
202 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
|
203 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
|
204 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
|
205 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
|
206 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
|
207 end |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
208 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
|
209 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
|
210 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
|
211 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
|
212 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
|
213 end |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
214 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
|
215 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
|
216 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
|
217 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
|
218 end |
9286
992e986589b8
mod_vcard_legacy: Add some notes
Kim Alvefur <zash@zash.se>
parents:
9285
diff
changeset
|
219 -- <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
|
220 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
|
221 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
|
222 :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
|
223 :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
|
224 :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
|
225 :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
|
226 :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
|
227 :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
|
228 :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
|
229 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
|
230 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
|
231 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
|
232 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
|
233 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
|
234 end |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
235 vcard4:up():up():up(); |
10117
8643b784626c
mod_vcard_legacy: Add support for JABBERID - impp/uri conversion
Kim Alvefur <zash@zash.se>
parents:
9814
diff
changeset
|
236 elseif tag.name == "JABBERID" then |
8643b784626c
mod_vcard_legacy: Add support for JABBERID - impp/uri conversion
Kim Alvefur <zash@zash.se>
parents:
9814
diff
changeset
|
237 vcard4:tag("impp") |
8643b784626c
mod_vcard_legacy: Add support for JABBERID - impp/uri conversion
Kim Alvefur <zash@zash.se>
parents:
9814
diff
changeset
|
238 :text_tag("uri", "xmpp:" .. tag:get_text()) |
8643b784626c
mod_vcard_legacy: Add support for JABBERID - impp/uri conversion
Kim Alvefur <zash@zash.se>
parents:
9814
diff
changeset
|
239 :up(); |
9255
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
240 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
|
241 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
|
242 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
|
243 -- 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
|
244 |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
245 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
|
246 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
|
247 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
|
248 |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
249 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
|
250 :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
|
251 :tag("info", { |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
252 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
|
253 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
|
254 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
|
255 }); |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
256 |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
257 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
|
258 :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
|
259 :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
|
260 |
9808
00d210deea28
mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents:
9672
diff
changeset
|
261 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
|
262 end |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
263 end |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
264 end |
9808
00d210deea28
mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents:
9672
diff
changeset
|
265 return vcard4, avatars; |
00d210deea28
mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents:
9672
diff
changeset
|
266 end |
9255
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
267 |
9808
00d210deea28
mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents:
9672
diff
changeset
|
268 function save_to_pep(pep_service, actor, vcard4, avatars) |
9814
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
269 if avatars then |
9808
00d210deea28
mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents:
9672
diff
changeset
|
270 |
9814
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
271 if pep_service:purge("urn:xmpp:avatar:metadata", actor) then |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
272 pep_service:purge("urn:xmpp:avatar:data", actor); |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
273 end |
9808
00d210deea28
mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents:
9672
diff
changeset
|
274 |
9814
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
275 local avatar_defaults = node_defaults; |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
276 if #avatars > 1 then |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
277 avatar_defaults = {}; |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
278 for k,v in pairs(node_defaults) do |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
279 avatar_defaults[k] = v; |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
280 end |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
281 avatar_defaults.max_items = #avatars; |
9809
5648e8733569
mod_vcard_legacy: Adapt node defaults to number of avatars
Kim Alvefur <zash@zash.se>
parents:
9808
diff
changeset
|
282 end |
9814
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
283 for _, avatar in ipairs(avatars) do |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
284 local ok, err = pep_service:publish("urn:xmpp:avatar:data", actor, avatar.hash, avatar.data, avatar_defaults); |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
285 if ok then |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
286 ok, err = pep_service:publish("urn:xmpp:avatar:metadata", actor, avatar.hash, avatar.meta, avatar_defaults); |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
287 end |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
288 if not ok then |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
289 return ok, err; |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
290 end |
9808
00d210deea28
mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents:
9672
diff
changeset
|
291 end |
00d210deea28
mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents:
9672
diff
changeset
|
292 end |
00d210deea28
mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents:
9672
diff
changeset
|
293 |
9814
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
294 if vcard4 then |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
295 return pep_service:publish("urn:xmpp:vcard4", actor, "current", vcard4, node_defaults); |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
296 end |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
297 |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
298 return true; |
9808
00d210deea28
mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents:
9672
diff
changeset
|
299 end |
00d210deea28
mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents:
9672
diff
changeset
|
300 |
00d210deea28
mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents:
9672
diff
changeset
|
301 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
|
302 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
|
303 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
|
304 |
00d210deea28
mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents:
9672
diff
changeset
|
305 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
|
306 |
00d210deea28
mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents:
9672
diff
changeset
|
307 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
|
308 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
|
309 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
|
310 else |
9268
628b99811301
mod_vcard_legacy: Factor out error handling into a function
Kim Alvefur <zash@zash.se>
parents:
9267
diff
changeset
|
311 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
|
312 end |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
313 |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
314 return true; |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
315 end); |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
316 |
9250
9a8006f9e983
mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents:
9249
diff
changeset
|
317 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
|
318 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
|
319 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
|
320 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
|
321 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
|
322 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
|
323 |
10269
4701415f5b0e
mod_vcard_legacy: Don't owerwrite empty photo elements (fixes #1432)
Kim Alvefur <zash@zash.se>
parents:
10268
diff
changeset
|
324 local x_update = stanza:get_child("x", "vcard-temp:x:update"); |
4701415f5b0e
mod_vcard_legacy: Don't owerwrite empty photo elements (fixes #1432)
Kim Alvefur <zash@zash.se>
parents:
10268
diff
changeset
|
325 if not x_update then |
4701415f5b0e
mod_vcard_legacy: Don't owerwrite empty photo elements (fixes #1432)
Kim Alvefur <zash@zash.se>
parents:
10268
diff
changeset
|
326 x_update = st.stanza("x", { xmlns = "vcard-temp:x:update" }):tag("photo"); |
4701415f5b0e
mod_vcard_legacy: Don't owerwrite empty photo elements (fixes #1432)
Kim Alvefur <zash@zash.se>
parents:
10268
diff
changeset
|
327 stanza:add_direct_child(x_update); |
4701415f5b0e
mod_vcard_legacy: Don't owerwrite empty photo elements (fixes #1432)
Kim Alvefur <zash@zash.se>
parents:
10268
diff
changeset
|
328 elseif x_update:get_child("photo") then |
4701415f5b0e
mod_vcard_legacy: Don't owerwrite empty photo elements (fixes #1432)
Kim Alvefur <zash@zash.se>
parents:
10268
diff
changeset
|
329 return; -- XEP implies that these should be left alone |
4701415f5b0e
mod_vcard_legacy: Don't owerwrite empty photo elements (fixes #1432)
Kim Alvefur <zash@zash.se>
parents:
10268
diff
changeset
|
330 else |
4701415f5b0e
mod_vcard_legacy: Don't owerwrite empty photo elements (fixes #1432)
Kim Alvefur <zash@zash.se>
parents:
10268
diff
changeset
|
331 x_update:tag("photo"); |
4701415f5b0e
mod_vcard_legacy: Don't owerwrite empty photo elements (fixes #1432)
Kim Alvefur <zash@zash.se>
parents:
10268
diff
changeset
|
332 end |
9270
b024fae6919e
mod_vcard_legacy: Rename variable for consistency
Kim Alvefur <zash@zash.se>
parents:
9269
diff
changeset
|
333 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
|
334 if ok and avatar_hash then |
10268
210278d5f995
mod_vcard_legacy: Advertise lack of avatar correctly (fixes #1431) (thanks lovetox)
Kim Alvefur <zash@zash.se>
parents:
9814
diff
changeset
|
335 x_update:text(avatar_hash); |
9250
9a8006f9e983
mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents:
9249
diff
changeset
|
336 end |
9a8006f9e983
mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents:
9249
diff
changeset
|
337 end |
9a8006f9e983
mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents:
9249
diff
changeset
|
338 |
9a8006f9e983
mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents:
9249
diff
changeset
|
339 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
|
340 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
|
341 module:hook("pre-presence/host", inject_xep153, 1); |
9810
2d8e2de36654
mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents:
9809
diff
changeset
|
342 |
9813
071aaaa5cb34
mod_vcard_legacy: Allow disabling vcard conversion
Kim Alvefur <zash@zash.se>
parents:
9812
diff
changeset
|
343 if module:get_option_boolean("upgrade_legacy_vcards", true) then |
9810
2d8e2de36654
mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents:
9809
diff
changeset
|
344 module:hook("resource-bind", function (event) |
2d8e2de36654
mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents:
9809
diff
changeset
|
345 local session = event.session; |
2d8e2de36654
mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents:
9809
diff
changeset
|
346 local username = session.username; |
2d8e2de36654
mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents:
9809
diff
changeset
|
347 local vcard_temp = vcards:get(username); |
2d8e2de36654
mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents:
9809
diff
changeset
|
348 if not vcard_temp then |
2d8e2de36654
mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents:
9809
diff
changeset
|
349 session.log("debug", "No legacy vCard to migrate or already migrated"); |
2d8e2de36654
mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents:
9809
diff
changeset
|
350 return; |
2d8e2de36654
mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents:
9809
diff
changeset
|
351 end |
9812
330a937e085e
mod_vcard_legacy: Don't overwrite existing PEP data
Kim Alvefur <zash@zash.se>
parents:
9811
diff
changeset
|
352 local pep_service = mod_pep.get_pep_service(username); |
9814
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
353 vcard_temp = st.deserialize(vcard_temp); |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
354 local vcard4, avatars = vcard_to_pep(vcard_temp); |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
355 if pep_service:get_last_item("urn:xmpp:vcard4", true) then |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
356 vcard4 = nil; |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
357 end |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
358 if pep_service:get_last_item("urn:xmpp:avatar:metadata", true) |
9812
330a937e085e
mod_vcard_legacy: Don't overwrite existing PEP data
Kim Alvefur <zash@zash.se>
parents:
9811
diff
changeset
|
359 or pep_service:get_last_item("urn:xmpp:avatar:data", true) then |
9814
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
360 avatars = nil; |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
361 end |
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
362 if not (vcard4 or avatars) then |
9812
330a937e085e
mod_vcard_legacy: Don't overwrite existing PEP data
Kim Alvefur <zash@zash.se>
parents:
9811
diff
changeset
|
363 session.log("debug", "Already PEP data, not overwriting with migrated data"); |
330a937e085e
mod_vcard_legacy: Don't overwrite existing PEP data
Kim Alvefur <zash@zash.se>
parents:
9811
diff
changeset
|
364 vcards:set(username, nil); |
330a937e085e
mod_vcard_legacy: Don't overwrite existing PEP data
Kim Alvefur <zash@zash.se>
parents:
9811
diff
changeset
|
365 return; |
330a937e085e
mod_vcard_legacy: Don't overwrite existing PEP data
Kim Alvefur <zash@zash.se>
parents:
9811
diff
changeset
|
366 end |
9814
5eb4ef537e98
mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents:
9813
diff
changeset
|
367 local ok, err = save_to_pep(pep_service, true, vcard4, avatars); |
9810
2d8e2de36654
mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents:
9809
diff
changeset
|
368 if ok and vcards:set(username, nil) then |
2d8e2de36654
mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents:
9809
diff
changeset
|
369 session.log("info", "Migrated vCard-temp to PEP"); |
2d8e2de36654
mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents:
9809
diff
changeset
|
370 else |
2d8e2de36654
mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents:
9809
diff
changeset
|
371 session.log("info", "Failed to migrate vCard-temp to PEP: %s", err or "problem emptying 'vcard' store"); |
2d8e2de36654
mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents:
9809
diff
changeset
|
372 end |
2d8e2de36654
mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents:
9809
diff
changeset
|
373 end); |
9813
071aaaa5cb34
mod_vcard_legacy: Allow disabling vcard conversion
Kim Alvefur <zash@zash.se>
parents:
9812
diff
changeset
|
374 end |