plugins/mod_vcard_legacy.lua
author Kim Alvefur <zash@zash.se>
Sat, 23 Mar 2024 20:48:19 +0100
changeset 13465 c673ff1075bd
parent 12981 74b9e05af71e
permissions -rw-r--r--
mod_posix: Move everything to util.startup This allows greater control over the order of events. Notably, the internal ordering between daemonization, initialization of libunbound and setup of signal handling is sensitive. libunbound starts a separate thread for processing DNS requests. If this thread is started before signal handling has been set up, it will not inherit the signal handlers and instead behave as it would have before signal handlers were set up, i.e. cause the whole process to immediately exit. libunbound is usually initialized on the first DNS request, usually triggered by an outgoing s2s connection attempt. If daemonization happens before signals have been set up, signals may not be processed at all.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12981
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 11948
diff changeset
     1
local st = require "prosody.util.stanza";
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 11948
diff changeset
     2
local jid_split = require "prosody.util.jid".split;
9252
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
12981
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 11948
diff changeset
     6
local sha1 = require "prosody.util.hashes".sha1;
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 11948
diff changeset
     7
local base64_decode = require "prosody.util.encodings".base64.decode;
9258
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
     8
9259
12d3d96e3918 mod_vcard_legacy: Respond with old vcard
Kim Alvefur <zash@zash.se>
parents: 9258
diff changeset
     9
local vcards = module:open_store("vcard");
12d3d96e3918 mod_vcard_legacy: Respond with old vcard
Kim Alvefur <zash@zash.se>
parents: 9258
diff changeset
    10
9252
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");
9263
0fc6ffc57dc0 mod_vcard_legacy: Announce feature on bare JID per XEP
Kim Alvefur <zash@zash.se>
parents: 9262
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: 9262
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: 9262
diff changeset
    14
end);
9252
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    15
9271
628b99811301 mod_vcard_legacy: Factor out error handling into a function
Kim Alvefur <zash@zash.se>
parents: 9270
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: 9270
diff changeset
    17
	if err == "forbidden" then
628b99811301 mod_vcard_legacy: Factor out error handling into a function
Kim Alvefur <zash@zash.se>
parents: 9270
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: 9270
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: 9270
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: 9270
diff changeset
    21
	else
628b99811301 mod_vcard_legacy: Factor out error handling into a function
Kim Alvefur <zash@zash.se>
parents: 9270
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: 9270
diff changeset
    23
	end
628b99811301 mod_vcard_legacy: Factor out error handling into a function
Kim Alvefur <zash@zash.se>
parents: 9270
diff changeset
    24
end
628b99811301 mod_vcard_legacy: Factor out error handling into a function
Kim Alvefur <zash@zash.se>
parents: 9270
diff changeset
    25
9252
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);
10553
3e50f86e5a2e mod_vcard_legacy: Ignore an unused variable [luacheck]
Kim Alvefur <zash@zash.se>
parents: 10274
diff changeset
    41
	local ok, _, vcard4_item = pep_service:get_last_item("urn:xmpp:vcard4", stanza.attr.from);
9252
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
9254
3f31e10e8256 mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents: 9253
diff changeset
    66
			elseif tag.name == "email" then
3f31e10e8256 mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents: 9253
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: 9253
diff changeset
    68
				if text then
3f31e10e8256 mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents: 9253
diff changeset
    69
					vcard_temp:tag("EMAIL")
3f31e10e8256 mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents: 9253
diff changeset
    70
						:text_tag("USERID", text)
3f31e10e8256 mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents: 9253
diff changeset
    71
						:tag("INTERNET"):up();
3f31e10e8256 mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents: 9253
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: 9253
diff changeset
    73
						vcard_temp:tag("HOME"):up();
3f31e10e8256 mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents: 9253
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: 9253
diff changeset
    75
						vcard_temp:tag("WORK"):up();
