mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289) 0.11
authorKim Alvefur <zash@zash.se>
Thu, 10 Jan 2019 15:39:02 +0100
branch0.11
changeset 9814 2d8e2de36654
parent 9813 5648e8733569
child 9815 ce6eb482eb50
mod_vcard_legacy: Upgrade vcard-temp on login (fixes #1289)
plugins/mod_vcard_legacy.lua
--- a/plugins/mod_vcard_legacy.lua	Fri Jan 11 09:20:48 2019 +0100
+++ b/plugins/mod_vcard_legacy.lua	Thu Jan 10 15:39:02 2019 +0100
@@ -130,10 +130,6 @@
 		end
 	end
 
-	if not vcard_temp.tags[1] then
-		vcard_temp = st.deserialize(vcards:get(jid_split(stanza.attr.to) or origin.username)) or vcard_temp;
-	end
-
 	origin.send(st.reply(stanza):add_child(vcard_temp));
 	return true;
 end);
@@ -310,3 +306,21 @@
 module:hook("pre-presence/full", inject_xep153, 1);
 module:hook("pre-presence/bare", inject_xep153, 1);
 module:hook("pre-presence/host", inject_xep153, 1);
+
+module:hook("resource-bind", function (event)
+	local session = event.session;
+	local username = session.username;
+	local vcard_temp = vcards:get(username);
+	if not vcard_temp then
+		session.log("debug", "No legacy vCard to migrate or already migrated");
+		return;
+	end
+	vcard_temp = st.deserialize(vcard_temp);
+	local pep_service = mod_pep.get_pep_service(username);
+	local ok, err = save_to_pep(pep_service, true, vcard_to_pep(vcard_temp));
+	if ok and vcards:set(username, nil) then
+		session.log("info", "Migrated vCard-temp to PEP");
+	else
+		session.log("info", "Failed to migrate vCard-temp to PEP: %s", err or "problem emptying 'vcard' store");
+	end
+end);