Software /
code /
prosody
Annotate
plugins/mod_vcard_legacy.lua @ 9256:12d3d96e3918
mod_vcard_legacy: Respond with old vcard
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 21 Aug 2018 17:16:30 +0200 |
parent | 9255:2aa40526df7b |
child | 9257:05bd21c122ae |
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"); |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 module:add_feature("urn:xmpp:pep-vcard-conversion:0"); |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 -- Simple translations |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 -- <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
|
16 local simple_map = { |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 nickname = "text"; |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 title = "text"; |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 role = "text"; |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 categories = "text"; |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 note = "text"; |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 url = "uri"; |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 bday = "date"; |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 } |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 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
|
27 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
|
28 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
|
29 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
|
30 |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 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
|
32 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
|
33 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
|
34 |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 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
|
36 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
|
37 |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 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
|
39 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
|
40 :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
|
41 :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
|
42 :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
|
43 :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
|
44 :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
|
45 :up(); |
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 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
|
48 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
|
49 if typ then |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
50 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
|
51 if text then |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 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
|
53 end |
9251
3f31e10e8256
mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents:
9250
diff
changeset
|
54 elseif tag.name == "email" then |
3f31e10e8256
mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents:
9250
diff
changeset
|
55 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
|
56 if text then |
3f31e10e8256
mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents:
9250
diff
changeset
|
57 vcard_temp:tag("EMAIL") |
3f31e10e8256
mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents:
9250
diff
changeset
|
58 :text_tag("USERID", text) |
3f31e10e8256
mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents:
9250
diff
changeset
|
59 :tag("INTERNET"):up(); |
3f31e10e8256
mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents:
9250
diff
changeset
|
60 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
|
61 vcard_temp:tag("HOME"):up(); |
3f31e10e8256
mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents:
9250
diff
changeset
|
62 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
|
63 vcard_temp:tag("WORK"):up(); |
3f31e10e8256
mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents:
9250
diff
changeset
|
64 end |
3f31e10e8256
mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents:
9250
diff
changeset
|
65 vcard_temp:up(); |
3f31e10e8256
mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents:
9250
diff
changeset
|
66 end |
9252
292d283c7694
mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents:
9251
diff
changeset
|
67 elseif tag.name == "tel" then |
292d283c7694
mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents:
9251
diff
changeset
|
68 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
|
69 if text then |
292d283c7694
mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents:
9251
diff
changeset
|
70 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
|
71 text = text:sub(5) |
292d283c7694
mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents:
9251
diff
changeset
|
72 end |
292d283c7694
mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents:
9251
diff
changeset
|
73 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
|
74 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
|
75 vcard_temp:tag("HOME"):up(); |
292d283c7694
mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents:
9251
diff
changeset
|
76 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
|
77 vcard_temp:tag("WORK"):up(); |
292d283c7694
mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents:
9251
diff
changeset
|
78 end |
292d283c7694
mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents:
9251
diff
changeset
|
79 vcard_temp:up(); |
292d283c7694
mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents:
9251
diff
changeset
|
80 end |
9254
2ffbcad8ec50
mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents:
9253
diff
changeset
|
81 elseif tag.name == "adr" then |
2ffbcad8ec50
mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents:
9253
diff
changeset
|
82 vcard_temp:tag("ADR") |
2ffbcad8ec50
mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents:
9253
diff
changeset
|
83 :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
|
84 :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
|
85 :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
|
86 :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
|
87 :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
|
88 :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
|
89 :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
|
90 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
|
91 vcard_temp:tag("HOME"):up(); |
2ffbcad8ec50
mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents:
9253
diff
changeset
|
92 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
|
93 vcard_temp:tag("WORK"):up(); |
2ffbcad8ec50
mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents:
9253
diff
changeset
|
94 end |
2ffbcad8ec50
mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents:
9253
diff
changeset
|
95 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
|
96 end |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
97 end |
9256
12d3d96e3918
mod_vcard_legacy: Respond with old vcard
Kim Alvefur <zash@zash.se>
parents:
9255
diff
changeset
|
98 else |
12d3d96e3918
mod_vcard_legacy: Respond with old vcard
Kim Alvefur <zash@zash.se>
parents:
9255
diff
changeset
|
99 local legacy_vcard = st.deserialize(vcards:get(jid_split(stanza.attr.to) or origin.username)); |
12d3d96e3918
mod_vcard_legacy: Respond with old vcard
Kim Alvefur <zash@zash.se>
parents:
9255
diff
changeset
|
100 origin.send(st.reply(stanza):add_child(legacy_vcard or vcard_temp)); |
12d3d96e3918
mod_vcard_legacy: Respond with old vcard
Kim Alvefur <zash@zash.se>
parents:
9255
diff
changeset
|
101 return true; |
9249
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
102 end |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
103 |
9253
dbe3ae6f9746
mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents:
9252
diff
changeset
|
104 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
|
105 local data_ok, avatar_data = pep_service:get_items("urn:xmpp:avatar:data", stanza.attr.from); |
dbe3ae6f9746
mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents:
9252
diff
changeset
|
106 if meta_ok and data_ok then |
dbe3ae6f9746
mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents:
9252
diff
changeset
|
107 for _, hash in ipairs(avatar_meta) do |
dbe3ae6f9746
mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents:
9252
diff
changeset
|
108 local meta = avatar_meta[hash]; |
dbe3ae6f9746
mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents:
9252
diff
changeset
|
109 local data = avatar_data[hash]; |
dbe3ae6f9746
mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents:
9252
diff
changeset
|
110 local info = meta.tags[1]:get_child("info"); |
dbe3ae6f9746
mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents:
9252
diff
changeset
|
111 vcard_temp:tag("PHOTO") |
dbe3ae6f9746
mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents:
9252
diff
changeset
|
112 :text_tag("TYPE", info and info.attr.type) |
dbe3ae6f9746
mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents:
9252
diff
changeset
|
113 :text_tag("BINVAL", data.tags[1]:get_text()) |
dbe3ae6f9746
mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents:
9252
diff
changeset
|
114 :up(); |
dbe3ae6f9746
mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents:
9252
diff
changeset
|
115 end |
dbe3ae6f9746
mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents:
9252
diff
changeset
|
116 end |
dbe3ae6f9746
mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents:
9252
diff
changeset
|
117 |
9249
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
118 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
|
119 return true; |
506aabdb13bc
mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
120 end); |
9250
9a8006f9e983
mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents:
9249
diff
changeset
|
121 |
9255
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
122 module:hook("iq-set/self/vcard-temp:vCard", function (event) |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
123 local origin, stanza = event.origin, event.stanza; |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
124 local pep_service = mod_pep.get_pep_service(origin.username); |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
125 |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
126 local vcard_temp = stanza.tags[1]; |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
127 |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
128 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
|
129 :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
|
130 |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
131 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
|
132 |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
133 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
|
134 |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
135 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
|
136 :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
|
137 :text_tag("given", N and N:get_child_text("GIVEN")) |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
138 :text_tag("additional", N and N:get_child_text("MIDDLe")) |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
139 :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
|
140 :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
|
141 :up(); |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
142 |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
143 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
|
144 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
|
145 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
|
146 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
|
147 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
|
148 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
|
149 end |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
150 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
|
151 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
|
152 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
|
153 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
|
154 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
|
155 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
|
156 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
|
157 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
|
158 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
|
159 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
|
160 end |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
161 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
|
162 end |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
163 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
|
164 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
|
165 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
|
166 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
|
167 end |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
168 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
|
169 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
|
170 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
|
171 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
|
172 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
|
173 end |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
174 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
|
175 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
|
176 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
|
177 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
|
178 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
|
179 end |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
180 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
|
181 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
|
182 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
|
183 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
|
184 end |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
185 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
|
186 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
|
187 :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
|
188 :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
|
189 :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
|
190 :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
|
191 :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
|
192 :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
|
193 :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
|
194 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
|
195 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
|
196 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
|
197 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
|
198 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
|
199 end |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
200 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
|
201 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
|
202 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
|
203 local avatar_payload = tag:get_child_text("BINVAL"); |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
204 |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
205 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
|
206 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
|
207 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
|
208 |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
209 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
|
210 :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
|
211 :tag("info", { |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
212 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
|
213 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
|
214 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
|
215 }); |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
216 |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
217 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
|
218 :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
|
219 :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
|
220 |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
221 if pep_service:publish("urn:xmpp:avatar:data", origin.full_jid, avatar_hash, avatar_data) then |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
222 pep_service:publish("urn:xmpp:avatar:metadata", origin.full_jid, avatar_hash, avatar_meta); |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
223 end |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
224 end |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
225 end |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
226 end |
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 local ok, err = pep_service:publish("urn:xmpp:vcard4", origin.full_jid, "current", vcard4); |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
229 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
|
230 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
|
231 elseif err == "forbidden" then |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
232 origin.send(st.error_reply(stanza, "auth", "forbidden")); |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
233 elseif err == "internal-server-error" then |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
234 origin.send(st.error_reply(stanza, "wait", "internal-server-error")); |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
235 else |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
236 origin.send(st.error_reply(stanza, "modify", "undefined-condition", err)); |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
237 end |
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 return true; |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
240 end); |
2aa40526df7b
mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents:
9254
diff
changeset
|
241 |
9250
9a8006f9e983
mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents:
9249
diff
changeset
|
242 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
|
243 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
|
244 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
|
245 if not username then return end |
9a8006f9e983
mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents:
9249
diff
changeset
|
246 local pep = mod_pep.get_pep_service(username); |
9a8006f9e983
mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents:
9249
diff
changeset
|
247 |
9a8006f9e983
mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents:
9249
diff
changeset
|
248 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
|
249 local x_update = st.stanza("x", { xmlns = "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
|
250 local ok, avatar_hash = pep:get_last_item("urn:xmpp:avatar:metadata", true); |
9a8006f9e983
mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents:
9249
diff
changeset
|
251 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
|
252 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
|
253 end |
9a8006f9e983
mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents:
9249
diff
changeset
|
254 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
|
255 end |
9a8006f9e983
mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents:
9249
diff
changeset
|
256 |
9a8006f9e983
mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents:
9249
diff
changeset
|
257 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
|
258 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
|
259 module:hook("pre-presence/host", inject_xep153, 1); |