Annotate

plugins/muc/hidden.lib.lua @ 13248:db433ed3135c

Merge 0.12->trunk
author Kim Alvefur <zash@zash.se>
date Tue, 25 Jul 2023 12:35:11 +0200
parent 13170:082c7d856e61
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6225
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
1 -- Prosody IM
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
2 -- Copyright (C) 2008-2010 Matthew Wild
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
3 -- Copyright (C) 2008-2010 Waqas Hussain
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
4 -- Copyright (C) 2014 Daurnimator
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
5 --
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
6 -- This project is MIT/X11 licensed. Please see the
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
7 -- COPYING file in the source package for more information.
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
8 --
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
9
9053
ea9e1f8f3013 MUC: Allow restricting public/persistent room options to service admins (muc_room_allow_public/muc_room_allow_persistent)
Matthew Wild <mwild1@gmail.com>
parents: 9035
diff changeset
10 local restrict_public = not module:get_option_boolean("muc_room_allow_public", true);
13170
082c7d856e61 core, plugins: Split prosody:user role into prosody:{guest,registered,member}
Matthew Wild <mwild1@gmail.com>
parents: 12642
diff changeset
11 module:default_permission(restrict_public and "prosody:admin" or "prosody:registered", ":create-public-room");
9053
ea9e1f8f3013 MUC: Allow restricting public/persistent room options to service admins (muc_room_allow_public/muc_room_allow_persistent)
Matthew Wild <mwild1@gmail.com>
parents: 9035
diff changeset
12
6225
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
13 local function get_hidden(room)
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
14 return room._data.hidden;
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
15 end
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
16
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
17 local function set_hidden(room, hidden)
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
18 hidden = hidden and true or nil;
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
19 if get_hidden(room) == hidden then return false; end
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
20 room._data.hidden = hidden;
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
21 return true;
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
22 end
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
23
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
24 module:hook("muc-config-form", function(event)
12642
9061f9621330 Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents: 9053
diff changeset
25 if not module:may(":create-public-room", event.actor) then
9061f9621330 Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents: 9053
diff changeset
26 -- Hide config option if this user is not allowed to create public rooms
9053
ea9e1f8f3013 MUC: Allow restricting public/persistent room options to service admins (muc_room_allow_public/muc_room_allow_persistent)
Matthew Wild <mwild1@gmail.com>
parents: 9035
diff changeset
27 return;
ea9e1f8f3013 MUC: Allow restricting public/persistent room options to service admins (muc_room_allow_public/muc_room_allow_persistent)
Matthew Wild <mwild1@gmail.com>
parents: 9035
diff changeset
28 end
6225
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
29 table.insert(event.form, {
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
30 name = "muc#roomconfig_publicroom";
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
31 type = "boolean";
9035
173c0e16e704 MUC: Add sections in room config form
Matthew Wild <mwild1@gmail.com>
parents: 9034
diff changeset
32 label = "Include room information in public lists";
9034
1c709e3d2e5e MUC: Improve labels of all config form items
Matthew Wild <mwild1@gmail.com>
parents: 7401
diff changeset
33 desc = "Enable this to allow people to find the room";
6225
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
34 value = not get_hidden(event.room);
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
35 });
9035
173c0e16e704 MUC: Add sections in room config form
Matthew Wild <mwild1@gmail.com>
parents: 9034
diff changeset
36 end, 100-9);
6225
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
37
6991
84e01dbb739e MUC: Update all config form handlers to take advantage of the new per-option events
Matthew Wild <mwild1@gmail.com>
parents: 6225
diff changeset
38 module:hook("muc-config-submitted/muc#roomconfig_publicroom", function(event)
12642
9061f9621330 Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents: 9053
diff changeset
39 if not module:may(":create-public-room", event.actor) then
9053
ea9e1f8f3013 MUC: Allow restricting public/persistent room options to service admins (muc_room_allow_public/muc_room_allow_persistent)
Matthew Wild <mwild1@gmail.com>
parents: 9035
diff changeset
40 return; -- Not allowed
ea9e1f8f3013 MUC: Allow restricting public/persistent room options to service admins (muc_room_allow_public/muc_room_allow_persistent)
Matthew Wild <mwild1@gmail.com>
parents: 9035
diff changeset
41 end
6991
84e01dbb739e MUC: Update all config form handlers to take advantage of the new per-option events
Matthew Wild <mwild1@gmail.com>
parents: 6225
diff changeset
42 if set_hidden(event.room, not event.value) then
6225
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
43 event.status_codes["104"] = true;
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
44 end
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
45 end);
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
46
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
47 module:hook("muc-disco#info", function(event)
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
48 event.reply:tag("feature", {var = get_hidden(event.room) and "muc_hidden" or "muc_public"}):up();
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
49 end);
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
50
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
51 return {
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
52 get = get_hidden;
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
53 set = set_hidden;
12537f1c1fec plugins/muc: Move 'hidden' ('public') code to own file
daurnimator <quae@daurnimator.com>
parents:
diff changeset
54 };