changeset 749:1a7cdc874b8c

mod_compat_vcard: Handle vcard requests sent to full JIDs (a spec violation commited by older versions of ejabberd and possibly others) - replaces vcard_compatibility option from Prosody 0.8
author Matthew Wild <mwild1@gmail.com>
date Thu, 26 Jul 2012 15:14:06 +0100
parents f25b6a9f97bb
children 8133dd5f266a
files mod_compat_vcard/mod_compat_vcard.lua
diffstat 1 files changed, 19 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_compat_vcard/mod_compat_vcard.lua	Thu Jul 26 15:14:06 2012 +0100
@@ -0,0 +1,19 @@
+-- Compatibility with clients and servers (i.e. ejabberd) that send vcard
+-- requests to the full JID
+--
+-- https://support.process-one.net/browse/EJAB-1045
+
+local jid_bare = require "util.jid".bare;
+local st = require "util.stanza";
+local core_process_stanza = prosody.core_process_stanza;
+
+module:hook("iq/full", function(event)
+	local stanza = event.stanza;
+	local payload = stanza.tags[1];
+	if payload.name == "vCard" and stanza.attr.type == "get" and payload.attr.xmlns == "vcard-temp" then
+		local fixed_stanza = st.clone(event.stanza);
+		fixed_stanza.attr.to = jid_bare(stanza.attr.to);
+		core_process_stanza(event.origin, fixed_stanza);
+		return true;
+	end
+end, 1);