Software /
code /
prosody
Annotate
plugins/muc/mod_muc.lua @ 13014:06453c564141
util.startup: Add prosody.started promise to easily execute code after startup
To avoid a race where server-started fires before the promise function body is
run (on next tick), I moved server-started to fire on the next tick, which
seems sensible anyway.
Errors are logged, I'm not sure if we ought to be doing something more here.
I'm sure we'll find out.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sat, 01 Apr 2023 11:56:38 +0100 |
parent | 12977:74b9e05af71e |
child | 13170:082c7d856e61 |
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; |
12854
73db76cc6472
MUC: Add note about non-existant room method
Kim Alvefur <zash@zash.se>
parents:
12731
diff
changeset
|
92 room_mt.get_valid_broadcast_roles = presence_broadcast.get_valid_broadcast_roles; -- FIXME doesn't exist in the library |
10353
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"; |
12108
e9882c4c397f
MUC: Add method for getting the occupant id salt to allow reuse
Kim Alvefur <zash@zash.se>
parents:
12010
diff
changeset
|
95 room_mt.get_salt = occupant_id.get_room_salt; |
11215
9ce0a899ff07
MUC: Merge mod_muc_occupant_id into a sub-module (thanks pep.!)
Matthew Wild <mwild1@gmail.com>
parents:
11057
diff
changeset
|
96 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
|
97 |
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12854
diff
changeset
|
98 local jid_split = require "prosody.util.jid".split; |
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12854
diff
changeset
|
99 local jid_prep = require "prosody.util.jid".prep; |
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12854
diff
changeset
|
100 local jid_bare = require "prosody.util.jid".bare; |
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12854
diff
changeset
|
101 local st = require "prosody.util.stanza"; |
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12854
diff
changeset
|
102 local cache = require "prosody.util.cache"; |
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 |
12642
9061f9621330
Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents:
12108
diff
changeset
|
113 module:default_permissions("prosody:admin", { |
9061f9621330
Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents:
12108
diff
changeset
|
114 ":automatic-ownership"; |
9061f9621330
Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents:
12108
diff
changeset
|
115 ":create-room"; |
9061f9621330
Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents:
12108
diff
changeset
|
116 ":recreate-destroyed-room"; |
9061f9621330
Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents:
12108
diff
changeset
|
117 }); |
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
|
118 |
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
|
119 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
|
120 -- 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
|
121 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
|
122 function room_mt:get_affiliation(jid) |
12642
9061f9621330
Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents:
12108
diff
changeset
|
123 if module:may(":automatic-ownership", jid) then return "owner"; end |
6234
cc8a6ca2d7c5
plugins/muc/mod_muc: Move affiliation monkey patch into own scope
daurnimator <quae@daurnimator.com>
parents:
6222
diff
changeset
|
124 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
|
125 end |
cc8a6ca2d7c5
plugins/muc/mod_muc: Move affiliation monkey patch into own scope
daurnimator <quae@daurnimator.com>
parents:
6222
diff
changeset
|
126 |
cc8a6ca2d7c5
plugins/muc/mod_muc: Move affiliation monkey patch into own scope
daurnimator <quae@daurnimator.com>
parents:
6222
diff
changeset
|
127 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
|
128 function room_mt:set_affiliation(actor, jid, affiliation, reason, data) |
12642
9061f9621330
Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents:
12108
diff
changeset
|
129 if affiliation ~= "owner" and module:may(":automatic-ownership", 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
|
130 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
|
131 end |
5064
7a1eb302c562
MUC: Give host and server admins "owner" affiliation in all rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
5062
diff
changeset
|
132 end |
7a1eb302c562
MUC: Give host and server admins "owner" affiliation in all rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
5062
diff
changeset
|
133 |
6333
93b8438fe761
plugins/muc/mod_muc: Use map store for room persistence
daurnimator <quae@daurnimator.com>
parents:
6332
diff
changeset
|
134 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
|
135 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
|
136 local room_configs = module:open_store("config"); |
7415
cbb05b454c13
MUC: Separate config from live state
Kim Alvefur <zash@zash.se>
parents:
7414
diff
changeset
|
137 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
|
138 |
7371
d5ba0dec0c95
MUC: Cache public rooms and their names to speed up disco#items
Kim Alvefur <zash@zash.se>
parents:
7370
diff
changeset
|
139 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
|
140 |
7414
1b62c89014c4
MUC: Separate force-save parameter from save-entire-state flag
Kim Alvefur <zash@zash.se>
parents:
7411
diff
changeset
|
141 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
|
142 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
|
143 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
|
144 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
|
145 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
|
146 else |
13eee48071c8
MUC: Don't default room name to JID localpart (API breaking change)
Kim Alvefur <zash@zash.se>
parents:
10698
diff
changeset
|
147 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
|
148 end |
13eee48071c8
MUC: Don't default room name to JID localpart (API breaking change)
Kim Alvefur <zash@zash.se>
parents:
10698
diff
changeset
|
149 |
7414
1b62c89014c4
MUC: Separate force-save parameter from save-entire-state flag
Kim Alvefur <zash@zash.se>
parents:
7411
diff
changeset
|
150 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
|
151 persistent_rooms:set(nil, room.jid, true); |
7415
cbb05b454c13
MUC: Separate config from live state
Kim Alvefur <zash@zash.se>
parents:
7414
diff
changeset
|
152 local data, state = room:freeze(savestate); |
cbb05b454c13
MUC: Separate config from live state
Kim Alvefur <zash@zash.se>
parents:
7414
diff
changeset
|
153 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
|
154 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
|
155 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
|
156 persistent_rooms:set(nil, room.jid, nil); |
7415
cbb05b454c13
MUC: Separate config from live state
Kim Alvefur <zash@zash.se>
parents:
7414
diff
changeset
|
157 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
|
158 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
|
159 end |
6742
6efeb801d62f
Backed out changeset bea3862b6bde in favor of a different approach
Kim Alvefur <zash@zash.se>
parents:
6741
diff
changeset
|
160 end |
5064
7a1eb302c562
MUC: Give host and server admins "owner" affiliation in all rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
5062
diff
changeset
|
161 |
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
|
162 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
|
163 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
|
164 |
8926
89f6b2a2bec3
MUC: Measure cache hits and misses
Kim Alvefur <zash@zash.se>
parents:
8925
diff
changeset
|
165 local room_hit = module:measure("room_hit", "rate"); |
89f6b2a2bec3
MUC: Measure cache hits and misses
Kim Alvefur <zash@zash.se>
parents:
8925
diff
changeset
|
166 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
|
167 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
|
168 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
|
169 if max_rooms then |
9191
5192adc5c47f
MUC: Pass missing argument to log message
Kim Alvefur <zash@zash.se>
parents:
9093
diff
changeset
|
170 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
|
171 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
|
172 end |
8385 | 173 module:log("debug", "Evicting room %s", jid); |
8925
d367aeb9c50f
MUC: Rename eviction hit rate measure
Kim Alvefur <zash@zash.se>
parents:
8879
diff
changeset
|
174 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
|
175 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
|
176 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
|
177 else |
13eee48071c8
MUC: Don't default room name to JID localpart (API breaking change)
Kim Alvefur <zash@zash.se>
parents:
10698
diff
changeset
|
178 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
|
179 end |
8657
a804f2e75f10
MUC: Prevent room eviction on storage failure
Kim Alvefur <zash@zash.se>
parents:
8656
diff
changeset
|
180 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
|
181 if not ok then |
a804f2e75f10
MUC: Prevent room eviction on storage failure
Kim Alvefur <zash@zash.se>
parents:
8656
diff
changeset
|
182 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
|
183 return false; |
1754
67b66eec9777
MUC: Added support for room configuration forms, persistence and hidden rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
1748
diff
changeset
|
184 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
|
185 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
|
186 |
11492
6da8d9cb355d
MUC: Report number of live rooms to statsmanager
Kim Alvefur <zash@zash.se>
parents:
11215
diff
changeset
|
187 local measure_rooms_size = module:measure("live_room", "amount"); |
6da8d9cb355d
MUC: Report number of live rooms to statsmanager
Kim Alvefur <zash@zash.se>
parents:
11215
diff
changeset
|
188 module:hook_global("stats-update", function () |
6da8d9cb355d
MUC: Report number of live rooms to statsmanager
Kim Alvefur <zash@zash.se>
parents:
11215
diff
changeset
|
189 measure_rooms_size(rooms:count()); |
6da8d9cb355d
MUC: Report number of live rooms to statsmanager
Kim Alvefur <zash@zash.se>
parents:
11215
diff
changeset
|
190 end); |
6da8d9cb355d
MUC: Report number of live rooms to statsmanager
Kim Alvefur <zash@zash.se>
parents:
11215
diff
changeset
|
191 |
6333
93b8438fe761
plugins/muc/mod_muc: Use map store for room persistence
daurnimator <quae@daurnimator.com>
parents:
6332
diff
changeset
|
192 -- 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
|
193 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
|
194 local room = event.room |
9007
695904638cfa
MUC: Flag rooms being destroyed (fixes #887)
Kim Alvefur <zash@zash.se>
parents:
8977
diff
changeset
|
195 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
|
196 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
|
197 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
|
198 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
|
199 end |
7417
4c8ee8175f5e
MUC: Lower priority of hook so plugins hooks run before
Kim Alvefur <zash@zash.se>
parents:
7415
diff
changeset
|
200 end, -1); |
6333
93b8438fe761
plugins/muc/mod_muc: Use map store for room persistence
daurnimator <quae@daurnimator.com>
parents:
6332
diff
changeset
|
201 |
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
|
202 function track_room(room) |
8657
a804f2e75f10
MUC: Prevent room eviction on storage failure
Kim Alvefur <zash@zash.se>
parents:
8656
diff
changeset
|
203 if rooms:set(room.jid, room) then |
a804f2e75f10
MUC: Prevent room eviction on storage failure
Kim Alvefur <zash@zash.se>
parents:
8656
diff
changeset
|
204 -- 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
|
205 room.save = room_save; |
a804f2e75f10
MUC: Prevent room eviction on storage failure
Kim Alvefur <zash@zash.se>
parents:
8656
diff
changeset
|
206 return room; |
a804f2e75f10
MUC: Prevent room eviction on storage failure
Kim Alvefur <zash@zash.se>
parents:
8656
diff
changeset
|
207 end |
9078 | 208 -- Resource limit reached |
8657
a804f2e75f10
MUC: Prevent room eviction on storage failure
Kim Alvefur <zash@zash.se>
parents:
8656
diff
changeset
|
209 return false; |
5210
862a6fae05e7
MUC: Expose create_room(jid).
Waqas Hussain <waqas20@gmail.com>
parents:
5195
diff
changeset
|
210 end |
862a6fae05e7
MUC: Expose create_room(jid).
Waqas Hussain <waqas20@gmail.com>
parents:
5195
diff
changeset
|
211 |
8661
7fc0784491ef
MUC: Override methods on broken rooms to return internal-server-error instead
Kim Alvefur <zash@zash.se>
parents:
8660
diff
changeset
|
212 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
|
213 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
|
214 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
|
215 return true; |
1754
67b66eec9777
MUC: Added support for room configuration forms, persistence and hidden rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
1748
diff
changeset
|
216 end |
67b66eec9777
MUC: Added support for room configuration forms, persistence and hidden rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
1748
diff
changeset
|
217 |
6333
93b8438fe761
plugins/muc/mod_muc: Use map store for room persistence
daurnimator <quae@daurnimator.com>
parents:
6332
diff
changeset
|
218 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
|
219 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
|
220 local data, err = room_configs:get(node); |
4924
d8b9fe5900a2
MUC: Handle missing persistent room data.
Waqas Hussain <waqas20@gmail.com>
parents:
4528
diff
changeset
|
221 if data then |
8178
9f2a5fc9e4a5
MUC: Log debug message when restoring a room from storage
Kim Alvefur <zash@zash.se>
parents:
8026
diff
changeset
|
222 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
|
223 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
|
224 return false; |
c040c358d6c0
mod_muc: Fire event when room is (and about to be) restored
Matthew Wild <mwild1@gmail.com>
parents:
9078
diff
changeset
|
225 end |
8659
4006755c1097
MUC: Log failure to load room state
Kim Alvefur <zash@zash.se>
parents:
8658
diff
changeset
|
226 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
|
227 if not state and s_err then |
4006755c1097
MUC: Log failure to load room state
Kim Alvefur <zash@zash.se>
parents:
8658
diff
changeset
|
228 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
|
229 end |
7415
cbb05b454c13
MUC: Separate config from live state
Kim Alvefur <zash@zash.se>
parents:
7414
diff
changeset
|
230 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
|
231 if track_room(room) then |
a54bcc76cd22
MUC: Remove room state on successful restoration from disk
Kim Alvefur <zash@zash.se>
parents:
9012
diff
changeset
|
232 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
|
233 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
|
234 return room; |
a54bcc76cd22
MUC: Remove room state on successful restoration from disk
Kim Alvefur <zash@zash.se>
parents:
9012
diff
changeset
|
235 else |
a54bcc76cd22
MUC: Remove room state on successful restoration from disk
Kim Alvefur <zash@zash.se>
parents:
9012
diff
changeset
|
236 return false; |
a54bcc76cd22
MUC: Remove room state on successful restoration from disk
Kim Alvefur <zash@zash.se>
parents:
9012
diff
changeset
|
237 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
|
238 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
|
239 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
|
240 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
|
241 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
|
242 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
|
243 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
|
244 end |
1754
67b66eec9777
MUC: Added support for room configuration forms, persistence and hidden rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
1748
diff
changeset
|
245 end |
67b66eec9777
MUC: Added support for room configuration forms, persistence and hidden rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
1748
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 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
|
248 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
|
249 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
|
250 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
|
251 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
|
252 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
|
253 |
9051
68386f7b9fc9
MUC: Add some comments clarifying methods
Matthew Wild <mwild1@gmail.com>
parents:
9050
diff
changeset
|
254 -- 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
|
255 function delete_room(room) |
7650
4c2407422f71
Logging error if MUC room cache is full
Sam Whited <sam@samwhited.com>
parents:
7641
diff
changeset
|
256 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
|
257 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
|
258 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
|
259 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
|
260 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
|
261 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
|
262 |
0ebc7ff1fff5
MUC: Switch to util.cache for storing rooms, store rooms to disk on eviction
Kim Alvefur <zash@zash.se>
parents:
7367
diff
changeset
|
263 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
|
264 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
|
265 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
|
266 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
|
267 end |
1754
67b66eec9777
MUC: Added support for room configuration forms, persistence and hidden rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
1748
diff
changeset
|
268 end |
67b66eec9777
MUC: Added support for room configuration forms, persistence and hidden rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
1748
diff
changeset
|
269 |
6109
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
270 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
|
271 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
|
272 if room then |
8926
89f6b2a2bec3
MUC: Measure cache hits and misses
Kim Alvefur <zash@zash.se>
parents:
8925
diff
changeset
|
273 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
|
274 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
|
275 return room; |
6333
93b8438fe761
plugins/muc/mod_muc: Use map store for room persistence
daurnimator <quae@daurnimator.com>
parents:
6332
diff
changeset
|
276 end |
8926
89f6b2a2bec3
MUC: Measure cache hits and misses
Kim Alvefur <zash@zash.se>
parents:
8925
diff
changeset
|
277 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
|
278 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
|
279 end |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
280 |
9626
4d3ab7153153
MUC: Use defaults from config in create_room() if no config provided
Matthew Wild <mwild1@gmail.com>
parents:
9240
diff
changeset
|
281 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
|
282 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
|
283 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
|
284 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
|
285 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
|
286 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
|
287 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
|
288 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
|
289 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
|
290 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
|
291 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
|
292 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
|
293 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
|
294 end |
4d3ab7153153
MUC: Use defaults from config in create_room() if no config provided
Matthew Wild <mwild1@gmail.com>
parents:
9240
diff
changeset
|
295 |
8875
be3230b42f12
MUC: Allow passing config to public create_room API
Kim Alvefur <zash@zash.se>
parents:
8870
diff
changeset
|
296 function create_room(room_jid, config) |
10366
5611c939743a
MUC: Strictly validate room JID on creation
Kim Alvefur <zash@zash.se>
parents:
10353
diff
changeset
|
297 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
|
298 return nil, "invalid-jid"; |
5611c939743a
MUC: Strictly validate room JID on creation
Kim Alvefur <zash@zash.se>
parents:
10353
diff
changeset
|
299 end |
7641
5eef792bb2e1
MUC: Restore modern version of public create_room() function removed in dfaacf042cfe
Kim Alvefur <zash@zash.se>
parents:
7536
diff
changeset
|
300 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
|
301 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
|
302 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
|
303 end |
8875
be3230b42f12
MUC: Allow passing config to public create_room API
Kim Alvefur <zash@zash.se>
parents:
8870
diff
changeset
|
304 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
|
305 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
|
306 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
|
307 end |
7641
5eef792bb2e1
MUC: Restore modern version of public create_room() function removed in dfaacf042cfe
Kim Alvefur <zash@zash.se>
parents:
7536
diff
changeset
|
308 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
|
309 room = room; |
5eef792bb2e1
MUC: Restore modern version of public create_room() function removed in dfaacf042cfe
Kim Alvefur <zash@zash.se>
parents:
7536
diff
changeset
|
310 }); |
8877
9182398c64b9
MUC: Track rooms created via internal public API
Kim Alvefur <zash@zash.se>
parents:
8875
diff
changeset
|
311 return track_room(room); |
5210
862a6fae05e7
MUC: Expose create_room(jid).
Waqas Hussain <waqas20@gmail.com>
parents:
5195
diff
changeset
|
312 end |
862a6fae05e7
MUC: Expose create_room(jid).
Waqas Hussain <waqas20@gmail.com>
parents:
5195
diff
changeset
|
313 |
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
|
314 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
|
315 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
|
316 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
|
317 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
|
318 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
|
319 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
|
320 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
|
321 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
|
322 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
|
323 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
|
324 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
|
325 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
|
326 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
|
327 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
|
328 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
|
329 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
|
330 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
|
331 local room = restore_room(room_jid); |
8657
a804f2e75f10
MUC: Prevent room eviction on storage failure
Kim Alvefur <zash@zash.se>
parents:
8656
diff
changeset
|
332 if room then |
a804f2e75f10
MUC: Prevent room eviction on storage failure
Kim Alvefur <zash@zash.se>
parents:
8656
diff
changeset
|
333 coroutine.yield(room); |
a804f2e75f10
MUC: Prevent room eviction on storage failure
Kim Alvefur <zash@zash.se>
parents:
8656
diff
changeset
|
334 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
|
335 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
|
336 end |
6238
b2b523d21891
plugins/muc/mod_muc: Move room persistence to own block
daurnimator <quae@daurnimator.com>
parents:
6237
diff
changeset
|
337 end |
b2b523d21891
plugins/muc/mod_muc: Move room persistence to own block
daurnimator <quae@daurnimator.com>
parents:
6237
diff
changeset
|
338 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
|
339 end); |
1754
67b66eec9777
MUC: Added support for room configuration forms, persistence and hidden rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
1748
diff
changeset
|
340 end |
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
341 |
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
|
342 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
|
343 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
|
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 |
f5c43e829d93
MUC: Add new iteration methods, all_rooms/live_rooms to eventually replace each_room
Matthew Wild <mwild1@gmail.com>
parents:
9049
diff
changeset
|
346 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
|
347 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
|
348 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
|
349 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
|
350 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
|
351 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
|
352 |
5691
18a115beeebe
mod_muc: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5659
diff
changeset
|
353 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
|
354 local reply = event.reply; |
18a115beeebe
mod_muc: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5659
diff
changeset
|
355 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
|
356 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
|
357 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
|
358 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
|
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 |
d5ba0dec0c95
MUC: Cache public rooms and their names to speed up disco#items
Kim Alvefur <zash@zash.se>
parents:
7370
diff
changeset
|
361 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
|
362 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
|
363 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
|
364 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
|
365 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
|
366 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
|
367 end |
1754
67b66eec9777
MUC: Added support for room configuration forms, persistence and hidden rooms.
Waqas Hussain <waqas20@gmail.com>
parents:
1748
diff
changeset
|
368 end |
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
369 end |
5691
18a115beeebe
mod_muc: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5659
diff
changeset
|
370 end); |
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
371 |
8867
c601c834bf01
MUC: Add support for setting MUC room defaults from the config file
Kim Alvefur <zash@zash.se>
parents:
8865
diff
changeset
|
372 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
|
373 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
|
374 end, 1); |
c601c834bf01
MUC: Add support for setting MUC room defaults from the config file
Kim Alvefur <zash@zash.se>
parents:
8865
diff
changeset
|
375 |
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
|
376 module:hook("muc-room-pre-create", function(event) |
4370 | 377 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
|
378 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
|
379 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
|
380 return true; |
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
381 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
|
382 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
|
383 |
6109
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
384 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
|
385 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
|
386 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
|
387 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
|
388 end); |
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
389 |
9015
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
390 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
|
391 |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
392 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
|
393 |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
394 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
|
395 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
|
396 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
|
397 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
|
398 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
|
399 end |
9015
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 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
|
402 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
|
403 destroyed = true; |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
404 reason = event.reason; |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
405 newjid = event.newjid; |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
406 -- password? |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
407 }); |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
408 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
|
409 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
|
410 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
|
411 tombstone:save(true); |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
412 return true; |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
413 end, -10); |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
414 end |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
415 |
12731
a314f5bff9f0
mod_muc: Better map restrict_room_creation to role permissions (behaviour change)
Matthew Wild <mwild1@gmail.com>
parents:
12642
diff
changeset
|
416 local restrict_room_creation = module:get_option("restrict_room_creation"); |
a314f5bff9f0
mod_muc: Better map restrict_room_creation to role permissions (behaviour change)
Matthew Wild <mwild1@gmail.com>
parents:
12642
diff
changeset
|
417 module:default_permission(restrict_room_creation == true and "prosody:admin" or "prosody:user", ":create-room"); |
a314f5bff9f0
mod_muc: Better map restrict_room_creation to role permissions (behaviour change)
Matthew Wild <mwild1@gmail.com>
parents:
12642
diff
changeset
|
418 module:hook("muc-room-pre-create", function(event) |
a314f5bff9f0
mod_muc: Better map restrict_room_creation to role permissions (behaviour change)
Matthew Wild <mwild1@gmail.com>
parents:
12642
diff
changeset
|
419 local origin, stanza = event.origin, event.stanza; |
a314f5bff9f0
mod_muc: Better map restrict_room_creation to role permissions (behaviour change)
Matthew Wild <mwild1@gmail.com>
parents:
12642
diff
changeset
|
420 if restrict_room_creation ~= false and not module:may(":create-room", event) then |
a314f5bff9f0
mod_muc: Better map restrict_room_creation to role permissions (behaviour change)
Matthew Wild <mwild1@gmail.com>
parents:
12642
diff
changeset
|
421 origin.send(st.error_reply(stanza, "cancel", "not-allowed", "Room creation is restricted", module.host)); |
a314f5bff9f0
mod_muc: Better map restrict_room_creation to role permissions (behaviour change)
Matthew Wild <mwild1@gmail.com>
parents:
12642
diff
changeset
|
422 return true; |
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
423 end |
12731
a314f5bff9f0
mod_muc: Better map restrict_room_creation to role permissions (behaviour change)
Matthew Wild <mwild1@gmail.com>
parents:
12642
diff
changeset
|
424 end); |
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
425 |
6109
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
426 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
|
427 -- Normal room interactions |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
428 ["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
|
429 ["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
|
430 ["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
|
431 ["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
|
432 ["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
|
433 ["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
|
434 ["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
|
435 ["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
|
436 ["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
|
437 -- Host room |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
438 ["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
|
439 ["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
|
440 ["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
|
441 ["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
|
442 ["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
|
443 ["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
|
444 ["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
|
445 ["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
|
446 -- 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
|
447 ["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
|
448 ["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
|
449 ["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
|
450 } do |
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
451 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
|
452 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
|
453 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
|
454 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
|
455 |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
456 if room and room._data.destroyed then |
9081
ce57c69a20e2
MUC: Split long lines [luacheck strict]
Kim Alvefur <zash@zash.se>
parents:
9079
diff
changeset
|
457 if room._data.locked < os.time() |
12642
9061f9621330
Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents:
12108
diff
changeset
|
458 or (module:may(":recreate-destroyed-room", event) 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
|
459 -- 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
|
460 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
|
461 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
|
462 else |
c58be87e62d0
MUC: Return 'gone' error for destroyed rooms in other cases than attempted join
Kim Alvefur <zash@zash.se>
parents:
9035
diff
changeset
|
463 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
|
464 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
|
465 if room._data.newjid then |
d780c10709c1
MUC: Include redirect in 'gone' error for destroyed rooms
Kim Alvefur <zash@zash.se>
parents:
9018
diff
changeset
|
466 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
|
467 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
|
468 end |
9015
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
469 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
|
470 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
|
471 return true; |
9015
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
472 end |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
473 end |
dc606dc89f44
MUC: Add support for storing a tombstone for destroyed rooms (#1182)
Kim Alvefur <zash@zash.se>
parents:
9013
diff
changeset
|
474 |
6109
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
475 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
|
476 -- Watch presence to create rooms |
10366
5611c939743a
MUC: Strictly validate room JID on creation
Kim Alvefur <zash@zash.se>
parents:
10353
diff
changeset
|
477 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
|
478 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
|
479 return true; |
5611c939743a
MUC: Strictly validate room JID on creation
Kim Alvefur <zash@zash.se>
parents:
10353
diff
changeset
|
480 end |
9647
0f43b901c854
MUC: Move check for explicit room join earlier in room creation flow
Kim Alvefur <zash@zash.se>
parents:
9626
diff
changeset
|
481 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
|
482 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
|
483 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
|
484 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
|
485 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
|
486 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
|
487 else |
80923a1a8fe1
MUC: Don't reply to error stanzas with more error stanzas (thanks woffs)
Kim Alvefur <zash@zash.se>
parents:
7086
diff
changeset
|
488 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
|
489 end |
9221 | 490 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
|
491 origin.send(st.error_reply(stanza, "wait", "resource-constraint", nil, module.host)); |
9221 | 492 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
|
493 end |
6109
566aba0482b6
plugins/muc/mod_muc: Refactor to use new methods available
daurnimator <quae@daurnimator.com>
parents:
6091
diff
changeset
|
494 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
|
495 end, -2) |
1738
ee4a7151ed07
MUC: New basic mod_muc based on the new MUC library
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
496 end |
5062
88e198d65905
MUC: Send unavailable presence when the component or server is shutting down.
Waqas Hussain <waqas20@gmail.com>
parents:
5058
diff
changeset
|
497 |
6241
6b4ff34dc8ea
plugins/muc/mod_muc: Use module:shared instead of save/restore
daurnimator <quae@daurnimator.com>
parents:
6240
diff
changeset
|
498 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
|
499 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
|
500 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
|
501 end |
88e198d65905
MUC: Send unavailable presence when the component or server is shutting down.
Waqas Hussain <waqas20@gmail.com>
parents:
5058
diff
changeset
|
502 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
|
503 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
|
504 |
6247
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
505 do -- Ad-hoc commands |
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
506 module:depends "adhoc"; |
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
507 local t_concat = table.concat; |
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
508 local adhoc_new = module:require "adhoc".new; |
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12854
diff
changeset
|
509 local adhoc_initial = require "prosody.util.adhoc".new_initial_data_form; |
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12854
diff
changeset
|
510 local adhoc_simple = require "prosody.util.adhoc".new_simple_form; |
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12854
diff
changeset
|
511 local array = require "prosody.util.array"; |
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12854
diff
changeset
|
512 local dataforms_new = require "prosody.util.dataforms".new; |
5692
24e7e58155d8
mod_muc: Add Ad-Hoc command to destroy MUC rooms
Florian Zeitz <florob@babelmonkeys.de>
parents:
5691
diff
changeset
|
513 |
6247
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
514 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
|
515 title = "Destroy rooms"; |
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
516 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
|
517 |
6247
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
518 { 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
|
519 { 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
|
520 }; |
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 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
|
523 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
|
524 end, function(fields, errors) |
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
525 if errors then |
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
526 local errmsg = {}; |
7086
6cc7c9da29ed
MUC: Rename variables to please luacheck
Kim Alvefur <zash@zash.se>
parents:
6800
diff
changeset
|
527 for field, err in pairs(errors) do |
6cc7c9da29ed
MUC: Rename variables to please luacheck
Kim Alvefur <zash@zash.se>
parents:
6800
diff
changeset
|
528 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
|
529 end |
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
530 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
|
531 end |
12010
f995d62044fa
MUC: Allow modules a chance to act prior to room destruction
Kim Alvefur <zash@zash.se>
parents:
11492
diff
changeset
|
532 local destroyed = array(); |
f995d62044fa
MUC: Allow modules a chance to act prior to room destruction
Kim Alvefur <zash@zash.se>
parents:
11492
diff
changeset
|
533 for _, room_jid in ipairs(fields.rooms) do |
f995d62044fa
MUC: Allow modules a chance to act prior to room destruction
Kim Alvefur <zash@zash.se>
parents:
11492
diff
changeset
|
534 local room = get_room_from_jid(room_jid); |
f995d62044fa
MUC: Allow modules a chance to act prior to room destruction
Kim Alvefur <zash@zash.se>
parents:
11492
diff
changeset
|
535 if room and room:destroy() then |
f995d62044fa
MUC: Allow modules a chance to act prior to room destruction
Kim Alvefur <zash@zash.se>
parents:
11492
diff
changeset
|
536 destroyed:push(room.jid); |
f995d62044fa
MUC: Allow modules a chance to act prior to room destruction
Kim Alvefur <zash@zash.se>
parents:
11492
diff
changeset
|
537 end |
6247
851647eb6657
plugins/muc/mod_muc: Place adhoc section into own scope
daurnimator <quae@daurnimator.com>
parents:
6246
diff
changeset
|
538 end |
12010
f995d62044fa
MUC: Allow modules a chance to act prior to room destruction
Kim Alvefur <zash@zash.se>
parents:
11492
diff
changeset
|
539 return { status = "completed", info = "The following rooms were destroyed:\n"..t_concat(destroyed, "\n") }; |
6247
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 |