mod_muc_defaults/mod_muc_defaults.lua
author Matthew Wild <mwild1@gmail.com>
Sat, 24 Sep 2022 08:06:11 +0100
changeset 5060 2583bd7eb5d1
parent 4424 a81516906822
permissions -rw-r--r--
mod_cloud_notify: Add warnings about options including real body/sender
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