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