3f31e10e8256 mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents: 9253
diff changeset
    76
					end
3f31e10e8256 mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents: 9253
diff changeset
    77
					vcard_temp:up();
3f31e10e8256 mod_vcard_legacy: Add translation of email field
Kim Alvefur <zash@zash.se>
parents: 9253
diff changeset
    78
				end
9255
292d283c7694 mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
    79
			elseif tag.name == "tel" then
292d283c7694 mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents: 9254
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: 9254
diff changeset
    81
				if text then
292d283c7694 mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents: 9254
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: 9254
diff changeset
    83
						text = text:sub(5)
292d283c7694 mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
    84
					end
292d283c7694 mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents: 9254
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: 9254
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: 9254
diff changeset
    87
						vcard_temp:tag("HOME"):up();
292d283c7694 mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents: 9254
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: 9254
diff changeset
    89
						vcard_temp:tag("WORK"):up();
292d283c7694 mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
    90
					end
292d283c7694 mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
    91
					vcard_temp:up();
292d283c7694 mod_vcard_legacy: Add translation of telephone field
Kim Alvefur <zash@zash.se>
parents: 9254
diff changeset
    92
				end
9257
2ffbcad8ec50 mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents: 9256
diff changeset
    93
			elseif tag.name == "adr" then
2ffbcad8ec50 mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents: 9256
diff changeset
    94
				vcard_temp:tag("ADR")
2ffbcad8ec50 mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents: 9256
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: 9256
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: 9256
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: 9256
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: 9256
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: 9256
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: 9256
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: 9256
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: 9256
diff changeset
   103
					vcard_temp:tag("HOME"):up();
2ffbcad8ec50 mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents: 9256
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: 9256
diff changeset
   105
					vcard_temp:tag("WORK"):up();
2ffbcad8ec50 mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents: 9256
diff changeset
   106
				end
2ffbcad8ec50 mod_vcard_legacy: Add support for address field
Kim Alvefur <zash@zash.se>
parents: 9256
diff changeset
   107
				vcard_temp:up();
10121
8643b784626c mod_vcard_legacy: Add support for JABBERID - impp/uri conversion
Kim Alvefur <zash@zash.se>
parents: 9818
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: 9818
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: 9818
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: 9818
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: 9818
diff changeset
   112
				end
10122
199dae5b6f11 mod_vcard_legacy: Complete roundtrip support for ORG/ORGNAME
Kim Alvefur <zash@zash.se>
parents: 10121
diff changeset
   113
			elseif tag.name == "org" then
199dae5b6f11 mod_vcard_legacy: Complete roundtrip support for ORG/ORGNAME
Kim Alvefur <zash@zash.se>
parents: 10121
diff changeset
   114
				vcard_temp:tag("ORG")
199dae5b6f11 mod_vcard_legacy: Complete roundtrip support for ORG/ORGNAME
Kim Alvefur <zash@zash.se>
parents: 10121
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: 10121
diff changeset
   116
				:up();
9252
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
10219
82abf88db13f mod_vcard_legacy: Use PEP nickname if vcard4 data is unavailable
Kim Alvefur <zash@zash.se>
parents: 10122
diff changeset
   119
	else
82abf88db13f mod_vcard_legacy: Use PEP nickname if vcard4 data is unavailable
Kim Alvefur <zash@zash.se>
parents: 10122
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: 10122
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: 10122
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: 10122
diff changeset
   123
			if nickname then
82abf88db13f mod_vcard_legacy: Use PEP nickname if vcard4 data is unavailable
Kim Alvefur <zash@zash.se>
parents: 10122
diff changeset
   124
				vcard_temp:text_tag("NICKNAME", nickname);
9252
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
11948
8b5e646dfaa6 mod_vcard_legacy: Also respect avatar:metadata access restrictions
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10869
diff changeset
   129
	local ok, avatar_hash, meta = pep_service:get_last_item("urn:xmpp:avatar:metadata", stanza.attr.from);
