Mercurial > prosody-modules
annotate mod_muc_defaults/mod_muc_defaults.lua @ 4203:c4002aae4ad3
mod_s2s_keepalive: Use timestamp as iq @id
RFC 6120 implies that the id attribute must be unique within a stream.
This should fix problems with remote servers that enforce uniqueness and
don't answer duplicated ids.
If it doesn't do that, then at least you can get a guesstimate at
round-trip time from the difference between the result iq stanza and the
timestamp it was logged without having to go look for when it was sent,
or needing to keep state.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Wed, 14 Oct 2020 18:02:10 +0200 |
parents | d1bc50890343 |
children | a81516906822 |
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); |
796b29911747
mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff
changeset
|
88 set_affiliations(room, room_data.affiliations); |
796b29911747
mod_muc_defaults: Create MUCs from config
JC Brand <jc@opkode.com>
parents:
diff
changeset
|
89 end |