Mercurial > prosody-modules
annotate mod_muc_webchat_url/mod_muc_webchat_url.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 |
parents | dcafddc31b1c |
children |
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 |