annotate mod_muc_defaults/mod_muc_defaults.lua @ 4420:a81516906822

mod_muc_defaults: handle case where affiliations are unset Otherwise, this tracebacks in set_affiliations.
author Jonas Schäfer <jonas@wielicki.name>
date Sun, 31 Jan 2021 16:12:47 +0100
parents d1bc50890343
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3586
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;
3623
da2d58208574 mod_muc_defaults: Allow setting of `name` and `description
JC Brand <jc@opkode.com>
parents: 3586
diff changeset
18 if config.name ~= nil then
da2d58208574 mod_muc_defaults: Allow setting of `name` and `description
JC Brand <jc@opkode.com>
parents: 3586
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: 3586
diff changeset
20 end
da2d58208574 mod_muc_defaults: Allow setting of `name` and `description
JC Brand <jc@opkode.com>
parents: 3586
diff changeset
21 if config.description ~= nil then
da2d58208574 mod_muc_defaults: Allow setting of `name` and `description
JC Brand <jc@opkode.com>
parents: 3586
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: 3586
diff changeset
23 end
3586
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
3623
da2d58208574 mod_muc_defaults: Allow setting of `name` and `description
JC Brand <jc@opkode.com>
parents: 3586
diff changeset
40 should_save = room:set_language(config.lang) or should_save;
3586
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
3975
d1bc50890343 muc_defaults: Add support for the presence_broadcast setting
JC Brand <jc@opkode.com>
parents: 3623
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: 3623
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: 3623
diff changeset
55 end
3586
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);
4420
a81516906822 mod_muc_defaults: handle case where affiliations are unset
Jonas Schäfer <jonas@wielicki.name>
parents: 3975
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: 3975
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: 3975
diff changeset
90 end
3586
796b29911747 mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff changeset
91 end