Mercurial > prosody-modules
annotate mod_muc_webchat_url/mod_muc_webchat_url.lua @ 4203:c4002aae4ad3
mod_s2s_keepalive: Use timestamp as iq @id
RFC 6120 implies that the id attribute must be unique within a stream.
This should fix problems with remote servers that enforce uniqueness and
don't answer duplicated ids.
If it doesn't do that, then at least you can get a guesstimate at
round-trip time from the difference between the result iq stanza and the
timestamp it was logged without having to go look for when it was sent,
or needing to keep state.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Wed, 14 Oct 2020 18:02:10 +0200 |
parents | 776ff0875e35 |
children | dcafddc31b1c |
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", |
b8bcea17ccd6
mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents:
3546
diff
changeset
|
36 value = get_webchat_url(room), |
3069
e1db146984a0
mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 }); |
e1db146984a0
mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 end); |
e1db146984a0
mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 |
e1db146984a0
mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 module:hook("muc-config-submitted", function(event) |
e1db146984a0
mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 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
|
42 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
|
43 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
|
44 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
|
45 room._data.webchat_url = nil; |
11ebf1da416b
mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents:
3672
diff
changeset
|
46 else |
11ebf1da416b
mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents:
3672
diff
changeset
|
47 room._data.webchat_url = new; |
11ebf1da416b
mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents:
3672
diff
changeset
|
48 end |
3069
e1db146984a0
mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
49 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
|
50 changed["muc#roomconfig_webchat_url"] = true; |
3069
e1db146984a0
mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
51 else |
e1db146984a0
mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 event.changed = true; |
e1db146984a0
mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
53 end |
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 |
e1db146984a0
mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
57 module:hook("muc-disco#info", function (event) |
e1db146984a0
mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
58 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
|
59 |
3672
b8bcea17ccd6
mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents:
3546
diff
changeset
|
60 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
|
61 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
|
62 return; |
b8bcea17ccd6
mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents:
3546
diff
changeset
|
63 end |
3069
e1db146984a0
mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
64 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
|
65 name = "muc#roominfo_webchat_url", |
3069
e1db146984a0
mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
66 }); |
3672
b8bcea17ccd6
mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents:
3546
diff
changeset
|
67 formdata["muc#roominfo_webchat_url"] = webchat_url; |
3069
e1db146984a0
mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
68 end); |
e1db146984a0
mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
69 |