mod_muc_webchat_url/mod_muc_webchat_url.lua
author Ben Smith <bens@effortlessis.com>
Tue, 14 May 2024 07:31:34 -0700
changeset 5912 dcea4b4c415d
parent 4729 dcafddc31b1c
permissions -rw-r--r--
Tweaking documentation to clarify that Oauth2 can be used for VirtualHosts and Component installations.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3676
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3550
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: 3550
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: 3550
diff changeset
     3
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3550
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: 3550
diff changeset
     5
3677
11ebf1da416b mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents: 3676
diff changeset
     6
local function get_default_url(room)
3676
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3550
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: 3550
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: 3550
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: 3550
diff changeset
    10
	end
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3550
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: 3550
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: 3550
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: 3550
diff changeset
    14
	end
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3550
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: 3550
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: 3550
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: 3550
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: 3550
diff changeset
    19
		}));
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3550
diff changeset
    20
end
3073
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    21
3677
11ebf1da416b mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents: 3676
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: 3676
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: 3676
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: 3676
diff changeset
    25
		return webchat_url;
11ebf1da416b mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents: 3676
diff changeset
    26
	end
3679
776ff0875e35 mod_muc_webchat_url: Fix default url
Kim Alvefur <zash@zash.se>
parents: 3677
diff changeset
    27
	return get_default_url(room);
3677
11ebf1da416b mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents: 3676
diff changeset
    28
end
11ebf1da416b mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents: 3676
diff changeset
    29
3073
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, {
3676
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3550
diff changeset
    33
		name = "muc#roomconfig_webchat_url",
3073
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    34
		type = "text-single",
3676
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3550
diff changeset
    35
		label = "URL where this room can be joined",
4729
dcafddc31b1c mod_muc_webchat_url: Add hint of being an URL to form field
Kim Alvefur <zash@zash.se>
parents: 3679
diff changeset
    36
		datatype = "xs:anyURI",
3676
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3550
diff changeset
    37
		value = get_webchat_url(room),
3073
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;
3676
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3550
diff changeset
    43
	local new = fields["muc#roomconfig_webchat_url"];
3677
11ebf1da416b mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents: 3676
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: 3676
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: 3676
diff changeset
    46
			room._data.webchat_url = nil;
11ebf1da416b mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents: 3676
diff changeset
    47
		else
11ebf1da416b mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents: 3676
diff changeset
    48
			room._data.webchat_url = new;
11ebf1da416b mod_muc_webchat_url: Don't save templated value
Kim Alvefur <zash@zash.se>
parents: 3676
diff changeset
    49
		end
3073
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    50
		if type(changed) == "table" then
3676
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3550
diff changeset
    51
			changed["muc#roomconfig_webchat_url"] = true;
3073
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
3676
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3550
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: 3550
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: 3550
diff changeset
    63
		return;
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3550
diff changeset
    64
	end
3073
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    65
	table.insert(form, {
3676
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3550
diff changeset
    66
		name = "muc#roominfo_webchat_url",
3073
e1db146984a0 mod_muc_lang: Advertises the room language
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    67
	});
3676
b8bcea17ccd6 mod_muc_webchat_url: Advertise the URL to a webchat in disco#info
Kim Alvefur <zash@zash.se>
parents: 3550
diff changeset
    68
	formdata["muc#roominfo_webchat_url"] = webchat_url;
3073
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