diff mod_extdisco/mod_extdisco.lua @ 3605:452ae6effd02

mod_extdisco: Also handle XEP-0215 v0.7
author Kim Alvefur <zash@zash.se>
date Thu, 23 May 2019 17:34:49 +0200
parents 60df58c5f7dd
children 7811ba467525
line wrap: on
line diff
--- a/mod_extdisco/mod_extdisco.lua	Thu May 23 17:28:28 2019 +0200
+++ b/mod_extdisco/mod_extdisco.lua	Thu May 23 17:34:49 2019 +0200
@@ -2,15 +2,17 @@
 
 local services = module:get_option("external_services");
 
-local xmlns_extdisco = "urn:xmpp:extdisco:1";
+local xmlns_extdisco_1 = "urn:xmpp:extdisco:1";
+local xmlns_extdisco_2 = "urn:xmpp:extdisco:2";
 
-module:add_feature(xmlns_extdisco);
+module:add_feature(xmlns_extdisco_1);
+module:add_feature(xmlns_extdisco_2);
 
-module:hook("iq-get/host/"..xmlns_extdisco..":services", function (event)
+local function handle_services(event)
 	local origin, stanza = event.origin, event.stanza;
-	local service = stanza:get_child("service", xmlns_extdisco);
+	local service = stanza.tags[1];
 	local service_type = service and service.attr.type;
-	local reply = st.reply(stanza):tag("services", { xmlns = xmlns_extdisco });
+	local reply = st.reply(stanza):tag("services", { xmlns = service.attr.xmlns });
 	for host, service_info in pairs(services) do
 		if not(service_type) or service_info.type == service_type then
 			reply:tag("service", {
@@ -25,11 +27,13 @@
 	end
 	origin.send(reply);
 	return true;
-end);
+end
+module:hook("iq-get/host/"..xmlns_extdisco_1..":services", handle_services);
+module:hook("iq-get/host/"..xmlns_extdisco_2..":services", handle_services);
 
-module:hook("iq-get/host/"..xmlns_extdisco..":credentials", function (event)
+local function handle_credentials(event)
 	local origin, stanza = event.origin, event.stanza;
-	local credentials = stanza:get_child("credentials", xmlns_extdisco);
+	local credentials = stanza.tags[1];
 	local host = credentials and credentials.attr.host;
 	if not host then
 		origin.send(st.error_reply(stanza, "cancel", "bad-request", "No host specified"));
@@ -41,7 +45,7 @@
 		return true;
 	end
 	local reply = st.reply(stanza)
-		:tag("credentials", { xmlns = xmlns_extdisco })
+		:tag("credentials", { xmlns = credentials.attr.xmlns })
 			:tag("service", {
 				host = host;
 				username = service_info.username;
@@ -49,4 +53,6 @@
 			}):up();
 	origin.send(reply);
 	return true;
-end);
+end
+module:hook("iq-get/host/"..xmlns_extdisco_1..":credentials", handle_credentials);
+module:hook("iq-get/host/"..xmlns_extdisco_2..":credentials", handle_credentials);