annotate mod_muc_defaults/mod_muc_defaults.lua @ 4537:53ee391ca689

mod_smacks: Fix traceback due to session being destroyed in send() Sending something can cause the OS to notice that the connection is dead and then the connection can be dead at this point. More likely if opportunistic_writes is enabled.
author Kim Alvefur <zash@zash.se>
date Thu, 01 Apr 2021 11:35:26 +0200
parents a81516906822
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