Software /
code /
prosody
Annotate
plugins/muc/mod_muc.lua @ 11245:43b43e7156b8
MUC: Add support for presence probes (fixes #1535)
The following patch allows Prosody to respond to `probe` presences and send out the probed occupant's current presence.
This is based on line 17.3 in XEP-0045:
A MUC service MAY handle presence probes sent to the room JID <room@service> or an occupant JID <room@service/nick>
(e.g, these might be sent by an occupant's home server to determine if the room is still online or to synchronize
presence information if the user or the user's server has gone offline temporarily or has started sharing presence again,
as for instance when Stanza Interception and Filtering Technology (XEP-0273) is used).
author | JC Brand <jc@opkode.com> |
---|---|
date | Sun, 19 Apr 2020 21:49:45 +0200 |
parent | 11215:9ce0a899ff07 |
child | 11492:6da8d9cb355d |
rev | line source |
---|---|
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
1 -- Prosody IM |
2923
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2033
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2033
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5692
diff
changeset
|
4 -- |
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
5 -- This project is MIT/X11 licensed. Please see the |
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
6 -- COPYING file in the source package for more information. |
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
7 -- |
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
8 |
8572
ce1737520943
MUC: Write down which functions are exposed and thus available to other modules
Kim Alvefur <zash@zash.se>
parents:
8387
diff
changeset
|
9 -- Exposed functions: |
ce1737520943
MUC: Write down which functions are exposed and thus available to other modules
Kim Alvefur <zash@zash.se>
parents:
8387
diff
changeset
|
10 -- |
ce1737520943
MUC: Write down which functions are exposed and thus available to other modules
Kim Alvefur <zash@zash.se>
parents:
8387
diff
changeset
|
11 -- create_room(jid) -> room |
ce1737520943
MUC: Write down which functions are exposed and thus available to other modules
Kim Alvefur <zash@zash.se>
parents:
8387
diff
changeset
|
12 -- track_room(room) |
ce1737520943
MUC: Write down which functions are exposed and thus available to other modules
Kim Alvefur <zash@zash.se>
parents:
8387
diff
changeset
|
13 -- delete_room(room) |
ce1737520943
MUC: Write down which functions are exposed and thus available to other modules
Kim Alvefur <zash@zash.se>
parents:
8387
diff
changeset
|
14 -- forget_room(room) |
ce1737520943
MUC: Write down which functions are exposed and thus available to other modules
Kim Alvefur <zash@zash.se>
parents:
8387
diff
changeset
|
15 -- get_room_from_jid(jid) -> room |
9050
f5c43e829d93
MUC: Add new iteration methods, all_rooms/live_rooms to eventually replace each_room
Matthew Wild <mwild1@gmail.com>
parents:
9049
diff
changeset
|
16 -- each_room(live_only) -> () -> room [DEPRECATED] |
f5c43e829d93
MUC: Add new iteration methods, all_rooms/live_rooms to eventually replace each_room
Matthew Wild <mwild1@gmail.com>
parents:
9049
diff
changeset
|
17 -- all_rooms() -> room |
f5c43e829d93
MUC: Add new iteration methods, all_rooms/live_rooms to eventually replace each_room
Matthew Wild <mwild1@gmail.com>
parents:
9049
diff
changeset
|
18 -- live_rooms() -> room |
8572
ce1737520943
MUC: Write down which functions are exposed and thus available to other modules
Kim Alvefur <zash@zash.se>
parents:
8387
diff
changeset
|
19 -- shutdown_component() |
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
20 |
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
21 if module:get_host_type() ~= "component" then |
7359
a5a080c12c96
Update every link to the documentation to use HTTPS
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
7350
diff
changeset
|
22 error("MUC should be loaded as a component, please see https://prosody.im/doc/components", 0); |
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
23 end |
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
24 |
5064
7a1eb302c562
MUC: Give host and server admins "owner" affiliation in all rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
5062
diff
changeset
|
25 local muclib = module:require "muc"; |
6234
cc8a6ca2d7c5
plugins/muc/mod_muc: Move affiliation monkey patch into own scope
daurnimator <quae@daurnimator.com>
parents:
6222
diff
changeset
|
26 room_mt = muclib.room_mt; -- Yes, global. |
8879
4dee8c439afc
MUC: Expose method for creating a bare room object
Kim Alvefur <zash@zash.se>
parents:
8877
diff
changeset
|
27 new_room = muclib.new_room; |
6769
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
28 |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
29 local name = module:require "muc/name"; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
30 room_mt.get_name = name.get; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
31 room_mt.set_name = name.set; |
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
32 |
6769
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
33 local description = module:require "muc/description"; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
34 room_mt.get_description = description.get; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
35 room_mt.set_description = description.set; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
36 |
8833
9c90cd2fc4c3
MUC: Add support for setting a room language (closes #1149)
Kim Alvefur <zash@zash.se>
parents:
8818
diff
changeset
|
37 local language = module:require "muc/language"; |
9c90cd2fc4c3
MUC: Add support for setting a room language (closes #1149)
Kim Alvefur <zash@zash.se>
parents:
8818
diff
changeset
|
38 room_mt.get_language = language.get; |
9c90cd2fc4c3
MUC: Add support for setting a room language (closes #1149)
Kim Alvefur <zash@zash.se>
parents:
8818
diff
changeset
|
39 room_mt.set_language = language.set; |
9c90cd2fc4c3
MUC: Add support for setting a room language (closes #1149)
Kim Alvefur <zash@zash.se>
parents:
8818
diff
changeset
|
40 |
6769
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
41 local hidden = module:require "muc/hidden"; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
42 room_mt.get_hidden = hidden.get; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
43 room_mt.set_hidden = hidden.set; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
44 function room_mt:get_public() |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
45 return not self:get_hidden(); |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
46 end |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
47 function room_mt:set_public(public) |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
48 return self:set_hidden(not public); |
3575
bc3dfc00da5d
MUC: Allow restricting room creation to local JIDs (thanks thomas.mangin).
Waqas Hussain <waqas20@gmail.com>
parents:
3560
diff
changeset
|
49 end |
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
50 |
6769
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
51 local password = module:require "muc/password"; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
52 room_mt.get_password = password.get; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
53 room_mt.set_password = password.set; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
54 |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
55 local members_only = module:require "muc/members_only"; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
56 room_mt.get_members_only = members_only.get; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
57 room_mt.set_members_only = members_only.set; |
8976
92f0876b9230
MUC: Add config option to allow members to invite other members to the room (previously only owners/admins could do this)
Matthew Wild <mwild1@gmail.com>
parents:
8944
diff
changeset
|
58 room_mt.get_allow_member_invites = members_only.get_allow_member_invites; |
92f0876b9230
MUC: Add config option to allow members to invite other members to the room (previously only owners/admins could do this)
Matthew Wild <mwild1@gmail.com>
parents:
8944
diff
changeset
|
59 room_mt.set_allow_member_invites = members_only.set_allow_member_invites; |
6769
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
60 |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
61 local moderated = module:require "muc/moderated"; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
62 room_mt.get_moderated = moderated.get; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
63 room_mt.set_moderated = moderated.set; |
5808
026367992a0f
mod_muc: Support for locking newly-created rooms until they are configured (enabled with muc_room_locking = true)
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
64 |
8865
2a8bbfcb6868
MUC: Move voice request into its own lib
Kim Alvefur <zash@zash.se>
parents:
8843
diff
changeset
|
65 local request = module:require "muc/request"; |
2a8bbfcb6868
MUC: Move voice request into its own lib
Kim Alvefur <zash@zash.se>
parents:
8843
diff
changeset
|
66 room_mt.handle_role_request = request.handle_request; |
2a8bbfcb6868
MUC: Move voice request into its own lib
Kim Alvefur <zash@zash.se>
parents:
8843
diff
changeset
|
67 |
6769
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
68 local persistent = module:require "muc/persistent"; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
69 room_mt.get_persistent = persistent.get; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
70 room_mt.set_persistent = persistent.set; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
71 |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
72 local subject = module:require "muc/subject"; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
73 room_mt.get_changesubject = subject.get_changesubject; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
74 room_mt.set_changesubject = subject.set_changesubject; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
75 room_mt.get_subject = subject.get; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
76 room_mt.set_subject = subject.set; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
77 room_mt.send_subject = subject.send; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
78 |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
79 local history = module:require "muc/history"; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
80 room_mt.send_history = history.send; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
81 room_mt.get_historylength = history.get_length; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
82 room_mt.set_historylength = history.set_length; |
4caef6d53304
plugins/muc: Move loading of optional muc libraries from muc.lib.lua to mod_muc
daurnimator <quae@daurnimator.com>
parents:
6745
diff
changeset
|
83 |
9240
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
9237
diff
changeset
|
84 local register = module:require "muc/register"; |
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
9237
diff
changeset
|
85 room_mt.get_registered_nick = register.get_registered_nick; |
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
9237
diff
changeset
|
86 room_mt.get_registered_jid = register.get_registered_jid; |
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
9237
diff
changeset
|
87 room_mt.handle_register_iq = register.handle_register_iq; |
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
9237
diff
changeset
|
88 |
10353
7b602e13c3b6
MUC: Add controls for whose presence is broadcast (closes #1335)
Lance Stout <lancestout@gmail.com>
parents:
9647
diff
changeset
|
89 local presence_broadcast = module:require "muc/presence_broadcast"; |
7b602e13c3b6
MUC: Add controls for whose presence is broadcast (closes #1335)
Lance Stout <lancestout@gmail.com>
parents:
9647
diff
changeset
|
90 room_mt.get_presence_broadcast = presence_broadcast.get; |
7b602e13c3b6
MUC: Add controls for whose presence is broadcast (closes #1335)
Lance Stout <lancestout@gmail.com>
parents:
9647
diff
changeset
|
91 room_mt.set_presence_broadcast = presence_broadcast.set; |
7b602e13c3b6
MUC: Add controls for whose presence is broadcast (closes #1335)
Lance Stout <lancestout@gmail.com>
parents:
9647
diff
changeset
|
92 room_mt.get_valid_broadcast_roles = presence_broadcast.get_valid_broadcast_roles; |
7b602e13c3b6
MUC: Add controls for whose presence is broadcast (closes #1335)
Lance Stout <lancestout@gmail.com>
parents:
9647
diff
changeset
|
93 |
11215
9ce0a899ff07
MUC: Merge mod_muc_occupant_id into a sub-module (thanks pep.!)
Matthew Wild <mwild1@gmail.com>
parents:
11057
diff
changeset
|
94 local occupant_id = module:require "muc/occupant_id"; |
9ce0a899ff07
MUC: Merge mod_muc_occupant_id into a sub-module (thanks pep.!)
Matthew Wild <mwild1@gmail.com>
parents:
11057
diff
changeset
|
95 room_mt.get_occupant_id = occupant_id.get_occupant_id; |
10353
7b602e13c3b6
MUC: Add controls for whose presence is broadcast (closes #1335)
Lance Stout <lancestout@gmail.com>
parents:
9647
diff
changeset
|
96 |
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
97 local jid_split = require "util.jid".split; |
10366
5611c939743a
MUC: Strictly validate room JID on creation
Kim Alvefur <zash@zash.se>
parents:
10353
diff
changeset
|
98 local jid_prep = require "util.jid".prep; |
2033
38d32c154cec
MUC: Added config option 'restrict_room_creation' to allow restricting room creation to admins.
Waqas Hussain <waqas20@gmail.com>
parents:
2028
diff
changeset
|
99 local jid_bare = require "util.jid".bare; |
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
100 local st = require "util.stanza"; |
7370
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
101 local cache = require "util.cache"; |
2033
38d32c154cec
MUC: Added config option 'restrict_room_creation' to allow restricting room creation to admins.
Waqas Hussain <waqas20@gmail.com>
parents:
2028
diff
changeset
|
102 local um_is_admin = require "core.usermanager".is_admin; |
3330
bdc325ce9fbc
MUC: Make number of stored history messages configurable with option max_history_messages (thanks michal and others who requested)
Matthew Wild <mwild1@gmail.com>
parents:
3262
diff
changeset
|
103 |
9035
173c0e16e704
MUC: Add sections in room config form
Matthew Wild <mwild1@gmail.com>
parents:
9019
diff
changeset
|
104 module:require "muc/config_form_sections"; |
173c0e16e704
MUC: Add sections in room config form
Matthew Wild <mwild1@gmail.com>
parents:
9019
diff
changeset
|
105 |
5691
18a115beeebe
mod_muc: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5659
diff
changeset
|
106 module:depends("disco"); |
6235
d433db49e353
plugins/muc/mod_muc: Use get_option_string instead of get_option and checking
daurnimator <quae@daurnimator.com>
parents:
6234
diff
changeset
|
107 module:add_identity("conference", "text", module:get_option_string("name", "Prosody Chatrooms")); |
5691
18a115beeebe
mod_muc: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5659
diff
changeset
|
108 module:add_feature("http://jabber.org/protocol/muc"); |
6091
3a1c39b31497
plugins/muc/mod_muc: Move Xep-0307 MUC unique to seperate file
daurnimator <quae@daurnimator.com>
parents:
6000
diff
changeset
|
109 module:depends "muc_unique" |
10693
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
10647
diff
changeset
|
110 module:require "muc/hats"; |
6206
f937bb5c83c3
plugins/muc: Move locking to seperate module
daurnimator <quae@daurnimator.com>
parents:
6205
diff
changeset
|
111 module:require "muc/lock"; |
5691
18a115beeebe
mod_muc: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5659
diff
changeset
|
112 |
2033
38d32c154cec
MUC: Added config option 'restrict_room_creation' to allow restricting room creation to admins.
Waqas Hussain <waqas20@gmail.com>
parents:
2028
diff
changeset
|
113 local function is_admin(jid) |
3388
02e668d64e05
MUC: No need to call is_admin twice now, global admins are admins on hosts
Matthew Wild <mwild1@gmail.com>
parents:
3330
diff
changeset
|
114 return um_is_admin(jid, module.host); |
2033
38d32c154cec
MUC: Added config option 'restrict_room_creation' to allow restricting room creation to admins.
Waqas Hussain <waqas20@gmail.com>
parents:
2028
diff
changeset
|
115 end |
38d32c154cec
MUC: Added config option 'restrict_room_creation' to allow restricting room creation to admins.
Waqas Hussain <waqas20@gmail.com>
parents:
2028
diff
changeset
|
116 |
10646
85585910d468
mod_muc: Allow control over the server-admins-are-room-owners feature (see #1174)
Matthew Wild <mwild1@gmail.com>
parents:
9626
diff
changeset
|
117 if module:get_option_boolean("component_admins_as_room_owners", true) then |
85585910d468
mod_muc: Allow control over the server-admins-are-room-owners feature (see #1174)
Matthew Wild <mwild1@gmail.com>
parents:
9626
diff
changeset
|
118 -- Monkey patch to make server admins room owners |
6234
cc8a6ca2d7c5
plugins/muc/mod_muc: Move affiliation monkey patch into own scope
daurnimator <quae@daurnimator.com>
parents:
6222
diff
changeset
|
119 local _get_affiliation = room_mt.get_affiliation; |
cc8a6ca2d7c5
plugins/muc/mod_muc: Move affiliation monkey patch into own scope
daurnimator <quae@daurnimator.com>
parents:
6222
diff
changeset
|
120 function room_mt:get_affiliation(jid) |
cc8a6ca2d7c5
plugins/muc/mod_muc: Move affiliation monkey patch into own scope
daurnimator <quae@daurnimator.com>
parents:
6222
diff
changeset
|
121 if is_admin(jid) then return "owner"; end |
cc8a6ca2d7c5
plugins/muc/mod_muc: Move affiliation monkey patch into own scope
daurnimator <quae@daurnimator.com>
parents:
6222
diff
changeset
|
122 return _get_affiliation(self, jid); |
cc8a6ca2d7c5
plugins/muc/mod_muc: Move affiliation monkey patch into own scope
daurnimator <quae@daurnimator.com>
parents:
6222
diff
changeset
|
123 end |
cc8a6ca2d7c5
plugins/muc/mod_muc: Move affiliation monkey patch into own scope
daurnimator <quae@daurnimator.com>
parents:
6222
diff
changeset
|
124 |
cc8a6ca2d7c5
plugins/muc/mod_muc: Move affiliation monkey patch into own scope
daurnimator <quae@daurnimator.com>
parents:
6222
diff
changeset
|
125 local _set_affiliation = room_mt.set_affiliation; |
9237
b86c2e135797
MUC: Add support for storing additional data with MUC affiliations
Matthew Wild <mwild1@gmail.com>
parents:
9221
diff
changeset
|
126 function room_mt:set_affiliation(actor, jid, affiliation, reason, data) |
6745 | 127 if affiliation ~= "owner" and is_admin(jid) then return nil, "modify", "not-acceptable"; end |
9237
b86c2e135797
MUC: Add support for storing additional data with MUC affiliations
Matthew Wild <mwild1@gmail.com>
parents:
9221
diff
changeset
|
128 return _set_affiliation(self, actor, jid, affiliation, reason, data); |
6234
cc8a6ca2d7c5
plugins/muc/mod_muc: Move affiliation monkey patch into own scope
daurnimator <quae@daurnimator.com>
parents:
6222
diff
changeset
|
129 end |
5064
7a1eb302c562
MUC: Give host and server admins "owner" affiliation in all rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
5062
diff
changeset
|
130 end |
7a1eb302c562
MUC: Give host and server admins "owner" affiliation in all rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
5062
diff
changeset
|
131 |
6333
93b8438fe761
plugins/muc/mod_muc: Use map store for room persistence
daurnimator <quae@daurnimator.com>
parents:
6332
diff
changeset
|
132 local persistent_rooms_storage = module:open_store("persistent"); |
93b8438fe761
plugins/muc/mod_muc: Use map store for room persistence
daurnimator <quae@daurnimator.com>
parents:
6332
diff
changeset
|
133 local persistent_rooms = module:open_store("persistent", "map"); |
93b8438fe761
plugins/muc/mod_muc: Use map store for room persistence
daurnimator <quae@daurnimator.com>
parents:
6332
diff
changeset
|
134 local room_configs = module:open_store("config"); |
7415
cbb05b454c13
MUC: Separate config from live state
Kim Alvefur <zash@zash.se>
parents:
7414
diff
changeset
|
135 local room_state = module:open_store("state"); |
6333
93b8438fe761
plugins/muc/mod_muc: Use map store for room persistence
daurnimator <quae@daurnimator.com>
parents:
6332
diff
changeset
|
136 |
7371
d5ba0dec0c95
MUC: Cache public rooms and their names to speed up disco#items
Kim Alvefur <zash@zash.se>
parents:
7370
diff
changeset
|
137 local room_items_cache = {}; |
d5ba0dec0c95
MUC: Cache public rooms and their names to speed up disco#items
Kim Alvefur <zash@zash.se>
parents:
7370
diff
changeset
|
138 |
7414
1b62c89014c4
MUC: Separate force-save parameter from save-entire-state flag
Kim Alvefur <zash@zash.se>
parents:
7411
diff
changeset
|
139 local function room_save(room, forced, savestate) |
1754
67b66eec9777
MUC: Added support for room configuration forms, persistence and hidden rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
1748
diff
changeset
|
140 local node = jid_split(room.jid); |
6333
93b8438fe761
plugins/muc/mod_muc: Use map store for room persistence
daurnimator <quae@daurnimator.com>
parents:
6332
diff
changeset
|
141 local is_persistent = persistent.get(room); |
11057
13eee48071c8
MUC: Don't default room name to JID localpart (API breaking change)
Kim Alvefur <zash@zash.se>
parents:
10698
diff
changeset
|
142 if room:get_public() then |
13eee48071c8
MUC: Don't default room name to JID localpart (API breaking change)
Kim Alvefur <zash@zash.se>
parents:
10698
diff
changeset
|
143 room_items_cache[room.jid] = room:get_name() or ""; |
13eee48071c8
MUC: Don't default room name to JID localpart (API breaking change)
Kim Alvefur <zash@zash.se>
parents:
10698
diff
changeset
|
144 else |
13eee48071c8
MUC: Don't default room name to JID localpart (API breaking change)
Kim Alvefur <zash@zash.se>
parents:
10698
diff
changeset
|
145 room_items_cache[room.jid] = nil; |
13eee48071c8
MUC: Don't default room name to JID localpart (API breaking change)
Kim Alvefur <zash@zash.se>
parents:
10698
diff
changeset
|
146 end |
13eee48071c8
MUC: Don't default room name to JID localpart (API breaking change)
Kim Alvefur <zash@zash.se>
parents:
10698
diff
changeset
|
147 |
7414
1b62c89014c4
MUC: Separate force-save parameter from save-entire-state flag
Kim Alvefur <zash@zash.se>
parents:
7411
diff
changeset
|
148 if is_persistent or savestate then |
7370
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
149 persistent_rooms:set(nil, room.jid, true); |
7415
cbb05b454c13
MUC: Separate config from live state
Kim Alvefur <zash@zash.se>
parents:
7414
diff
changeset
|
150 local data, state = room:freeze(savestate); |
cbb05b454c13
MUC: Separate config from live state
Kim Alvefur <zash@zash.se>
parents:
7414
diff
changeset
|
151 room_state:set(node, state); |
7370
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
152 return room_configs:set(node, data); |
7414
1b62c89014c4
MUC: Separate force-save parameter from save-entire-state flag
Kim Alvefur <zash@zash.se>
parents:
7411
diff
changeset
|
153 elseif forced then |
7370
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
154 persistent_rooms:set(nil, room.jid, nil); |
7415
cbb05b454c13
MUC: Separate config from live state
Kim Alvefur <zash@zash.se>
parents:
7414
diff
changeset
|
155 room_state:set(node, nil); |
7370
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
156 return room_configs:set(node, nil); |
1754
67b66eec9777
MUC: Added support for room configuration forms, persistence and hidden rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
1748
diff
changeset
|
157 end |
6742
6efeb801d62f
Backed out changeset bea3862b6bde in favor of a different approach
Kim Alvefur <zash@zash.se>
parents:
6741
diff
changeset
|
158 end |
5064
7a1eb302c562
MUC: Give host and server admins "owner" affiliation in all rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
5062
diff
changeset
|
159 |
8818
c96c00dc424b
MUC: Add support for an optional hard limit on number of rooms (fixes #766)
Kim Alvefur <zash@zash.se>
parents:
8707
diff
changeset
|
160 local max_rooms = module:get_option_number("muc_max_rooms"); |
c96c00dc424b
MUC: Add support for an optional hard limit on number of rooms (fixes #766)
Kim Alvefur <zash@zash.se>
parents:
8707
diff
changeset
|
161 local max_live_rooms = module:get_option_number("muc_room_cache_size", 100); |
c96c00dc424b
MUC: Add support for an optional hard limit on number of rooms (fixes #766)
Kim Alvefur <zash@zash.se>
parents:
8707
diff
changeset
|
162 |
8926
89f6b2a2bec3
MUC: Measure cache hits and misses
Kim Alvefur <zash@zash.se>
parents:
8925
diff
changeset
|
163 local room_hit = module:measure("room_hit", "rate"); |
89f6b2a2bec3
MUC: Measure cache hits and misses
Kim Alvefur <zash@zash.se>
parents:
8925
diff
changeset
|
164 local room_miss = module:measure("room_miss", "rate") |
8925
d367aeb9c50f
MUC: Rename eviction hit rate measure
Kim Alvefur <zash@zash.se>
parents:
8879
diff
changeset
|
165 local room_eviction = module:measure("room_eviction", "rate"); |
8818
c96c00dc424b
MUC: Add support for an optional hard limit on number of rooms (fixes #766)
Kim Alvefur <zash@zash.se>
parents:
8707
diff
changeset
|
166 local rooms = cache.new(max_rooms or max_live_rooms, function (jid, room) |
c96c00dc424b
MUC: Add support for an optional hard limit on number of rooms (fixes #766)
Kim Alvefur <zash@zash.se>
parents:
8707
diff
changeset
|
167 if max_rooms then |
9191
5192adc5c47f
MUC: Pass missing argument to log message
Kim Alvefur <zash@zash.se>
parents:
9093
diff
changeset
|
168 module:log("info", "Room limit of %d reached, no new rooms allowed", max_rooms); |
8818
c96c00dc424b
MUC: Add support for an optional hard limit on number of rooms (fixes #766)
Kim Alvefur <zash@zash.se>
parents:
8707
diff
changeset
|
169 return false; |
c96c00dc424b
MUC: Add support for an optional hard limit on number of rooms (fixes #766)
Kim Alvefur <zash@zash.se>
parents:
8707
diff
changeset
|
170 end |
8385 | 171 module:log("debug", "Evicting room %s", jid); |
8925
d367aeb9c50f
MUC: Rename eviction hit rate measure
Kim Alvefur <zash@zash.se>
parents:
8879
diff
changeset
|
172 room_eviction(); |
11057
13eee48071c8
MUC: Don't default room name to JID localpart (API breaking change)
Kim Alvefur <zash@zash.se>
parents:
10698
diff
changeset
|
173 if room:get_public() then |
13eee48071c8
MUC: Don't default room name to JID localpart (API breaking change)
Kim Alvefur <zash@zash.se>
parents:
10698
diff
changeset
|
174 room_items_cache[room.jid] = room:get_name() or ""; |
13eee48071c8
MUC: Don't default room name to JID localpart (API breaking change)
Kim Alvefur <zash@zash.se>
parents:
10698
diff
changeset
|
175 else |
13eee48071c8
MUC: Don't default room name to JID localpart (API breaking change)
Kim Alvefur <zash@zash.se>
parents:
10698
diff
changeset
|
176 room_items_cache[room.jid] = nil; |
13eee48071c8
MUC: Don't default room name to JID localpart (API breaking change)
Kim Alvefur <zash@zash.se>
parents:
10698
diff
changeset
|
177 end |
8657
a804f2e75f10
MUC: Prevent room eviction on storage failure
Kim Alvefur <zash@zash.se>
parents:
8656
diff
changeset
|
178 local ok, err = room_save(room, nil, true); -- Force to disk |
a804f2e75f10
MUC: Prevent room eviction on storage failure
Kim Alvefur <zash@zash.se>
parents:
8656
diff
changeset
|
179 if not ok then |
a804f2e75f10
MUC: Prevent room eviction on storage failure
Kim Alvefur <zash@zash.se>
parents:
8656
diff
changeset
|
180 module:log("error", "Failed to swap inactive room %s to disk: %s", jid, err); |
a804f2e75f10
MUC: Prevent room eviction on storage failure
Kim Alvefur <zash@zash.se>
parents:
8656
diff
changeset
|
181 return false; |
1754
67b66eec9777
MUC: Added support for room configuration forms, persistence and hidden rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
1748
diff
changeset
|
182 end |
7370
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
183 end); |
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
184 |
6333
93b8438fe761
plugins/muc/mod_muc: Use map store for room persistence
daurnimator <quae@daurnimator.com>
parents:
6332
diff
changeset
|
185 -- Automatically destroy empty non-persistent rooms |
93b8438fe761
plugins/muc/mod_muc: Use map store for room persistence
daurnimator <quae@daurnimator.com>
parents:
6332
diff
changeset
|
186 module:hook("muc-occupant-left",function(event) |
93b8438fe761
plugins/muc/mod_muc: Use map store for room persistence
daurnimator <quae@daurnimator.com>
parents:
6332
diff
changeset
|
187 local room = event.room |
9007
695904638cfa
MUC: Flag rooms being destroyed (fixes #887)
Kim Alvefur <zash@zash.se>
parents:
8977
diff
changeset
|
188 if room.destroying then return end |
6333
93b8438fe761
plugins/muc/mod_muc: Use map store for room persistence
daurnimator <quae@daurnimator.com>
parents:
6332
diff
changeset
|
189 if not room:has_occupant() and not persistent.get(room) then -- empty, non-persistent room |
9010
3c5ddd53fe50
MUC: Log a debug message when a non-persistent room becomes empty and is destroyed
Kim Alvefur <zash@zash.se>
parents:
9007
diff
changeset
|
190 module:log("debug", "%q empty, destroying", room.jid); |
6333
93b8438fe761
plugins/muc/mod_muc: Use map store for room persistence
daurnimator <quae@daurnimator.com>
parents:
6332
diff
changeset
|
191 module:fire_event("muc-room-destroyed", { room = room }); |
1754
67b66eec9777
MUC: Added support for room configuration forms, persistence and hidden rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
1748
diff
changeset
|
192 end |
7417
4c8ee8175f5e
MUC: Lower priority of hook so plugins hooks run before
Kim Alvefur <zash@zash.se>
parents:
7415
diff
changeset
|
193 end, -1); |
6333
93b8438fe761
plugins/muc/mod_muc: Use map store for room persistence
daurnimator <quae@daurnimator.com>
parents:
6332
diff
changeset
|
194 |
6244
dfaacf042cfe
plugins/muc/mod_muc: Remove attempt_room_creation and create_room function. Instead have a 'track_room' function called from the end of the pre-create hook, and just create an un-tracked room object when we get a presence
daurnimator <quae@daurnimator.com>
parents:
6243
diff
changeset
|
195 function track_room(room) |
8657
a804f2e75f10
MUC: Prevent room eviction on storage failure
Kim Alvefur <zash@zash.se>
parents:
8656
diff
changeset
|
196 if rooms:set(room.jid, room) then |
a804f2e75f10
MUC: Prevent room eviction on storage failure
Kim Alvefur <zash@zash.se>
parents:
8656
diff
changeset
|
197 -- When room is created, over-ride 'save' method |
a804f2e75f10
MUC: Prevent room eviction on storage failure
Kim Alvefur <zash@zash.se>
parents:
8656
diff
changeset
|
198 room.save = room_save; |
a804f2e75f10
MUC: Prevent room eviction on storage failure
Kim Alvefur <zash@zash.se>
parents:
8656
diff
changeset
|
199 return room; |
a804f2e75f10
MUC: Prevent room eviction on storage failure
Kim Alvefur <zash@zash.se>
parents:
8656
diff
changeset
|
200 end |
9078 | 201 -- Resource limit reached |
8657
a804f2e75f10
MUC: Prevent room eviction on storage failure
Kim Alvefur <zash@zash.se>
parents:
8656
diff
changeset
|
202 return false; |
5210
862a6fae05e7
MUC: Expose create_room(jid).
Waqas Hussain <waqas20@gmail.com>
parents:
5195
diff
changeset
|
203 end |
862a6fae05e7
MUC: Expose create_room(jid).
Waqas Hussain <waqas20@gmail.com>
parents:
5195
diff
changeset
|
204 |
8661
7fc0784491ef
MUC: Override methods on broken rooms to return internal-server-error instead
Kim Alvefur <zash@zash.se>
parents:
8660
diff
changeset
|
205 local function handle_broken_room(room, origin, stanza) |
7fc0784491ef
MUC: Override methods on broken rooms to return internal-server-error instead
Kim Alvefur <zash@zash.se>
parents:
8660
diff
changeset
|
206 module:log("debug", "Returning error from broken room %s", room.jid); |
10449
2e36a54906e4
MUC: Indicate that the room is the origin of various errors where 'from' is an occupant JID
Kim Alvefur <zash@zash.se>
parents:
10366
diff
changeset
|
207 origin.send(st.error_reply(stanza, "wait", "internal-server-error", nil, room.jid)); |
8661
7fc0784491ef
MUC: Override methods on broken rooms to return internal-server-error instead
Kim Alvefur <zash@zash.se>
parents:
8660
diff
changeset
|
208 return true; |
1754
67b66eec9777
MUC: Added support for room configuration forms, persistence and hidden rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
1748
diff
changeset
|
209 end |
67b66eec9777
MUC: Added support for room configuration forms, persistence and hidden rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
1748
diff
changeset
|
210 |
6333
93b8438fe761
plugins/muc/mod_muc: Use map store for room persistence
daurnimator <quae@daurnimator.com>
parents:
6332
diff
changeset
|
211 local function restore_room(jid) |
1754
67b66eec9777
MUC: Added support for room configuration forms, persistence and hidden rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
1748
diff
changeset
|
212 local node = jid_split(jid); |
8656
0e84814a7ece
MUC: Produce an untracked, locked room on failure to read room from storage (#1091)
Kim Alvefur <zash@zash.se>
parents:
8572
diff
changeset
|
213 local data, err = room_configs:get(node); |
4924
d8b9fe5900a2
MUC: Handle missing persistent room data.
Waqas Hussain <waqas20@gmail.com>
parents:
4528
diff
changeset
|
214 if data then |
8178
9f2a5fc9e4a5
MUC: Log debug message when restoring a room from storage
Kim Alvefur <zash@zash.se>
parents:
8026
diff
changeset
|
215 module:log("debug", "Restoring room %s from storage", jid); |
9079
c040c358d6c0
mod_muc: Fire event when room is (and about to be) restored
Matthew Wild <mwild1@gmail.com>
parents:
9078
diff
changeset
|
216 if module:fire_event("muc-room-pre-restore", { jid = jid, data = data }) == false then |
c040c358d6c0
mod_muc: Fire event when room is (and about to be) restored
Matthew Wild <mwild1@gmail.com>
parents:
9078
diff
changeset
|
217 return false; |
c040c358d6c0
mod_muc: Fire event when room is (and about to be) restored
Matthew Wild <mwild1@gmail.com>
parents:
9078
diff
changeset
|
218 end |
8659
4006755c1097
MUC: Log failure to load room state
Kim Alvefur <zash@zash.se>
parents:
8658
diff
changeset
|
219 local state, s_err = room_state:get(node); |
4006755c1097
MUC: Log failure to load room state
Kim Alvefur <zash@zash.se>
parents:
8658
diff
changeset
|
220 if not state and s_err then |
4006755c1097
MUC: Log failure to load room state
Kim Alvefur <zash@zash.se>
parents:
8658
diff
changeset
|
221 module:log("debug", "Could not restore state of room %s: %s", jid, s_err); |
5808
026367992a0f
mod_muc: Support for locking newly-created rooms until they are configured (enabled with muc_room_locking = true)
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
222 end |
7415
cbb05b454c13
MUC: Separate config from live state
Kim Alvefur <zash@zash.se>
parents:
7414
diff
changeset
|
223 local room = muclib.restore_room(data, state); |
9013
a54bcc76cd22
MUC: Remove room state on successful restoration from disk
Kim Alvefur <zash@zash.se>
parents:
9012
diff
changeset
|
224 if track_room(room) then |
a54bcc76cd22
MUC: Remove room state on successful restoration from disk
Kim Alvefur <zash@zash.se>
parents:
9012
diff
changeset
|
225 room_state:set(node, nil); |
9079
c040c358d6c0
mod_muc: Fire event when room is (and about to be) restored
Matthew Wild <mwild1@gmail.com>
parents:
9078
diff
changeset
|
226 module:fire_event("muc-room-restored", { jid = jid, room = room }); |
9013
a54bcc76cd22
MUC: Remove room state on successful restoration from disk
Kim Alvefur <zash@zash.se>
parents:
9012
diff
changeset
|
227 return room; |
a54bcc76cd22
MUC: Remove room state on successful restoration from disk
Kim Alvefur <zash@zash.se>
parents:
9012
diff
changeset
|
228 else |
a54bcc76cd22
MUC: Remove room state on successful restoration from disk
Kim Alvefur <zash@zash.se>
parents:
9012
diff
changeset
|
229 return false; |
a54bcc76cd22
MUC: Remove room state on successful restoration from disk
Kim Alvefur <zash@zash.se>
parents:
9012
diff
changeset
|
230 end |
8656
0e84814a7ece
MUC: Produce an untracked, locked room on failure to read room from storage (#1091)
Kim Alvefur <zash@zash.se>
parents:
8572
diff
changeset
|
231 elseif err then |
0e84814a7ece
MUC: Produce an untracked, locked room on failure to read room from storage (#1091)
Kim Alvefur <zash@zash.se>
parents:
8572
diff
changeset
|
232 module:log("error", "Error restoring room %s from storage: %s", jid, err); |
0e84814a7ece
MUC: Produce an untracked, locked room on failure to read room from storage (#1091)
Kim Alvefur <zash@zash.se>
parents:
8572
diff
changeset
|
233 local room = muclib.new_room(jid, { locked = math.huge }); |
8661
7fc0784491ef
MUC: Override methods on broken rooms to return internal-server-error instead
Kim Alvefur <zash@zash.se>
parents:
8660
diff
changeset
|
234 room.handle_normal_presence = handle_broken_room; |
7fc0784491ef
MUC: Override methods on broken rooms to return internal-server-error instead
Kim Alvefur <zash@zash.se>
parents:
8660
diff
changeset
|
235 room.handle_first_presence = handle_broken_room; |
8656
0e84814a7ece
MUC: Produce an untracked, locked room on failure to read room from storage (#1091)
Kim Alvefur <zash@zash.se>
parents:
8572
diff
changeset
|
236 return room; |
5808
026367992a0f
mod_muc: Support for locking newly-created rooms until they are configured (enabled with muc_room_locking = true)
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
237 end |
1754
67b66eec9777
MUC: Added support for room configuration forms, persistence and hidden rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
1748
diff
changeset
|
238 end |
67b66eec9777
MUC: Added support for room configuration forms, persistence and hidden rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
1748
diff
changeset
|
239 |
9051
68386f7b9fc9
MUC: Add some comments clarifying methods
Matthew Wild <mwild1@gmail.com>
parents:
9050
diff
changeset
|
240 -- Removes a room from memory, without saving it (save first if required) |
6348
bffc885dc378
mod_muc: Fix tracebacks (thanks nick1)
Kim Alvefur <zash@zash.se>
parents:
6334
diff
changeset
|
241 function forget_room(room) |
7536
3f8520b59677
MUC: Pass room JID instead of room itself to logger, fixes traceback (thanks damencho)
Kim Alvefur <zash@zash.se>
parents:
7417
diff
changeset
|
242 module:log("debug", "Forgetting %s", room.jid); |
7370
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
243 rooms.save = nil; |
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
244 rooms:set(room.jid, nil); |
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
245 end |
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
246 |
9051
68386f7b9fc9
MUC: Add some comments clarifying methods
Matthew Wild <mwild1@gmail.com>
parents:
9050
diff
changeset
|
247 -- Removes a room from the database (may remain in memory) |
7370
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
248 function delete_room(room) |
7650
4c2407422f71
Logging error if MUC room cache is full
Sam Whited <sam@samwhited.com>
parents:
7641
diff
changeset
|
249 module:log("debug", "Deleting %s", room.jid); |
7370
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
250 room_configs:set(jid_split(room.jid), nil); |
9012
295faf1522f9
MUC: Purge saved room state when deleting a room
Kim Alvefur <zash@zash.se>
parents:
9010
diff
changeset
|
251 room_state:set(jid_split(room.jid), nil); |
7370
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
252 persistent_rooms:set(nil, room.jid, nil); |
7371
d5ba0dec0c95
MUC: Cache public rooms and their names to speed up disco#items
Kim Alvefur <zash@zash.se>
parents:
7370
diff
changeset
|
253 room_items_cache[room.jid] = nil; |
7370
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
254 end |
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
255 |
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
256 function module.unload() |
9050
f5c43e829d93
MUC: Add new iteration methods, all_rooms/live_rooms to eventually replace each_room
Matthew Wild <mwild1@gmail.com>
parents:
9049
diff
changeset
|
257 for room in live_rooms() do |
7414
1b62c89014c4
MUC: Separate force-save parameter from save-entire-state flag
Kim Alvefur <zash@zash.se>
parents:
7411
diff
changeset
|
258 room:save(nil, true); |
7370
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
259 forget_room(room); |
5808
026367992a0f
mod_muc: Support for locking newly-created rooms until they are configured (enabled with muc_room_locking = true)
Matthew Wild <mwild1@gmail.com>
parents:
5807
diff
changeset
|
260 end |
1754
67b66eec9777
MUC: Added support for room configuration forms, persistence and hidden rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
1748
diff
changeset
|
261 end |
67b66eec9777
MUC: Added support for room configuration forms, persistence and hidden rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
1748
diff
changeset
|
262 |
6109
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
263 function get_room_from_jid(room_jid) |
7370
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
264 local room = rooms:get(room_jid); |
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
265 if room then |
8926
89f6b2a2bec3
MUC: Measure cache hits and misses
Kim Alvefur <zash@zash.se>
parents:
8925
diff
changeset
|
266 room_hit(); |
7370
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
267 rooms:set(room_jid, room); -- bump to top; |
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
268 return room; |
6333
93b8438fe761
plugins/muc/mod_muc: Use map store for room persistence
daurnimator <quae@daurnimator.com>
parents:
6332
diff
changeset
|
269 end |
8926
89f6b2a2bec3
MUC: Measure cache hits and misses
Kim Alvefur <zash@zash.se>
parents:
8925
diff
changeset
|
270 room_miss(); |
7370
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
271 return restore_room(room_jid); |
6109
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
272 end |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
273 |
9626
4d3ab7153153
MUC: Use defaults from config in create_room() if no config provided
Matthew Wild <mwild1@gmail.com>
parents:
9240
diff
changeset
|
274 local function set_room_defaults(room, lang) |
4d3ab7153153
MUC: Use defaults from config in create_room() if no config provided
Matthew Wild <mwild1@gmail.com>
parents:
9240
diff
changeset
|
275 room:set_public(module:get_option_boolean("muc_room_default_public", false)); |
4d3ab7153153
MUC: Use defaults from config in create_room() if no config provided
Matthew Wild <mwild1@gmail.com>
parents:
9240
diff
changeset
|
276 room:set_persistent(module:get_option_boolean("muc_room_default_persistent", room:get_persistent())); |
4d3ab7153153
MUC: Use defaults from config in create_room() if no config provided
Matthew Wild <mwild1@gmail.com>
parents:
9240
diff
changeset
|
277 room:set_members_only(module:get_option_boolean("muc_room_default_members_only", room:get_members_only())); |
4d3ab7153153
MUC: Use defaults from config in create_room() if no config provided
Matthew Wild <mwild1@gmail.com>
parents:
9240
diff
changeset
|
278 room:set_allow_member_invites(module:get_option_boolean("muc_room_default_allow_member_invites", |
4d3ab7153153
MUC: Use defaults from config in create_room() if no config provided
Matthew Wild <mwild1@gmail.com>
parents:
9240
diff
changeset
|
279 room:get_allow_member_invites())); |
4d3ab7153153
MUC: Use defaults from config in create_room() if no config provided
Matthew Wild <mwild1@gmail.com>
parents:
9240
diff
changeset
|
280 room:set_moderated(module:get_option_boolean("muc_room_default_moderated", room:get_moderated())); |
4d3ab7153153
MUC: Use defaults from config in create_room() if no config provided
Matthew Wild <mwild1@gmail.com>
parents:
9240
diff
changeset
|
281 room:set_whois(module:get_option_boolean("muc_room_default_public_jids", |
4d3ab7153153
MUC: Use defaults from config in create_room() if no config provided
Matthew Wild <mwild1@gmail.com>
parents:
9240
diff
changeset
|
282 room:get_whois() == "anyone") and "anyone" or "moderators"); |
4d3ab7153153
MUC: Use defaults from config in create_room() if no config provided
Matthew Wild <mwild1@gmail.com>
parents:
9240
diff
changeset
|
283 room:set_changesubject(module:get_option_boolean("muc_room_default_change_subject", room:get_changesubject())); |
4d3ab7153153
MUC: Use defaults from config in create_room() if no config provided
Matthew Wild <mwild1@gmail.com>
parents:
9240
diff
changeset
|
284 room:set_historylength(module:get_option_number("muc_room_default_history_length", room:get_historylength())); |
4d3ab7153153
MUC: Use defaults from config in create_room() if no config provided
Matthew Wild <mwild1@gmail.com>
parents:
9240
diff
changeset
|
285 room:set_language(lang or module:get_option_string("muc_room_default_language")); |
10353
7b602e13c3b6
MUC: Add controls for whose presence is broadcast (closes #1335)
Lance Stout <lancestout@gmail.com>
parents:
9647
diff
changeset
|
286 room:set_presence_broadcast(module:get_option("muc_room_default_presence_broadcast", room:get_presence_broadcast())); |
9626
4d3ab7153153
MUC: Use defaults from config in create_room() if no config provided
Matthew Wild <mwild1@gmail.com>
parents:
9240
diff
changeset
|
287 end |
4d3ab7153153
MUC: Use defaults from config in create_room() if no config provided
Matthew Wild <mwild1@gmail.com>
parents:
9240
diff
changeset
|
288 |
8875
be3230b42f12
MUC: Allow passing config to public create_room API
Kim Alvefur <zash@zash.se>
parents:
8870
diff
changeset
|
289 function create_room(room_jid, config) |
10366
5611c939743a
MUC: Strictly validate room JID on creation
Kim Alvefur <zash@zash.se>
parents:
10353
diff
changeset
|
290 if jid_bare(room_jid) ~= room_jid or not jid_prep(room_jid, true) then |
5611c939743a
MUC: Strictly validate room JID on creation
Kim Alvefur <zash@zash.se>
parents:
10353
diff
changeset
|
291 return nil, "invalid-jid"; |
5611c939743a
MUC: Strictly validate room JID on creation
Kim Alvefur <zash@zash.se>
parents:
10353
diff
changeset
|
292 end |
7641
5eef792bb2e1
MUC: Restore modern version of public create_room() function removed in dfaacf042cfe
Kim Alvefur <zash@zash.se>
parents:
7536
diff
changeset
|
293 local exists = get_room_from_jid(room_jid); |
5eef792bb2e1
MUC: Restore modern version of public create_room() function removed in dfaacf042cfe
Kim Alvefur <zash@zash.se>
parents:
7536
diff
changeset
|
294 if exists then |
5eef792bb2e1
MUC: Restore modern version of public create_room() function removed in dfaacf042cfe
Kim Alvefur <zash@zash.se>
parents:
7536
diff
changeset
|
295 return nil, "room-exists"; |
5eef792bb2e1
MUC: Restore modern version of public create_room() function removed in dfaacf042cfe
Kim Alvefur <zash@zash.se>
parents:
7536
diff
changeset
|
296 end |
8875
be3230b42f12
MUC: Allow passing config to public create_room API
Kim Alvefur <zash@zash.se>
parents:
8870
diff
changeset
|
297 local room = muclib.new_room(room_jid, config); |
9626
4d3ab7153153
MUC: Use defaults from config in create_room() if no config provided
Matthew Wild <mwild1@gmail.com>
parents:
9240
diff
changeset
|
298 if not config then |
4d3ab7153153
MUC: Use defaults from config in create_room() if no config provided
Matthew Wild <mwild1@gmail.com>
parents:
9240
diff
changeset
|
299 set_room_defaults(room); |
4d3ab7153153
MUC: Use defaults from config in create_room() if no config provided
Matthew Wild <mwild1@gmail.com>
parents:
9240
diff
changeset
|
300 end |
7641
5eef792bb2e1
MUC: Restore modern version of public create_room() function removed in dfaacf042cfe
Kim Alvefur <zash@zash.se>
parents:
7536
diff
changeset
|
301 module:fire_event("muc-room-created", { |
5eef792bb2e1
MUC: Restore modern version of public create_room() function removed in dfaacf042cfe
Kim Alvefur <zash@zash.se>
parents:
7536
diff
changeset
|
302 room = room; |
5eef792bb2e1
MUC: Restore modern version of public create_room() function removed in dfaacf042cfe
Kim Alvefur <zash@zash.se>
parents:
7536
diff
changeset
|
303 }); |
8877
9182398c64b9
MUC: Track rooms created via internal public API
Kim Alvefur <zash@zash.se>
parents:
8875
diff
changeset
|
304 return track_room(room); |
5210
862a6fae05e7
MUC: Expose create_room(jid).
Waqas Hussain <waqas20@gmail.com>
parents:
5195
diff
changeset
|
305 end |
862a6fae05e7
MUC: Expose create_room(jid).
Waqas Hussain <waqas20@gmail.com>
parents:
5195
diff
changeset
|
306 |
9050
f5c43e829d93
MUC: Add new iteration methods, all_rooms/live_rooms to eventually replace each_room
Matthew Wild <mwild1@gmail.com>
parents:
9049
diff
changeset
|
307 function all_rooms() |
7370
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
308 return coroutine.wrap(function () |
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
309 local seen = {}; -- Don't iterate over persistent rooms twice |
9050
f5c43e829d93
MUC: Add new iteration methods, all_rooms/live_rooms to eventually replace each_room
Matthew Wild <mwild1@gmail.com>
parents:
9049
diff
changeset
|
310 for room in live_rooms() do |
7370
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
311 coroutine.yield(room); |
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
312 seen[room.jid] = true; |
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
313 end |
8662
a4e63b037a2a
MUC: Catch and log error in case of storage failure in iterator over rooms
Kim Alvefur <zash@zash.se>
parents:
8661
diff
changeset
|
314 local all_persistent_rooms, err = persistent_rooms_storage:get(nil); |
a4e63b037a2a
MUC: Catch and log error in case of storage failure in iterator over rooms
Kim Alvefur <zash@zash.se>
parents:
8661
diff
changeset
|
315 if not all_persistent_rooms then |
a4e63b037a2a
MUC: Catch and log error in case of storage failure in iterator over rooms
Kim Alvefur <zash@zash.se>
parents:
8661
diff
changeset
|
316 if err then |
a4e63b037a2a
MUC: Catch and log error in case of storage failure in iterator over rooms
Kim Alvefur <zash@zash.se>
parents:
8661
diff
changeset
|
317 module:log("error", "Error loading list of persistent rooms, only rooms live in memory were iterated over"); |
a4e63b037a2a
MUC: Catch and log error in case of storage failure in iterator over rooms
Kim Alvefur <zash@zash.se>
parents:
8661
diff
changeset
|
318 module:log("debug", "%s", debug.traceback(err)); |
a4e63b037a2a
MUC: Catch and log error in case of storage failure in iterator over rooms
Kim Alvefur <zash@zash.se>
parents:
8661
diff
changeset
|
319 end |
a4e63b037a2a
MUC: Catch and log error in case of storage failure in iterator over rooms
Kim Alvefur <zash@zash.se>
parents:
8661
diff
changeset
|
320 return nil; |
a4e63b037a2a
MUC: Catch and log error in case of storage failure in iterator over rooms
Kim Alvefur <zash@zash.se>
parents:
8661
diff
changeset
|
321 end |
a4e63b037a2a
MUC: Catch and log error in case of storage failure in iterator over rooms
Kim Alvefur <zash@zash.se>
parents:
8661
diff
changeset
|
322 for room_jid in pairs(all_persistent_rooms) do |
7403
d6e6e21057f0
MUC: Correctly iterate over suspended rooms while excluding live rooms
Kim Alvefur <zash@zash.se>
parents:
7372
diff
changeset
|
323 if not seen[room_jid] then |
6479
d016437e01bf
plugins/muc/mod_muc: Add 'local_only' flag to mod_muc, so rooms don't get restored on shutdown
daurnimator <quae@daurnimator.com>
parents:
6372
diff
changeset
|
324 local room = restore_room(room_jid); |
8657
a804f2e75f10
MUC: Prevent room eviction on storage failure
Kim Alvefur <zash@zash.se>
parents:
8656
diff
changeset
|
325 if room then |
a804f2e75f10
MUC: Prevent room eviction on storage failure
Kim Alvefur <zash@zash.se>
parents:
8656
diff
changeset
|
326 coroutine.yield(room); |
a804f2e75f10
MUC: Prevent room eviction on storage failure
Kim Alvefur <zash@zash.se>
parents:
8656
diff
changeset
|
327 else |
6479
d016437e01bf
plugins/muc/mod_muc: Add 'local_only' flag to mod_muc, so rooms don't get restored on shutdown
daurnimator <quae@daurnimator.com>
parents:
6372
diff
changeset
|
328 module:log("error", "Missing data for room '%s', omitting from iteration", room_jid); |
d016437e01bf
plugins/muc/mod_muc: Add 'local_only' flag to mod_muc, so rooms don't get restored on shutdown
daurnimator <quae@daurnimator.com>
parents:
6372
diff
changeset
|
329 end |
6238
b2b523d21891
plugins/muc/mod_muc: Move room persistence to own block
daurnimator <quae@daurnimator.com>
parents:
6237
diff
changeset
|
330 end |
b2b523d21891
plugins/muc/mod_muc: Move room persistence to own block
daurnimator <quae@daurnimator.com>
parents:
6237
diff
changeset
|
331 end |
7370
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
332 end); |
1754
67b66eec9777
MUC: Added support for room configuration forms, persistence and hidden rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
1748
diff
changeset
|
333 end |
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
334 |
9050
f5c43e829d93
MUC: Add new iteration methods, all_rooms/live_rooms to eventually replace each_room
Matthew Wild <mwild1@gmail.com>
parents:
9049
diff
changeset
|
335 function live_rooms() |
f5c43e829d93
MUC: Add new iteration methods, all_rooms/live_rooms to eventually replace each_room
Matthew Wild <mwild1@gmail.com>
parents:
9049
diff
changeset
|
336 return rooms:values(); |
f5c43e829d93
MUC: Add new iteration methods, all_rooms/live_rooms to eventually replace each_room
Matthew Wild <mwild1@gmail.com>
parents:
9049
diff
changeset
|
337 end |
f5c43e829d93
MUC: Add new iteration methods, all_rooms/live_rooms to eventually replace each_room
Matthew Wild <mwild1@gmail.com>
parents:
9049
diff
changeset
|
338 |
f5c43e829d93
MUC: Add new iteration methods, all_rooms/live_rooms to eventually replace each_room
Matthew Wild <mwild1@gmail.com>
parents:
9049
diff
changeset
|
339 function each_room(live_only) |
f5c43e829d93
MUC: Add new iteration methods, all_rooms/live_rooms to eventually replace each_room
Matthew Wild <mwild1@gmail.com>
parents:
9049
diff
changeset
|
340 if live_only then |
f5c43e829d93
MUC: Add new iteration methods, all_rooms/live_rooms to eventually replace each_room
Matthew Wild <mwild1@gmail.com>
parents:
9049
diff
changeset
|
341 return live_rooms(); |
f5c43e829d93
MUC: Add new iteration methods, all_rooms/live_rooms to eventually replace each_room
Matthew Wild <mwild1@gmail.com>
parents:
9049
diff
changeset
|
342 end |
f5c43e829d93
MUC: Add new iteration methods, all_rooms/live_rooms to eventually replace each_room
Matthew Wild <mwild1@gmail.com>
parents:
9049
diff
changeset
|
343 return all_rooms(); |
f5c43e829d93
MUC: Add new iteration methods, all_rooms/live_rooms to eventually replace each_room
Matthew Wild <mwild1@gmail.com>
parents:
9049
diff
changeset
|
344 end |
f5c43e829d93
MUC: Add new iteration methods, all_rooms/live_rooms to eventually replace each_room
Matthew Wild <mwild1@gmail.com>
parents:
9049
diff
changeset
|
345 |
5691
18a115beeebe
mod_muc: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5659
diff
changeset
|
346 module:hook("host-disco-items", function(event) |
18a115beeebe
mod_muc: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5659
diff
changeset
|
347 local reply = event.reply; |
18a115beeebe
mod_muc: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5659
diff
changeset
|
348 module:log("debug", "host-disco-items called"); |
7371
d5ba0dec0c95
MUC: Cache public rooms and their names to speed up disco#items
Kim Alvefur <zash@zash.se>
parents:
7370
diff
changeset
|
349 if next(room_items_cache) ~= nil then |
d5ba0dec0c95
MUC: Cache public rooms and their names to speed up disco#items
Kim Alvefur <zash@zash.se>
parents:
7370
diff
changeset
|
350 for jid, room_name in pairs(room_items_cache) do |
11057
13eee48071c8
MUC: Don't default room name to JID localpart (API breaking change)
Kim Alvefur <zash@zash.se>
parents:
10698
diff
changeset
|
351 if room_name == "" then room_name = nil; end |
7371
d5ba0dec0c95
MUC: Cache public rooms and their names to speed up disco#items
Kim Alvefur <zash@zash.se>
parents:
7370
diff
changeset
|
352 reply:tag("item", { jid = jid, name = room_name }):up(); |
d5ba0dec0c95
MUC: Cache public rooms and their names to speed up disco#items
Kim Alvefur <zash@zash.se>
parents:
7370
diff
changeset
|
353 end |
d5ba0dec0c95
MUC: Cache public rooms and their names to speed up disco#items
Kim Alvefur <zash@zash.se>
parents:
7370
diff
changeset
|
354 else |
9050
f5c43e829d93
MUC: Add new iteration methods, all_rooms/live_rooms to eventually replace each_room
Matthew Wild <mwild1@gmail.com>
parents:
9049
diff
changeset
|
355 for room in all_rooms() do |
7371
d5ba0dec0c95
MUC: Cache public rooms and their names to speed up disco#items
Kim Alvefur <zash@zash.se>
parents:
7370
diff
changeset
|
356 if not room:get_hidden() then |
d5ba0dec0c95
MUC: Cache public rooms and their names to speed up disco#items
Kim Alvefur <zash@zash.se>
parents:
7370
diff
changeset
|
357 local jid, room_name = room.jid, room:get_name(); |
11057
13eee48071c8
MUC: Don't default room name to JID localpart (API breaking change)
Kim Alvefur <zash@zash.se>
parents:
10698
diff
changeset
|
358 room_items_cache[jid] = room_name or ""; |
7371
d5ba0dec0c95
MUC: Cache public rooms and their names to speed up disco#items
Kim Alvefur <zash@zash.se>
parents:
7370
diff
changeset
|
359 reply:tag("item", { jid = jid, name = room_name }):up(); |
d5ba0dec0c95
MUC: Cache public rooms and their names to speed up disco#items
Kim Alvefur <zash@zash.se>
parents:
7370
diff
changeset
|
360 end |
1754
67b66eec9777
MUC: Added support for room configuration forms, persistence and hidden rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
1748
diff
changeset
|
361 end |
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
362 end |
5691
18a115beeebe
mod_muc: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5659
diff
changeset
|
363 end); |
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
364 |
8867
c601c834bf01
MUC: Add support for setting MUC room defaults from the config file
Kim Alvefur <zash@zash.se>
parents:
8865
diff
changeset
|
365 module:hook("muc-room-pre-create", function (event) |
9626
4d3ab7153153
MUC: Use defaults from config in create_room() if no config provided
Matthew Wild <mwild1@gmail.com>
parents:
9240
diff
changeset
|
366 set_room_defaults(event.room, event.stanza.attr["xml:lang"]); |
8867
c601c834bf01
MUC: Add support for setting MUC room defaults from the config file
Kim Alvefur <zash@zash.se>
parents:
8865
diff
changeset
|
367 end, 1); |
c601c834bf01
MUC: Add support for setting MUC room defaults from the config file
Kim Alvefur <zash@zash.se>
parents:
8865
diff
changeset
|
368 |
8660
3b54f8472b51
MUC: Return error if unable to keep track of room due to storage failure
Kim Alvefur <zash@zash.se>
parents:
8659
diff
changeset
|
369 module:hook("muc-room-pre-create", function(event) |
4370 | 370 local origin, stanza = event.origin, event.stanza; |
8660
3b54f8472b51
MUC: Return error if unable to keep track of room due to storage failure
Kim Alvefur <zash@zash.se>
parents:
8659
diff
changeset
|
371 if not track_room(event.room) then |
10450
c1edeb9fe337
MUC: Indicate the component as origin of various errors where there's no room
Kim Alvefur <zash@zash.se>
parents:
10449
diff
changeset
|
372 origin.send(st.error_reply(stanza, "wait", "resource-constraint", nil, module.host)); |
8660
3b54f8472b51
MUC: Return error if unable to keep track of room due to storage failure
Kim Alvefur <zash@zash.se>
parents:
8659
diff
changeset
|
373 return true; |
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
374 end |
6244
dfaacf042cfe
plugins/muc/mod_muc: Remove attempt_room_creation and create_room function. Instead have a 'track_room' function called from the end of the pre-create hook, and just create an un-tracked room object when we get a presence
daurnimator <quae@daurnimator.com>
parents:
6243
diff
changeset
|
375 end, -1000); |
dfaacf042cfe
plugins/muc/mod_muc: Remove attempt_room_creation and create_room function. Instead have a 'track_room' function called from the end of the pre-create hook, and just create an un-tracked room object when we get a presence
daurnimator <quae@daurnimator.com>
parents:
6243
diff
changeset
|
376 |
6109
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
377 module:hook("muc-room-destroyed",function(event) |
7370
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
378 local room = event.room; |
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
379 forget_room(room); |
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
380 delete_room(room); |
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
381 end); |
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
382 |
9015
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
383 if module:get_option_boolean("muc_tombstones", true) then |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
384 |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
385 local ttl = module:get_option_number("muc_tombstone_expiry", 86400 * 31); |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
386 |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
387 module:hook("muc-room-destroyed",function(event) |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
388 local room = event.room; |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
389 if not room:get_persistent() then return end |
9093
04a284c5b88b
MUC: Allow destruction of tombstones (eg via telnet or adhoc command)
Kim Alvefur <zash@zash.se>
parents:
9081
diff
changeset
|
390 if room._data.destroyed then |
04a284c5b88b
MUC: Allow destruction of tombstones (eg via telnet or adhoc command)
Kim Alvefur <zash@zash.se>
parents:
9081
diff
changeset
|
391 return -- Allow destruction of tombstone |
04a284c5b88b
MUC: Allow destruction of tombstones (eg via telnet or adhoc command)
Kim Alvefur <zash@zash.se>
parents:
9081
diff
changeset
|
392 end |
9015
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
393 |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
394 local tombstone = new_room(room.jid, { |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
395 locked = os.time() + ttl; |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
396 destroyed = true; |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
397 reason = event.reason; |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
398 newjid = event.newjid; |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
399 -- password? |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
400 }); |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
401 tombstone.save = room_save; |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
402 tombstone:set_persistent(true); |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
403 tombstone:set_hidden(true); |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
404 tombstone:save(true); |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
405 return true; |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
406 end, -10); |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
407 end |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
408 |
6243
b7c95e9c13de
plugins/muc/mod_muc: Move `restrict_room_creation` into own area. now uses pre-create hook
daurnimator <quae@daurnimator.com>
parents:
6241
diff
changeset
|
409 do |
b7c95e9c13de
plugins/muc/mod_muc: Move `restrict_room_creation` into own area. now uses pre-create hook
daurnimator <quae@daurnimator.com>
parents:
6241
diff
changeset
|
410 local restrict_room_creation = module:get_option("restrict_room_creation"); |
b7c95e9c13de
plugins/muc/mod_muc: Move `restrict_room_creation` into own area. now uses pre-create hook
daurnimator <quae@daurnimator.com>
parents:
6241
diff
changeset
|
411 if restrict_room_creation == true then |
b7c95e9c13de
plugins/muc/mod_muc: Move `restrict_room_creation` into own area. now uses pre-create hook
daurnimator <quae@daurnimator.com>
parents:
6241
diff
changeset
|
412 restrict_room_creation = "admin"; |
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
413 end |
6243
b7c95e9c13de
plugins/muc/mod_muc: Move `restrict_room_creation` into own area. now uses pre-create hook
daurnimator <quae@daurnimator.com>
parents:
6241
diff
changeset
|
414 if restrict_room_creation then |
b7c95e9c13de
plugins/muc/mod_muc: Move `restrict_room_creation` into own area. now uses pre-create hook
daurnimator <quae@daurnimator.com>
parents:
6241
diff
changeset
|
415 local host_suffix = module.host:gsub("^[^%.]+%.", ""); |
b7c95e9c13de
plugins/muc/mod_muc: Move `restrict_room_creation` into own area. now uses pre-create hook
daurnimator <quae@daurnimator.com>
parents:
6241
diff
changeset
|
416 module:hook("muc-room-pre-create", function(event) |
6328
93fb28851d9e
mod_muc: Fix use of undefined global. Fixes #431.
Matthew Wild <mwild1@gmail.com>
parents:
6276
diff
changeset
|
417 local origin, stanza = event.origin, event.stanza; |
93fb28851d9e
mod_muc: Fix use of undefined global. Fixes #431.
Matthew Wild <mwild1@gmail.com>
parents:
6276
diff
changeset
|
418 local user_jid = stanza.attr.from; |
6243
b7c95e9c13de
plugins/muc/mod_muc: Move `restrict_room_creation` into own area. now uses pre-create hook
daurnimator <quae@daurnimator.com>
parents:
6241
diff
changeset
|
419 if not is_admin(user_jid) and not ( |
b7c95e9c13de
plugins/muc/mod_muc: Move `restrict_room_creation` into own area. now uses pre-create hook
daurnimator <quae@daurnimator.com>
parents:
6241
diff
changeset
|
420 restrict_room_creation == "local" and |
b7c95e9c13de
plugins/muc/mod_muc: Move `restrict_room_creation` into own area. now uses pre-create hook
daurnimator <quae@daurnimator.com>
parents:
6241
diff
changeset
|
421 select(2, jid_split(user_jid)) == host_suffix |
b7c95e9c13de
plugins/muc/mod_muc: Move `restrict_room_creation` into own area. now uses pre-create hook
daurnimator <quae@daurnimator.com>
parents:
6241
diff
changeset
|
422 ) then |
10450
c1edeb9fe337
MUC: Indicate the component as origin of various errors where there's no room
Kim Alvefur <zash@zash.se>
parents:
10449
diff
changeset
|
423 origin.send(st.error_reply(stanza, "cancel", "not-allowed", "Room creation is restricted", module.host)); |
6243
b7c95e9c13de
plugins/muc/mod_muc: Move `restrict_room_creation` into own area. now uses pre-create hook
daurnimator <quae@daurnimator.com>
parents:
6241
diff
changeset
|
424 return true; |
8705
1d66f66a13c9
MUC: Don't reply to errors with more errors (fixes #1122)
Kim Alvefur <zash@zash.se>
parents:
8704
diff
changeset
|
425 end |
6243
b7c95e9c13de
plugins/muc/mod_muc: Move `restrict_room_creation` into own area. now uses pre-create hook
daurnimator <quae@daurnimator.com>
parents:
6241
diff
changeset
|
426 end); |
4370 | 427 end |
1780
668ce0a2050d
MUC: Added a send() method to the component. Fixes issues with local mod_vcard.
Waqas Hussain <waqas20@gmail.com>
parents:
1767
diff
changeset
|
428 end |
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
429 |
6109
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
430 for event_name, method in pairs { |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
431 -- Normal room interactions |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
432 ["iq-get/bare/http://jabber.org/protocol/disco#info:query"] = "handle_disco_info_get_query" ; |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
433 ["iq-get/bare/http://jabber.org/protocol/disco#items:query"] = "handle_disco_items_get_query" ; |
6141
bf6de8ef66c2
plugins/muc: Rename admin query hook
daurnimator <quae@daurnimator.com>
parents:
6129
diff
changeset
|
434 ["iq-set/bare/http://jabber.org/protocol/muc#admin:query"] = "handle_admin_query_set_command" ; |
bf6de8ef66c2
plugins/muc: Rename admin query hook
daurnimator <quae@daurnimator.com>
parents:
6129
diff
changeset
|
435 ["iq-get/bare/http://jabber.org/protocol/muc#admin:query"] = "handle_admin_query_get_command" ; |
6109
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
436 ["iq-set/bare/http://jabber.org/protocol/muc#owner:query"] = "handle_owner_query_set_to_room" ; |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
437 ["iq-get/bare/http://jabber.org/protocol/muc#owner:query"] = "handle_owner_query_get_to_room" ; |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
438 ["message/bare"] = "handle_message_to_room" ; |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
439 ["presence/bare"] = "handle_presence_to_room" ; |
9240
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
9237
diff
changeset
|
440 ["iq/bare/jabber:iq:register:query"] = "handle_register_iq"; |
6109
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
441 -- Host room |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
442 ["iq-get/host/http://jabber.org/protocol/disco#info:query"] = "handle_disco_info_get_query" ; |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
443 ["iq-get/host/http://jabber.org/protocol/disco#items:query"] = "handle_disco_items_get_query" ; |
6141
bf6de8ef66c2
plugins/muc: Rename admin query hook
daurnimator <quae@daurnimator.com>
parents:
6129
diff
changeset
|
444 ["iq-set/host/http://jabber.org/protocol/muc#admin:query"] = "handle_admin_query_set_command" ; |
bf6de8ef66c2
plugins/muc: Rename admin query hook
daurnimator <quae@daurnimator.com>
parents:
6129
diff
changeset
|
445 ["iq-get/host/http://jabber.org/protocol/muc#admin:query"] = "handle_admin_query_get_command" ; |
6109
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
446 ["iq-set/host/http://jabber.org/protocol/muc#owner:query"] = "handle_owner_query_set_to_room" ; |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
447 ["iq-get/host/http://jabber.org/protocol/muc#owner:query"] = "handle_owner_query_get_to_room" ; |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
448 ["message/host"] = "handle_message_to_room" ; |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
449 ["presence/host"] = "handle_presence_to_room" ; |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
450 -- Direct to occupant (normal rooms and host room) |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
451 ["presence/full"] = "handle_presence_to_occupant" ; |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
452 ["iq/full"] = "handle_iq_to_occupant" ; |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
453 ["message/full"] = "handle_message_to_occupant" ; |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
454 } do |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
455 module:hook(event_name, function (event) |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
456 local origin, stanza = event.origin, event.stanza; |
6244
dfaacf042cfe
plugins/muc/mod_muc: Remove attempt_room_creation and create_room function. Instead have a 'track_room' function called from the end of the pre-create hook, and just create an un-tracked room object when we get a presence
daurnimator <quae@daurnimator.com>
parents:
6243
diff
changeset
|
457 local room_jid = jid_bare(stanza.attr.to); |
dfaacf042cfe
plugins/muc/mod_muc: Remove attempt_room_creation and create_room function. Instead have a 'track_room' function called from the end of the pre-create hook, and just create an un-tracked room object when we get a presence
daurnimator <quae@daurnimator.com>
parents:
6243
diff
changeset
|
458 local room = get_room_from_jid(room_jid); |
9015
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
459 |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
460 if room and room._data.destroyed then |
9081
ce57c69a20e2
MUC: Split long lines [luacheck strict]
Kim Alvefur <zash@zash.se>
parents:
9079
diff
changeset
|
461 if room._data.locked < os.time() |
ce57c69a20e2
MUC: Split long lines [luacheck strict]
Kim Alvefur <zash@zash.se>
parents:
9079
diff
changeset
|
462 or (is_admin(stanza.attr.from) and stanza.name == "presence" and stanza.attr.type == nil) then |
9048
c58be87e62d0
MUC: Return 'gone' error for destroyed rooms in other cases than attempted join
Kim Alvefur <zash@zash.se>
parents:
9035
diff
changeset
|
463 -- Allow the room to be recreated by admin or after time has passed |
c58be87e62d0
MUC: Return 'gone' error for destroyed rooms in other cases than attempted join
Kim Alvefur <zash@zash.se>
parents:
9035
diff
changeset
|
464 delete_room(room); |
c58be87e62d0
MUC: Return 'gone' error for destroyed rooms in other cases than attempted join
Kim Alvefur <zash@zash.se>
parents:
9035
diff
changeset
|
465 room = nil; |
c58be87e62d0
MUC: Return 'gone' error for destroyed rooms in other cases than attempted join
Kim Alvefur <zash@zash.se>
parents:
9035
diff
changeset
|
466 else |
c58be87e62d0
MUC: Return 'gone' error for destroyed rooms in other cases than attempted join
Kim Alvefur <zash@zash.se>
parents:
9035
diff
changeset
|
467 if stanza.attr.type ~= "error" then |
10450
c1edeb9fe337
MUC: Indicate the component as origin of various errors where there's no room
Kim Alvefur <zash@zash.se>
parents:
10449
diff
changeset
|
468 local reply = st.error_reply(stanza, "cancel", "gone", room._data.reason, module.host) |
9019
d780c10709c1
MUC: Include redirect in 'gone' error for destroyed rooms
Kim Alvefur <zash@zash.se>
parents:
9018
diff
changeset
|
469 if room._data.newjid then |
d780c10709c1
MUC: Include redirect in 'gone' error for destroyed rooms
Kim Alvefur <zash@zash.se>
parents:
9018
diff
changeset
|
470 local uri = "xmpp:"..room._data.newjid.."?join"; |
d780c10709c1
MUC: Include redirect in 'gone' error for destroyed rooms
Kim Alvefur <zash@zash.se>
parents:
9018
diff
changeset
|
471 reply:get_child("error"):child_with_name("gone"):text(uri); |
d780c10709c1
MUC: Include redirect in 'gone' error for destroyed rooms
Kim Alvefur <zash@zash.se>
parents:
9018
diff
changeset
|
472 end |
9015
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
473 event.origin.send(reply); |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
474 end |
9048
c58be87e62d0
MUC: Return 'gone' error for destroyed rooms in other cases than attempted join
Kim Alvefur <zash@zash.se>
parents:
9035
diff
changeset
|
475 return true; |
9015
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
476 end |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
477 end |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
478 |
6109
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
479 if room == nil then |
6244
dfaacf042cfe
plugins/muc/mod_muc: Remove attempt_room_creation and create_room function. Instead have a 'track_room' function called from the end of the pre-create hook, and just create an un-tracked room object when we get a presence
daurnimator <quae@daurnimator.com>
parents:
6243
diff
changeset
|
480 -- Watch presence to create rooms |
10366
5611c939743a
MUC: Strictly validate room JID on creation
Kim Alvefur <zash@zash.se>
parents:
10353
diff
changeset
|
481 if not jid_prep(room_jid, true) then |
10450
c1edeb9fe337
MUC: Indicate the component as origin of various errors where there's no room
Kim Alvefur <zash@zash.se>
parents:
10449
diff
changeset
|
482 origin.send(st.error_reply(stanza, "modify", "jid-malformed", nil, module.host)); |
10366
5611c939743a
MUC: Strictly validate room JID on creation
Kim Alvefur <zash@zash.se>
parents:
10353
diff
changeset
|
483 return true; |
5611c939743a
MUC: Strictly validate room JID on creation
Kim Alvefur <zash@zash.se>
parents:
10353
diff
changeset
|
484 end |
9647
0f43b901c854
MUC: Move check for explicit room join earlier in room creation flow
Kim Alvefur <zash@zash.se>
parents:
9626
diff
changeset
|
485 if stanza.attr.type == nil and stanza.name == "presence" and stanza:get_child("x", "http://jabber.org/protocol/muc") then |
6244
dfaacf042cfe
plugins/muc/mod_muc: Remove attempt_room_creation and create_room function. Instead have a 'track_room' function called from the end of the pre-create hook, and just create an un-tracked room object when we get a presence
daurnimator <quae@daurnimator.com>
parents:
6243
diff
changeset
|
486 room = muclib.new_room(room_jid); |
7410
45f543c82893
MUC: Split out handling of the room-creating presence into its own method
Kim Alvefur <zash@zash.se>
parents:
7404
diff
changeset
|
487 return room:handle_first_presence(origin, stanza); |
7246
80923a1a8fe1
MUC: Don't reply to error stanzas with more error stanzas (thanks woffs)
Kim Alvefur <zash@zash.se>
parents:
7086
diff
changeset
|
488 elseif stanza.attr.type ~= "error" then |
10450
c1edeb9fe337
MUC: Indicate the component as origin of various errors where there's no room
Kim Alvefur <zash@zash.se>
parents:
10449
diff
changeset
|
489 origin.send(st.error_reply(stanza, "cancel", "item-not-found", nil, module.host)); |
6244
dfaacf042cfe
plugins/muc/mod_muc: Remove attempt_room_creation and create_room function. Instead have a 'track_room' function called from the end of the pre-create hook, and just create an un-tracked room object when we get a presence
daurnimator <quae@daurnimator.com>
parents:
6243
diff
changeset
|
490 return true; |
7246
80923a1a8fe1
MUC: Don't reply to error stanzas with more error stanzas (thanks woffs)
Kim Alvefur <zash@zash.se>
parents:
7086
diff
changeset
|
491 else |
80923a1a8fe1
MUC: Don't reply to error stanzas with more error stanzas (thanks woffs)
Kim Alvefur <zash@zash.se>
parents:
7086
diff
changeset
|
492 return; |
6244
dfaacf042cfe
plugins/muc/mod_muc: Remove attempt_room_creation and create_room function. Instead have a 'track_room' function called from the end of the pre-create hook, and just create an un-tracked room object when we get a presence
daurnimator <quae@daurnimator.com>
parents:
6243
diff
changeset
|
493 end |
9221 | 494 elseif room == false then -- Error loading room |
10450
c1edeb9fe337
MUC: Indicate the component as origin of various errors where there's no room
Kim Alvefur <zash@zash.se>
parents:
10449
diff
changeset
|
495 origin.send(st.error_reply(stanza, "wait", "resource-constraint", nil, module.host)); |
9221 | 496 return true; |
5058
433cc9a4c7e9
MUC: Return <item-not-found/> on message and iq to non-existent rooms (thanks Maranda).
Waqas Hussain <waqas20@gmail.com>
parents:
5016
diff
changeset
|
497 end |
6109
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
498 return room[method](room, origin, stanza); |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
499 end, -2) |
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
500 end |
5062
88e198d65905
MUC: Send unavailable presence when the component or server is shutting down.
Waqas Hussain <waqas20@gmail.com>
parents:
5058
diff
changeset
|
501 |
6241
6b4ff34dc8ea
plugins/muc/mod_muc: Use module:shared instead of save/restore
daurnimator <quae@daurnimator.com>
parents:
6240
diff
changeset
|
502 function shutdown_component() |
9050
f5c43e829d93
MUC: Add new iteration methods, all_rooms/live_rooms to eventually replace each_room
Matthew Wild <mwild1@gmail.com>
parents:
9049
diff
changeset
|
503 for room in live_rooms() do |
7414
1b62c89014c4
MUC: Separate force-save parameter from save-entire-state flag
Kim Alvefur <zash@zash.se>
parents:
7411
diff
changeset
|
504 room:save(nil, true); |
5062
88e198d65905
MUC: Send unavailable presence when the component or server is shutting down.
Waqas Hussain <waqas20@gmail.com>
parents:
5058
diff
changeset
|
505 end |
88e198d65905
MUC: Send unavailable presence when the component or server is shutting down.
Waqas Hussain <waqas20@gmail.com>
parents:
5058
diff
changeset
|
506 end |
7694
bffbea1187ca
MUC: Run component shutdown after mod_c2s has closed its sessions (prevents ghosts)
Kim Alvefur <zash@zash.se>
parents:
7650
diff
changeset
|
507 module:hook_global("server-stopping", shutdown_component, -300); |
5692
24e7e58155d8
mod_muc: Add Ad-Hoc command to destroy MUC rooms
Florian Zeitz <florob@babelmonkeys.de>
parents:
5691
diff
changeset
|
508 |
6247
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
509 do -- Ad-hoc commands |
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
510 module:depends "adhoc"; |
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
511 local t_concat = table.concat; |
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
512 local adhoc_new = module:require "adhoc".new; |
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
513 local adhoc_initial = require "util.adhoc".new_initial_data_form; |
10698
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
514 local adhoc_simple = require "util.adhoc".new_simple_form; |
6247
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
515 local array = require "util.array"; |
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
516 local dataforms_new = require "util.dataforms".new; |
5692
24e7e58155d8
mod_muc: Add Ad-Hoc command to destroy MUC rooms
Florian Zeitz <florob@babelmonkeys.de>
parents:
5691
diff
changeset
|
517 |
6247
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
518 local destroy_rooms_layout = dataforms_new { |
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
519 title = "Destroy rooms"; |
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
520 instructions = "Select the rooms to destroy"; |
5692
24e7e58155d8
mod_muc: Add Ad-Hoc command to destroy MUC rooms
Florian Zeitz <florob@babelmonkeys.de>
parents:
5691
diff
changeset
|
521 |
6247
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
522 { name = "FORM_TYPE", type = "hidden", value = "http://prosody.im/protocol/muc#destroy" }; |
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
523 { name = "rooms", type = "list-multi", required = true, label = "Rooms to destroy:"}; |
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
524 }; |
5692
24e7e58155d8
mod_muc: Add Ad-Hoc command to destroy MUC rooms
Florian Zeitz <florob@babelmonkeys.de>
parents:
5691
diff
changeset
|
525 |
6247
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
526 local destroy_rooms_handler = adhoc_initial(destroy_rooms_layout, function() |
9050
f5c43e829d93
MUC: Add new iteration methods, all_rooms/live_rooms to eventually replace each_room
Matthew Wild <mwild1@gmail.com>
parents:
9049
diff
changeset
|
527 return { rooms = array.collect(all_rooms()):pluck("jid"):sort(); }; |
6247
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
528 end, function(fields, errors) |
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
529 if errors then |
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
530 local errmsg = {}; |
7086
6cc7c9da29ed
MUC: Rename variables to please luacheck
Kim Alvefur <zash@zash.se>
parents:
6800
diff
changeset
|
531 for field, err in pairs(errors) do |
6cc7c9da29ed
MUC: Rename variables to please luacheck
Kim Alvefur <zash@zash.se>
parents:
6800
diff
changeset
|
532 errmsg[#errmsg + 1] = field .. ": " .. err; |
6247
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
533 end |
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
534 return { status = "completed", error = { message = t_concat(errmsg, "\n") } }; |
5692
24e7e58155d8
mod_muc: Add Ad-Hoc command to destroy MUC rooms
Florian Zeitz <florob@babelmonkeys.de>
parents:
5691
diff
changeset
|
535 end |
6247
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
536 for _, room in ipairs(fields.rooms) do |
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
537 get_room_from_jid(room):destroy(); |
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
538 end |
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
539 return { status = "completed", info = "The following rooms were destroyed:\n"..t_concat(fields.rooms, "\n") }; |
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
540 end); |
9081
ce57c69a20e2
MUC: Split long lines [luacheck strict]
Kim Alvefur <zash@zash.se>
parents:
9079
diff
changeset
|
541 local destroy_rooms_desc = adhoc_new("Destroy Rooms", |
ce57c69a20e2
MUC: Split long lines [luacheck strict]
Kim Alvefur <zash@zash.se>
parents:
9079
diff
changeset
|
542 "http://prosody.im/protocol/muc#destroy", destroy_rooms_handler, "admin"); |
5692
24e7e58155d8
mod_muc: Add Ad-Hoc command to destroy MUC rooms
Florian Zeitz <florob@babelmonkeys.de>
parents:
5691
diff
changeset
|
543 |
6247
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
544 module:provides("adhoc", destroy_rooms_desc); |
10698
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
545 |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
546 |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
547 local set_affiliation_layout = dataforms_new { |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
548 -- FIXME wordsmith title, instructions, labels etc |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
549 title = "Set affiliation"; |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
550 |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
551 { name = "FORM_TYPE", type = "hidden", value = "http://prosody.im/protocol/muc#set-affiliation" }; |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
552 { name = "room", type = "jid-single", required = true, label = "Room"}; |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
553 { name = "jid", type = "jid-single", required = true, label = "JID"}; |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
554 { name = "affiliation", type = "list-single", required = true, label = "Affiliation", |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
555 options = { "owner"; "admin"; "member"; "none"; "outcast"; }, |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
556 }; |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
557 { name = "reason", type = "text-single", "Reason", } |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
558 }; |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
559 |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
560 local set_affiliation_handler = adhoc_simple(set_affiliation_layout, function (fields, errors) |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
561 if errors then |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
562 local errmsg = {}; |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
563 for field, err in pairs(errors) do |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
564 errmsg[#errmsg + 1] = field .. ": " .. err; |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
565 end |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
566 return { status = "completed", error = { message = t_concat(errmsg, "\n") } }; |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
567 end |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
568 |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
569 local room = get_room_from_jid(fields.room); |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
570 if not room then |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
571 return { status = "canceled", error = { message = "No such room"; }; }; |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
572 end |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
573 local ok, err, condition = room:set_affiliation(true, fields.jid, fields.affiliation, fields.reason); |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
574 |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
575 if not ok then |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
576 return { status = "canceled", error = { message = "Affiliation change failed: "..err..":"..condition; }; }; |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
577 end |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
578 |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
579 return { status = "completed", info = "Affiliation updated", |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
580 }; |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
581 end); |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
582 |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
583 local set_affiliation_desc = adhoc_new("Set affiliation in room", |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
584 "http://prosody.im/protocol/muc#set-affiliation", set_affiliation_handler, "admin"); |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
585 |
e4034f6668a5
MUC: Add ad-hoc command setting affiliation in a room (fixes #1174)
Kim Alvefur <zash@zash.se>
parents:
10693
diff
changeset
|
586 module:provides("adhoc", set_affiliation_desc); |
6247
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
587 end |