mod_muc_defaults/mod_muc_defaults.lua
author Kim Alvefur <zash@zash.se>
Tue, 02 May 2023 16:31:25 +0200
changeset 5409 c7a5caad28ef
parent 4424 a81516906822
permissions -rw-r--r--
mod_http_oauth2: Enforce response type encoded in client_id The client promises to only use this response type, so we should hold them to that. This makes it fail earlier if the response type is disabled or the client is trying to use one that it promised not to use. Better than failing after login and consent.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3590
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
     1
local log = module._log;
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
     2
local params = module:get_option("default_mucs", {});
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
     3
local jid_bare = require "util.jid".bare;
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
     4
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
     5
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
     6
local function set_affiliations(room, affiliations)
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
     7
	for affiliation, jids in pairs(affiliations) do
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
     8
		for i, jid in pairs(jids) do
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
     9
			module:log("debug", "Setting affiliation %s for jid %s", affiliation, jid);
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    10
			room:set_affiliation(true, jid_bare(jid), affiliation);
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    11
		end
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    12
	end
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    13
end
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    14
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    15
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    16
local function configure_room(room, config)
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    17
	local should_save = false;
3627
da2d58208574 mod_muc_defaults: Allow setting of `name` and `description
JC Brand <jc@opkode.com>
parents: 3590
diff changeset
    18
	if config.name ~= nil then
da2d58208574 mod_muc_defaults: Allow setting of `name` and `description
JC Brand <jc@opkode.com>
parents: 3590
diff changeset
    19
		should_save = room:set_name(config.name) or should_save;
da2d58208574 mod_muc_defaults: Allow setting of `name` and `description
JC Brand <jc@opkode.com>
parents: 3590
diff changeset
    20
	end
da2d58208574 mod_muc_defaults: Allow setting of `name` and `description
JC Brand <jc@opkode.com>
parents: 3590
diff changeset
    21
	if config.description ~= nil then
da2d58208574 mod_muc_defaults: Allow setting of `name` and `description
JC Brand <jc@opkode.com>
parents: 3590
diff changeset
    22
		should_save = room:set_description(config.description) or should_save;
da2d58208574 mod_muc_defaults: Allow setting of `name` and `description
JC Brand <jc@opkode.com>
parents: 3590
diff changeset
    23
	end
3590
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    24
	if config.allow_member_invites ~= nil then
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    25
		should_save =
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    26
			room:set_allow_member_invites(config.allow_member_invites)
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    27
			or should_save;
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    28
	end
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    29
	if config.change_subject ~= nil then
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    30
		should_save =
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    31
			room:set_changesubject(config.change_subject)
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    32
			or should_save;
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    33
	end
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    34
	if config.history_length ~= nil then
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    35
		should_save =
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    36
			room:set_historylength(config.history_length)
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    37
			or should_save;
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    38
	end
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    39
	if config.lang ~= nil then
3627
da2d58208574 mod_muc_defaults: Allow setting of `name` and `description
JC Brand <jc@opkode.com>
parents: 3590
diff changeset
    40
		should_save = room:set_language(config.lang) or should_save;
3590
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    41
	end
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    42
	if config.members_only ~= nil then
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    43
		should_save =
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    44
			room:set_members_only(config.members_only)
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    45
			or should_save;
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    46
	end
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    47
	if config.moderated ~= nil then
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    48
		should_save = room:set_moderated(config.moderated) or should_save;
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    49
	end
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    50
	if config.persistent ~= nil then
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    51
		should_save = room:set_persistent(config.persistent) or should_save;
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    52
	end
3979
d1bc50890343 muc_defaults: Add support for the presence_broadcast setting
JC Brand <jc@opkode.com>
parents: 3627
diff changeset
    53
	if config.presence_broadcast ~= nil then
d1bc50890343 muc_defaults: Add support for the presence_broadcast setting
JC Brand <jc@opkode.com>
parents: 3627
diff changeset
    54
		should_save = room:set_presence_broadcast(config.presence_broadcast) or should_save;
d1bc50890343 muc_defaults: Add support for the presence_broadcast setting
JC Brand <jc@opkode.com>
parents: 3627
diff changeset
    55
	end
3590
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    56
	if config.public ~= nil then
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    57
		should_save = room:set_hidden(not config.public) or should_save;
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    58
	end
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    59
	if config.public_jids ~= nil then
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    60
		should_save =
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    61
			room:set_whois(config.public_jids and "anyone" or "moderators")
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    62
			or should_save;
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    63
	end
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    64
	if config.logging ~= room._data.logging then
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    65
		room._data.logging = config.logging;
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    66
		should_save = true;
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    67
	end
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    68
	if should_save then
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    69
		room:save(true);
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    70
	end
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    71
end
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    72
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    73
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    74
local i, room_data;
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    75
for i, room_data in pairs(params) do
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    76
	local host = module.host;
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    77
	local room_jid = room_data.jid_node.."@"..host;
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    78
	local mod_muc = prosody.hosts[host].modules.muc;
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    79
	local room = mod_muc.get_room_from_jid(room_jid);
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    80
	if not room then
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    81
		module:log("debug", "Creating new room %s", room_jid);
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    82
		-- We don't pass in the config, so that the default config is set first.
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    83
		room = mod_muc.create_room(room_jid);
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    84
	else
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    85
		module:log("debug", "Configuring already existing room %s", room_jid);
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    86
	end
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    87
	configure_room(room, room_data.config);
4424
a81516906822 mod_muc_defaults: handle case where affiliations are unset
Jonas Schäfer <jonas@wielicki.name>
parents: 3979
diff changeset
    88
	if room_data.affiliations then
a81516906822 mod_muc_defaults: handle case where affiliations are unset
Jonas Schäfer <jonas@wielicki.name>
parents: 3979
diff changeset
    89
		set_affiliations(room, room_data.affiliations);
a81516906822 mod_muc_defaults: handle case where affiliations are unset
Jonas Schäfer <jonas@wielicki.name>
parents: 3979
diff changeset
    90
	end
3590
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
    91
end