annotate mod_muc_webchat_url/mod_muc_webchat_url.lua @ 5401:c8d04ac200fc

mod_http_oauth2: Reject loopback URIs as client_uri This really should be a proper website with info, https://localhost is not good enough. Ideally we'd validate that it's got proper DNS and is actually reachable, but triggering HTTP or even DNS lookups seems like it would carry abuse potential that would best to avoid.
author Kim Alvefur <zash@zash.se>
date Tue, 02 May 2023 16:20:55 +0200
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