annotate mod_extdisco/mod_extdisco.lua @ 3656:3e0f4d727825

mod_vcard_muc: Add an alternative method of signaling avatar change When the avatar has been changed, a signal is sent that the room configuration has changed. Clients then do a disco#info query to find the SHA-1 of the new avatar. They can then fetch it as before, or not if they have it cached already. This is meant to be less disruptive than signaling via presence, which caused problems for some clients. If clients transition to the new method, the old one can eventually be removed. The namespace is made up while waiting for standardization. Otherwise it is very close to what's described in https://xmpp.org/extensions/inbox/muc-avatars.html
author Kim Alvefur <zash@zash.se>
date Sun, 25 Aug 2019 20:46:43 +0200
parents 7811ba467525
children
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);