mod_extdisco/mod_extdisco.lua
author Matthew Wild <mwild1@gmail.com>
Fri, 23 Sep 2022 22:41:15 +0100
changeset 5058 62480053c87b
parent 3610 7811ba467525
permissions -rw-r--r--
mod_cloud_notify_encrypted: Additional debug logging when enabling/skipping
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
281
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     1
local st = require "util.stanza";
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     2
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     3
local services = module:get_option("external_services");
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     4
3609
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3608
diff changeset
     5
local xmlns_extdisco_1 = "urn:xmpp:extdisco:1";
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3608
diff changeset
     6
local xmlns_extdisco_2 = "urn:xmpp:extdisco:2";
281
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     7
3609
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3608
diff changeset
     8
module:add_feature(xmlns_extdisco_1);
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3608
diff changeset
     9
module:add_feature(xmlns_extdisco_2);
281
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    10
3609
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3608
diff changeset
    11
local function handle_services(event)
281
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    12
	local origin, stanza = event.origin, event.stanza;
3609
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3608
diff changeset
    13
	local service = stanza.tags[1];
3610
7811ba467525 mod_extdisco: Remove redundant condition
Kim Alvefur <zash@zash.se>
parents: 3609
diff changeset
    14
	local service_type = service.attr.type;
3609
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3608
diff changeset
    15
	local reply = st.reply(stanza):tag("services", { xmlns = service.attr.xmlns });
281
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    16
	for host, service_info in pairs(services) do
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    17
		if not(service_type) or service_info.type == service_type then
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    18
			reply:tag("service", {
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    19
				host = host;
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    20
				port = service_info.port;
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    21
				transport = service_info.transport;
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    22
				type = service_info.type;
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    23
				username = service_info.username;
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    24
				password = service_info.password;
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    25
			}):up();
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    26
		end
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    27
	end
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    28
	origin.send(reply);
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    29
	return true;
3609
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3608
diff changeset
    30
end
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3608
diff changeset
    31
module:hook("iq-get/host/"..xmlns_extdisco_1..":services", handle_services);
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3608
diff changeset
    32
module:hook("iq-get/host/"..xmlns_extdisco_2..":services", handle_services);
281
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    33
3609
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3608
diff changeset
    34
local function handle_credentials(event)
281
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    35
	local origin, stanza = event.origin, event.stanza;
3609
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3608
diff changeset
    36
	local credentials = stanza.tags[1];
3610
7811ba467525 mod_extdisco: Remove redundant condition
Kim Alvefur <zash@zash.se>
parents: 3609
diff changeset
    37
	local host = credentials.attr.host;
281
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    38
	if not host then
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    39
		origin.send(st.error_reply(stanza, "cancel", "bad-request", "No host specified"));
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    40
		return true;
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    41
	end
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    42
	local service_info = services[host];
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    43
	if not service_info then
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    44
		origin.send(st.error_reply(stanza, "cancel", "item-not-found", "No such service known"));
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    45
		return true;
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    46
	end
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    47
	local reply = st.reply(stanza)
3609
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3608
diff changeset
    48
		:tag("credentials", { xmlns = credentials.attr.xmlns })
281
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    49
			:tag("service", {
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    50
				host = host;
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    51
				username = service_info.username;
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    52
				password = service_info.password;
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    53
			}):up();
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    54
	origin.send(reply);
e5c16c87383c mod_extdisco: XEP-0215: External Service Discovery
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    55
	return true;
3609
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3608
diff changeset
    56
end
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3608
diff changeset
    57
module:hook("iq-get/host/"..xmlns_extdisco_1..":credentials", handle_credentials);
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3608
diff changeset
    58
module:hook("iq-get/host/"..xmlns_extdisco_2..":credentials", handle_credentials);