10868
1b657605ea29 mod_vcard_legacy: Remove semi-broken support for multiple avatars
Kim Alvefur <zash@zash.se>
parents: 10553
diff changeset
   130
	if ok and avatar_hash then
9276
f2258e9750cf mod_vcard_legacy: Include avatar data even if metadata can't be loaded
Kim Alvefur <zash@zash.se>
parents: 9275
diff changeset
   131
10868
1b657605ea29 mod_vcard_legacy: Remove semi-broken support for multiple avatars
Kim Alvefur <zash@zash.se>
parents: 10553
diff changeset
   132
		local info = meta.tags[1]:get_child("info");
1b657605ea29 mod_vcard_legacy: Remove semi-broken support for multiple avatars
Kim Alvefur <zash@zash.se>
parents: 10553
diff changeset
   133
		if info then
9260
05bd21c122ae mod_vcard_legacy: Handle incomplete avatar info
Kim Alvefur <zash@zash.se>
parents: 9259
diff changeset
   134
			vcard_temp:tag("PHOTO");
10868
1b657605ea29 mod_vcard_legacy: Remove semi-broken support for multiple avatars
Kim Alvefur <zash@zash.se>
parents: 10553
diff changeset
   135
1b657605ea29 mod_vcard_legacy: Remove semi-broken support for multiple avatars
Kim Alvefur <zash@zash.se>
parents: 10553
diff changeset
   136
			if info.attr.type then
9260
05bd21c122ae mod_vcard_legacy: Handle incomplete avatar info
Kim Alvefur <zash@zash.se>
parents: 9259
diff changeset
   137
				vcard_temp:text_tag("TYPE", info.attr.type);
05bd21c122ae mod_vcard_legacy: Handle incomplete avatar info
Kim Alvefur <zash@zash.se>
parents: 9259
diff changeset
   138
			end
10868
1b657605ea29 mod_vcard_legacy: Remove semi-broken support for multiple avatars
Kim Alvefur <zash@zash.se>
parents: 10553
diff changeset
   139
1b657605ea29 mod_vcard_legacy: Remove semi-broken support for multiple avatars
Kim Alvefur <zash@zash.se>
parents: 10553
diff changeset
   140
			if info.attr.url then
9288
78673e81243f mod_vcard_legacy: Fix EXTVAL conversion (thanks pep.)
Kim Alvefur <zash@zash.se>
parents: 9287
diff changeset
   141
				vcard_temp:text_tag("EXTVAL", info.attr.url);
10868
1b657605ea29 mod_vcard_legacy: Remove semi-broken support for multiple avatars
Kim Alvefur <zash@zash.se>
parents: 10553
diff changeset
   142
			elseif info.attr.id then
1b657605ea29 mod_vcard_legacy: Remove semi-broken support for multiple avatars
Kim Alvefur <zash@zash.se>
parents: 10553
diff changeset
   143
				local data_ok, avatar_data = pep_service:get_items("urn:xmpp:avatar:data", stanza.attr.from, { info.attr.id });
1b657605ea29 mod_vcard_legacy: Remove semi-broken support for multiple avatars
Kim Alvefur <zash@zash.se>
parents: 10553
diff changeset
   144
				if data_ok and avatar_data and avatar_data[info.attr.id]  then
1b657605ea29 mod_vcard_legacy: Remove semi-broken support for multiple avatars
Kim Alvefur <zash@zash.se>
parents: 10553
diff changeset
   145
					local data = avatar_data[info.attr.id];
1b657605ea29 mod_vcard_legacy: Remove semi-broken support for multiple avatars
Kim Alvefur <zash@zash.se>
parents: 10553
diff changeset
   146
					vcard_temp:text_tag("BINVAL", data.tags[1]:get_text());
