mod_muc_webchat_url/mod_muc_webchat_url.lua
author Matthew Wild <mwild1@gmail.com>
Tue, 18 Jan 2022 17:01:18 +0000
changeset 4880 0f5f2d4475b9
parent 4729 dcafddc31b1c
permissions -rw-r--r--
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).
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