Mercurial > prosody-modules
annotate mod_muc_defaults/mod_muc_defaults.lua @ 6029:cc665f343690
mod_firewall: SUBSCRIBED: Flip subscription check to match documentation
The documentation claims that this condition checks whether the recipient is
subscribed to the sender.
However, it was using the wrong method, and actually checking whether the
sender was subscribed to the recipient.
A quick poll of folk suggested that the documentation's approach is the right
one, so this should fix the code to match the documentation.
This should also fix the bundled anti-spam rules from blocking presence from
JIDs that you subscribe do (but don't have a mutual subscription with).
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Fri, 22 Nov 2024 13:50:48 +0000 |
| parents | a81516906822 |
| children |
| 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 |
