Mercurial > prosody-modules
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 3604:60df58c5f7dd | 3605:452ae6effd02 |
|---|---|
| 1 local st = require "util.stanza"; | 1 local st = require "util.stanza"; |
| 2 | 2 |
| 3 local services = module:get_option("external_services"); | 3 local services = module:get_option("external_services"); |
| 4 | 4 |
| 5 local xmlns_extdisco = "urn:xmpp:extdisco:1"; | 5 local xmlns_extdisco_1 = "urn:xmpp:extdisco:1"; |
| 6 local xmlns_extdisco_2 = "urn:xmpp:extdisco:2"; | |
| 6 | 7 |
| 7 module:add_feature(xmlns_extdisco); | 8 module:add_feature(xmlns_extdisco_1); |
| 9 module:add_feature(xmlns_extdisco_2); | |
| 8 | 10 |
| 9 module:hook("iq-get/host/"..xmlns_extdisco..":services", function (event) | 11 local function handle_services(event) |
| 10 local origin, stanza = event.origin, event.stanza; | 12 local origin, stanza = event.origin, event.stanza; |
| 11 local service = stanza:get_child("service", xmlns_extdisco); | 13 local service = stanza.tags[1]; |
| 12 local service_type = service and service.attr.type; | 14 local service_type = service and service.attr.type; |
| 13 local reply = st.reply(stanza):tag("services", { xmlns = xmlns_extdisco }); | 15 local reply = st.reply(stanza):tag("services", { xmlns = service.attr.xmlns }); |
| 14 for host, service_info in pairs(services) do | 16 for host, service_info in pairs(services) do |
| 15 if not(service_type) or service_info.type == service_type then | 17 if not(service_type) or service_info.type == service_type then |
| 16 reply:tag("service", { | 18 reply:tag("service", { |
| 17 host = host; | 19 host = host; |
| 18 port = service_info.port; | 20 port = service_info.port; |
| 23 }):up(); | 25 }):up(); |
| 24 end | 26 end |
| 25 end | 27 end |
| 26 origin.send(reply); | 28 origin.send(reply); |
| 27 return true; | 29 return true; |
| 28 end); | 30 end |
| 31 module:hook("iq-get/host/"..xmlns_extdisco_1..":services", handle_services); | |
| 32 module:hook("iq-get/host/"..xmlns_extdisco_2..":services", handle_services); | |
| 29 | 33 |
| 30 module:hook("iq-get/host/"..xmlns_extdisco..":credentials", function (event) | 34 local function handle_credentials(event) |
| 31 local origin, stanza = event.origin, event.stanza; | 35 local origin, stanza = event.origin, event.stanza; |
| 32 local credentials = stanza:get_child("credentials", xmlns_extdisco); | 36 local credentials = stanza.tags[1]; |
| 33 local host = credentials and credentials.attr.host; | 37 local host = credentials and credentials.attr.host; |
| 34 if not host then | 38 if not host then |
| 35 origin.send(st.error_reply(stanza, "cancel", "bad-request", "No host specified")); | 39 origin.send(st.error_reply(stanza, "cancel", "bad-request", "No host specified")); |
| 36 return true; | 40 return true; |
| 37 end | 41 end |
| 39 if not service_info then | 43 if not service_info then |
| 40 origin.send(st.error_reply(stanza, "cancel", "item-not-found", "No such service known")); | 44 origin.send(st.error_reply(stanza, "cancel", "item-not-found", "No such service known")); |
| 41 return true; | 45 return true; |
| 42 end | 46 end |
| 43 local reply = st.reply(stanza) | 47 local reply = st.reply(stanza) |
| 44 :tag("credentials", { xmlns = xmlns_extdisco }) | 48 :tag("credentials", { xmlns = credentials.attr.xmlns }) |
| 45 :tag("service", { | 49 :tag("service", { |
| 46 host = host; | 50 host = host; |
| 47 username = service_info.username; | 51 username = service_info.username; |
| 48 password = service_info.password; | 52 password = service_info.password; |
| 49 }):up(); | 53 }):up(); |
| 50 origin.send(reply); | 54 origin.send(reply); |
| 51 return true; | 55 return true; |
| 52 end); | 56 end |
| 57 module:hook("iq-get/host/"..xmlns_extdisco_1..":credentials", handle_credentials); | |
| 58 module:hook("iq-get/host/"..xmlns_extdisco_2..":credentials", handle_credentials); |
