Annotate

mod_extdisco/mod_extdisco.lua @ 4876:0f5f2d4475b9

mod_http_xep227: Add support for import via APIs rather than direct store manipulation In particular this transitions PEP nodes and data to be imported via mod_pep's APIs, fixing issues with importing at runtime while PEP data may already be live in RAM. Next obvious candidate for this approach is rosters, so clients get immediate roster pushes and other special handling (such as emitting subscribes to reach the desired subscription state).
author Matthew Wild <mwild1@gmail.com>
date Tue, 18 Jan 2022 17:01:18 +0000
parent 3606:7811ba467525
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
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
3605
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3604
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: 3604
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
3605
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3604
diff changeset
8 module:add_feature(xmlns_extdisco_1);
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3604
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
3605
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3604
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;
3605
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3604
diff changeset
13 local service = stanza.tags[1];
3606
7811ba467525 mod_extdisco: Remove redundant condition
Kim Alvefur <zash@zash.se>
parents: 3605
diff changeset
14 local service_type = service.attr.type;
3605
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3604
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;
3605
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3604
diff changeset
30 end
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3604
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: 3604
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
3605
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3604
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;
3605
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3604
diff changeset
36 local credentials = stanza.tags[1];
3606
7811ba467525 mod_extdisco: Remove redundant condition
Kim Alvefur <zash@zash.se>
parents: 3605
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)
3605
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3604
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;
3605
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3604
diff changeset
56 end
452ae6effd02 mod_extdisco: Also handle XEP-0215 v0.7
Kim Alvefur <zash@zash.se>
parents: 3604
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: 3604
diff changeset
58 module:hook("iq-get/host/"..xmlns_extdisco_2..":credentials", handle_credentials);