1b657605ea29 mod_vcard_legacy: Remove semi-broken support for multiple avatars
Kim Alvefur <zash@zash.se>
parents: 10553
diff changeset
   147
				end
9260
05bd21c122ae mod_vcard_legacy: Handle incomplete avatar info
Kim Alvefur <zash@zash.se>
parents: 9259
diff changeset
   148
			end
05bd21c122ae mod_vcard_legacy: Handle incomplete avatar info
Kim Alvefur <zash@zash.se>
parents: 9259
diff changeset
   149
			vcard_temp:up();
9256
dbe3ae6f9746 mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents: 9255
diff changeset
   150
		end
dbe3ae6f9746 mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents: 9255
diff changeset
   151
	end
dbe3ae6f9746 mod_vcard_legacy: Include avatar data from XEP-0084 PEP node
Kim Alvefur <zash@zash.se>
parents: 9255
diff changeset
   152
9252
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   153
	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
   154
	return true;
506aabdb13bc mod_vcard_legacy: Responds to vcard-temp queries with translated vcard4 data
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   155
end);
9253
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9252
diff changeset
   156
9521
a62fa766d8f3 mod_vcard_legacy: Create nodes with open access (fixes #1221)
Kim Alvefur <zash@zash.se>
parents: 9289
diff changeset
   157
local node_defaults = {
a62fa766d8f3 mod_vcard_legacy: Create nodes with open access (fixes #1221)
Kim Alvefur <zash@zash.se>
parents: 9289
diff changeset
   158
	access_model = "open";
a62fa766d8f3 mod_vcard_legacy: Create nodes with open access (fixes #1221)
Kim Alvefur <zash@zash.se>
parents: 9289
diff changeset
   159
	_defaults_only = true;
a62fa766d8f3 mod_vcard_legacy: Create nodes with open access (fixes #1221)
Kim Alvefur <zash@zash.se>
parents: 9289
diff changeset
   160
};
a62fa766d8f3 mod_vcard_legacy: Create nodes with open access (fixes #1221)
Kim Alvefur <zash@zash.se>
parents: 9289
diff changeset
   161
9812
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9676
diff changeset
   162
function vcard_to_pep(vcard_temp)
10868
1b657605ea29 mod_vcard_legacy: Remove semi-broken support for multiple avatars
Kim Alvefur <zash@zash.se>
parents: 10553
diff changeset
   163
	local avatar = {};
9258
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   164
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   165
	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: 9257
diff changeset
   166
		: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: 9257
diff changeset
   167
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   168
	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: 9257
diff changeset
   169
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   170
	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: 9257
diff changeset
   171
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   172
	vcard4:tag("n")
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   173
		: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: 9257
diff changeset
   174
		:text_tag("given", N and N:get_child_text("GIVEN"))
9287
161f604e14fa mod_vcard_legacy: Fix uppercase tag name (thanks pep.)
Kim Alvefur <zash@zash.se>
parents: 9276
diff changeset
   175
		:text_tag("additional", N and N:get_child_text("MIDDLE"))
9258
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   176
		: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: 9257
diff changeset
   177
		: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: 9257
diff changeset
   178
	:up();
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   179
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   180
	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: 9257
diff changeset
   181
		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: 9257
diff changeset
   182
		if typ then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   183
			local text = tag:get_text();
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   184
			if text then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   185
				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: 9257
diff changeset
   186
			end
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   187
		elseif tag.name == "EMAIL" then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   188
			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: 9257
diff changeset
   189
			if text then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   190
				vcard4:tag("email")
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   191
				vcard4:text_tag("text", text)
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   192
				vcard4:tag("parameters"):tag("type");
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   193
				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: 9257
diff changeset
   194
					vcard4:text_tag("text", "home");
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   195
				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: 9257
diff changeset
   196
					vcard4:text_tag("text", "work");
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   197
				end
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   198
				vcard4:up():up():up();
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   199
			end
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   200
		elseif tag.name == "TEL" then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   201
			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: 9257
diff changeset
   202
			if text then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   203
				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: 9257
diff changeset
   204
			end
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   205
			vcard4:tag("parameters"):tag("type");
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   206
			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: 9257
diff changeset
   207
				vcard4:text_tag("text", "home");
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   208
			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: 9257
diff changeset
   209
				vcard4:text_tag("text", "work");
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   210
			end
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   211
			vcard4:up():up():up();
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   212
		elseif tag.name == "ORG" then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   213
			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: 9257
diff changeset
   214
			if text then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   215
				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: 9257
diff changeset
   216
			end
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   217
		elseif tag.name == "DESC" then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   218
			local text = tag:get_text();
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   219
			if text then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   220
				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: 9257
diff changeset
   221
			end
9289
992e986589b8 mod_vcard_legacy: Add some notes
Kim Alvefur <zash@zash.se>
parents: 9288
diff changeset
   222
			-- <note> gets mapped into <NOTE> in the other direction
9258
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   223
		elseif tag.name == "ADR" then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   224
			vcard4:tag("adr")
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   225
				: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: 9257
diff changeset
   226
				: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: 9257
diff changeset
   227
				: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: 9257
diff changeset
   228
				: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: 9257
diff changeset
   229
				: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: 9257
diff changeset
   230
				: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: 9257
diff changeset
   231
				: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: 9257
diff changeset
   232
			vcard4:tag("parameters"):tag("type");
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   233
			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: 9257
diff changeset
   234
				vcard4:text_tag("text", "home");
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   235
			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: 9257
diff changeset
   236
				vcard4:text_tag("text", "work");
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   237
			end
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   238
			vcard4:up():up():up();
10121
8643b784626c mod_vcard_legacy: Add support for JABBERID - impp/uri conversion
Kim Alvefur <zash@zash.se>
parents: 9818
diff changeset
   239
		elseif tag.name == "JABBERID" then
8643b784626c mod_vcard_legacy: Add support for JABBERID - impp/uri conversion
Kim Alvefur <zash@zash.se>
parents: 9818
diff changeset
   240
			vcard4:tag("impp")
8643b784626c mod_vcard_legacy: Add support for JABBERID - impp/uri conversion
Kim Alvefur <zash@zash.se>
parents: 9818
diff changeset
   241
				:text_tag("uri", "xmpp:" .. tag:get_text())
8643b784626c mod_vcard_legacy: Add support for JABBERID - impp/uri conversion
Kim Alvefur <zash@zash.se>
parents: 9818
diff changeset
   242
			:up();
9258
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   243
		elseif tag.name == "PHOTO" then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   244
			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: 9257
diff changeset
   245
			local avatar_payload = tag:get_child_text("BINVAL");
9289
992e986589b8 mod_vcard_legacy: Add some notes
Kim Alvefur <zash@zash.se>
parents: 9288
diff changeset
   246
			-- Can EXTVAL be translated? No way to know the sha1 of the data?
9258
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   247
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   248
			if avatar_payload then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   249
				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: 9257
diff changeset
   250
				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: 9257
diff changeset
   251
10868
1b657605ea29 mod_vcard_legacy: Remove semi-broken support for multiple avatars
Kim Alvefur <zash@zash.se>
parents: 10553
diff changeset
   252
				avatar.hash = avatar_hash;
1b657605ea29 mod_vcard_legacy: Remove semi-broken support for multiple avatars
Kim Alvefur <zash@zash.se>
parents: 10553
diff changeset
   253
1b657605ea29 mod_vcard_legacy: Remove semi-broken support for multiple avatars
Kim Alvefur <zash@zash.se>
parents: 10553
diff changeset
   254
				avatar.meta = st.stanza("item", { id = avatar_hash, xmlns = "http://jabber.org/protocol/pubsub" })
9258
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   255
					: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: 9257
diff changeset
   256
						:tag("info", {
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   257
							bytes = tostring(#avatar_raw),
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   258
							id = avatar_hash,
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   259
							type = avatar_type,
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   260
						});
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   261
10868
1b657605ea29 mod_vcard_legacy: Remove semi-broken support for multiple avatars
Kim Alvefur <zash@zash.se>
parents: 10553
diff changeset
   262
				avatar.data = st.stanza("item", { id = avatar_hash, xmlns = "http://jabber.org/protocol/pubsub" })
9258
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   263
					: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: 9257
diff changeset
   264
						:text(avatar_payload);
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   265
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   266
			end
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   267
		end
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   268
	end
10868
1b657605ea29 mod_vcard_legacy: Remove semi-broken support for multiple avatars
Kim Alvefur <zash@zash.se>
parents: 10553
diff changeset
   269
	return vcard4, avatar;
9812
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9676
diff changeset
   270
end
9258
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   271
10868
1b657605ea29 mod_vcard_legacy: Remove semi-broken support for multiple avatars
Kim Alvefur <zash@zash.se>
parents: 10553
diff changeset
   272
function save_to_pep(pep_service, actor, vcard4, avatar)
1b657605ea29 mod_vcard_legacy: Remove semi-broken support for multiple avatars
Kim Alvefur <zash@zash.se>
parents: 10553
diff changeset
   273
	if avatar then
9812
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9676
diff changeset
   274
9818
5eb4ef537e98 mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
   275
		if pep_service:purge("urn:xmpp:avatar:metadata", actor) then
5eb4ef537e98 mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
   276
			pep_service:purge("urn:xmpp:avatar:data", actor);
5eb4ef537e98 mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
   277
		end
9812
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9676
diff changeset
   278
10869
9c27b2385fad mod_vcard_legacy: Fix publishing vcard without avatar
Kim Alvefur <zash@zash.se>
parents: 10868
diff changeset
   279
		if avatar.data and avatar.meta then
9c27b2385fad mod_vcard_legacy: Fix publishing vcard without avatar
Kim Alvefur <zash@zash.se>
parents: 10868
diff changeset
   280
			local ok, err = assert(pep_service:publish("urn:xmpp:avatar:data", actor, avatar.hash, avatar.data, node_defaults));
9c27b2385fad mod_vcard_legacy: Fix publishing vcard without avatar
Kim Alvefur <zash@zash.se>
parents: 10868
diff changeset
   281
			if ok then
9c27b2385fad mod_vcard_legacy: Fix publishing vcard without avatar
Kim Alvefur <zash@zash.se>
parents: 10868
diff changeset
   282
				ok, err = assert(pep_service:publish("urn:xmpp:avatar:metadata", actor, avatar.hash, avatar.meta, node_defaults));
9c27b2385fad mod_vcard_legacy: Fix publishing vcard without avatar
Kim Alvefur <zash@zash.se>
parents: 10868
diff changeset
   283
			end
9c27b2385fad mod_vcard_legacy: Fix publishing vcard without avatar
Kim Alvefur <zash@zash.se>
parents: 10868
diff changeset
   284
			if not ok then
9c27b2385fad mod_vcard_legacy: Fix publishing vcard without avatar
Kim Alvefur <zash@zash.se>
parents: 10868
diff changeset
   285
				return ok, err;
9c27b2385fad mod_vcard_legacy: Fix publishing vcard without avatar
Kim Alvefur <zash@zash.se>
parents: 10868
diff changeset
   286
			end
9812
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9676
diff changeset
   287
		end
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9676
diff changeset
   288
	end
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9676
diff changeset
   289
9818
5eb4ef537e98 mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
   290
	if vcard4 then
5eb4ef537e98 mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
   291
		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: 9817
diff changeset
   292
	end
5eb4ef537e98 mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
   293
5eb4ef537e98 mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
   294
	return true;
9812
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9676
diff changeset
   295
end
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9676
diff changeset
   296
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9676
diff changeset
   297
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: 9676
diff changeset
   298
	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: 9676
diff changeset
   299
	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: 9676
diff changeset
   300
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9676
diff changeset
   301
	local vcard_temp = stanza.tags[1];
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9676
diff changeset
   302
00d210deea28 mod_vcard_legacy: Factor out conversion from vcard-temp to 4
Kim Alvefur <zash@zash.se>
parents: 9676
diff changeset
   303
	local ok, err = save_to_pep(pep_service, origin.full_jid, vcard_to_pep(vcard_temp));
9258
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   304
	if ok then
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   305
		origin.send(st.reply(stanza));
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   306
	else
9271
628b99811301 mod_vcard_legacy: Factor out error handling into a function
Kim Alvefur <zash@zash.se>
parents: 9270
diff changeset
   307
		handle_error(origin, stanza, err);
9258
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   308
	end
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   309
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   310
	return true;
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   311
end);
2aa40526df7b mod_vcard_legacy: Respond to attempts to set the legacy vcard-temp
Kim Alvefur <zash@zash.se>
parents: 9257
diff changeset
   312
9253
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9252
diff changeset
   313
local function inject_xep153(event)
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9252
diff changeset
   314
	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: 9252
diff changeset
   315
	local username = origin.username;
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9252
diff changeset
   316
	if not username then return end
9676
e71484c210fb mod_vcard_legacy: Limit injection of XEP-0153 to normal presence (fixes #1252)
Kim Alvefur <zash@zash.se>
parents: 9523
diff changeset
   317
	if stanza.attr.type then return end
9273
b024fae6919e mod_vcard_legacy: Rename variable for consistency
Kim Alvefur <zash@zash.se>
parents: 9272
diff changeset
   318
	local pep_service = mod_pep.get_pep_service(username);
9253
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9252
diff changeset
   319
10273
4701415f5b0e mod_vcard_legacy: Don't owerwrite empty photo elements (fixes #1432)
Kim Alvefur <zash@zash.se>
parents: 10272
diff changeset
   320
	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: 10272
diff changeset
   321
	if not x_update then
4701415f5b0e mod_vcard_legacy: Don't owerwrite empty photo elements (fixes #1432)
Kim Alvefur <zash@zash.se>
parents: 10272
diff changeset
   322
		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: 10272
diff changeset
   323
		stanza:add_direct_child(x_update);
4701415f5b0e mod_vcard_legacy: Don't owerwrite empty photo elements (fixes #1432)
Kim Alvefur <zash@zash.se>
parents: 10272
diff changeset
   324
	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: 10272
diff changeset
   325
		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: 10272
diff changeset
   326
	else
4701415f5b0e mod_vcard_legacy: Don't owerwrite empty photo elements (fixes #1432)
Kim Alvefur <zash@zash.se>
parents: 10272
diff changeset
   327
		x_update:tag("photo");
4701415f5b0e mod_vcard_legacy: Don't owerwrite empty photo elements (fixes #1432)
Kim Alvefur <zash@zash.se>
parents: 10272
diff changeset
   328
	end
9273
b024fae6919e mod_vcard_legacy: Rename variable for consistency
Kim Alvefur <zash@zash.se>
parents: 9272
diff changeset
   329
	local ok, avatar_hash = pep_service:get_last_item("urn:xmpp:avatar:metadata", true);
9253
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9252
diff changeset
   330
	if ok and avatar_hash then
10272
210278d5f995 mod_vcard_legacy: Advertise lack of avatar correctly (fixes #1431) (thanks lovetox)
Kim Alvefur <zash@zash.se>
parents: 9818
diff changeset
   331
		x_update:text(avatar_hash);
9253
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9252
diff changeset
   332
	end
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9252
diff changeset
   333
end
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9252
diff changeset
   334
9a8006f9e983 mod_vcard_legacy: Attach vcard-temp avatar hash to outgoing presence
Kim Alvefur <zash@zash.se>
parents: 9252
diff changeset
   335
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: 9252
diff changeset
   336
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: 9252
diff changeset
   337
module:hook("pre-presence/host", inject_xep153, 1);
9814
2d8e2de36654 mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents: 9813
diff changeset
   338
9817
071aaaa5cb34 mod_vcard_legacy: Allow disabling vcard conversion
Kim Alvefur <zash@zash.se>
parents: 9816
diff changeset
   339
if module:get_option_boolean("upgrade_legacy_vcards", true) then
9814
2d8e2de36654 mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents: 9813
diff changeset
   340
module:hook("resource-bind", function (event)
2d8e2de36654 mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents: 9813
diff changeset
   341
	local session = event.session;
2d8e2de36654 mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents: 9813
diff changeset
   342
	local username = session.username;
2d8e2de36654 mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents: 9813
diff changeset
   343
	local vcard_temp = vcards:get(username);
2d8e2de36654 mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents: 9813
diff changeset
   344
	if not vcard_temp then
2d8e2de36654 mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents: 9813
diff changeset
   345
		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: 9813
diff changeset
   346
		return;
2d8e2de36654 mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents: 9813
diff changeset
   347
	end
9816
330a937e085e mod_vcard_legacy: Don't overwrite existing PEP data
Kim Alvefur <zash@zash.se>
parents: 9815
diff changeset
   348
	local pep_service = mod_pep.get_pep_service(username);
9818
5eb4ef537e98 mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
   349
	vcard_temp = st.deserialize(vcard_temp);
5eb4ef537e98 mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
   350
	local vcard4, avatars = vcard_to_pep(vcard_temp);
5eb4ef537e98 mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
   351
	if pep_service:get_last_item("urn:xmpp:vcard4", true) then
5eb4ef537e98 mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
   352
		vcard4 = nil;
5eb4ef537e98 mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
   353
	end
5eb4ef537e98 mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
   354
	if pep_service:get_last_item("urn:xmpp:avatar:metadata", true)
9816
330a937e085e mod_vcard_legacy: Don't overwrite existing PEP data
Kim Alvefur <zash@zash.se>
parents: 9815
diff changeset
   355
	or pep_service:get_last_item("urn:xmpp:avatar:data", true) then
9818
5eb4ef537e98 mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
   356
		avatars = nil;
5eb4ef537e98 mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
   357
	end
5eb4ef537e98 mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
   358
	if not (vcard4 or avatars) then
9816
330a937e085e mod_vcard_legacy: Don't overwrite existing PEP data
Kim Alvefur <zash@zash.se>
parents: 9815
diff changeset
   359
		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: 9815
diff changeset
   360
		vcards:set(username, nil);
330a937e085e mod_vcard_legacy: Don't overwrite existing PEP data
Kim Alvefur <zash@zash.se>
parents: 9815
diff changeset
   361
		return;
330a937e085e mod_vcard_legacy: Don't overwrite existing PEP data
Kim Alvefur <zash@zash.se>
parents: 9815
diff changeset
   362
	end
9818
5eb4ef537e98 mod_vcard_legacy: Handle partial migration
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
   363
	local ok, err = save_to_pep(pep_service, true, vcard4, avatars);
9814
2d8e2de36654 mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents: 9813
diff changeset
   364
	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: 9813
diff changeset
   365
		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: 9813
diff changeset
   366
	else
2d8e2de36654 mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents: 9813
diff changeset
   367
		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: 9813
diff changeset
   368
	end
2d8e2de36654 mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
Kim Alvefur <zash@zash.se>
parents: 9813
diff changeset
   369
end);
9817
071aaaa5cb34 mod_vcard_legacy: Allow disabling vcard conversion
Kim Alvefur <zash@zash.se>
parents: 9816
diff changeset
   370
end