annotate mod_muc_webchat_url/mod_muc_webchat_url.lua @ 5119:048e339706ba

mod_rest: Remove manual reference expansion in schema This hack was originally added to reduce the number of definitions of common attributes (type, to, from etc) and payloads (e.g. delay). This predated pointers and references, and until now was needed because parsing picked out the correct stanza kind from the schema, which broke internal references. Removing this hack paves the way for allowing the schema to be configured or customized more easily.
author Kim Alvefur <zash@zash.se>
date Tue, 20 Dec 2022 21:48:28 +0100
parents dcafddc31b1c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3672
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
1 local jid_split = require "util.jid".split;
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
2 module:depends"muc";
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
3
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
4 local webchat_baseurl = module:get_option_string("muc_webchat_baseurl", nil);
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
5
3673
11ebf1da416b mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents: 3672
diff changeset
6 local function get_default_url(room)
3672
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
7 if not webchat_baseurl then
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
8 -- no template
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
9 return nil;
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
10 end
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
11 if room:get_hidden() or room:get_members_only() or room:get_password() then
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
12 -- not a public room
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
13 return nil;
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
14 end
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
15 return (webchat_baseurl:gsub("{(%w+)}", {
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
16 jid = room.jid,
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
17 node = select(1, jid_split(room.jid)),
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
18 host = select(2, jid_split(room.jid)),
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
19 }));
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
20 end
3069
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21
3673
11ebf1da416b mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents: 3672
diff changeset
22 local function get_webchat_url(room)
11ebf1da416b mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents: 3672
diff changeset
23 local webchat_url = room._data.webchat_url;
11ebf1da416b mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents: 3672
diff changeset
24 if webchat_url then -- explicitly configured
11ebf1da416b mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents: 3672
diff changeset
25 return webchat_url;
11ebf1da416b mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents: 3672
diff changeset
26 end
3675
776ff0875e35 mod_muc_webchat_url: Fix default url
Kim Alvefur <zash@zash.se>
parents: 3673
diff changeset
27 return get_default_url(room);
3673
11ebf1da416b mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents: 3672
diff changeset
28 end
11ebf1da416b mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents: 3672
diff changeset
29
3069
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 module:hook("muc-config-form", function(event)
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 local room, form = event.room, event.form;
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 table.insert(form, {
3672
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
33 name = "muc#roomconfig_webchat_url",
3069
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 type = "text-single",
3672
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
35 label = "URL where this room can be joined",
4725
dcafddc31b1c mod_muc_webchat_url: Add hint of being an URL to form field
Kim Alvefur <zash@zash.se>
parents: 3675
diff changeset
36 datatype = "xs:anyURI",
3672
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
37 value = get_webchat_url(room),
3069
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38 });
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 end);
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 module:hook("muc-config-submitted", function(event)
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42 local room, fields, changed = event.room, event.fields, event.changed;
3672
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
43 local new = fields["muc#roomconfig_webchat_url"];
3673
11ebf1da416b mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents: 3672
diff changeset
44 if new ~= get_webchat_url(room) then
11ebf1da416b mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents: 3672
diff changeset
45 if new == get_default_url(room) then
11ebf1da416b mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents: 3672
diff changeset
46 room._data.webchat_url = nil;
11ebf1da416b mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents: 3672
diff changeset
47 else
11ebf1da416b mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents: 3672
diff changeset
48 room._data.webchat_url = new;
11ebf1da416b mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents: 3672
diff changeset
49 end
3069
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50 if type(changed) == "table" then
3672
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
51 changed["muc#roomconfig_webchat_url"] = true;
3069
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
52 else
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53 event.changed = true;
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
54 end
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
55 end
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
56 end);
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
57
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
58 module:hook("muc-disco#info", function (event)
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
59 local room, form, formdata = event.room, event.form, event.formdata;
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
60
3672
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
61 local webchat_url = get_webchat_url(room);
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
62 if not webchat_url or webchat_url == "" then
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
63 return;
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
64 end
3069
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
65 table.insert(form, {
3672
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
66 name = "muc#roominfo_webchat_url",
3069
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
67 });
3672
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3546
diff changeset
68 formdata["muc#roominfo_webchat_url"] = webchat_url;
3069
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
69 end);
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
70