plugins/muc/hidden.lib.lua
author Kim Alvefur <zash@zash.se>
Mon, 12 Dec 2022 07:07:13 +0100
branch0.12
changeset 12803 3784a8ce0596
parent 9056 ea9e1f8f3013
child 12646 9061f9621330
permissions -rw-r--r--
Merge 0.11->0.12
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
9056
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: 9038
diff changeset
    10
local restrict_public = not module:get_option_boolean("muc_room_allow_public", true);
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: 9038
diff changeset
    11
local um_is_admin = require "core.usermanager".is_admin;
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: 9038
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)
9056
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: 9038
diff changeset
    25
	if restrict_public and not um_is_admin(event.actor, module.host) then
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: 9038
diff changeset
    26
		-- Don't show option if public rooms are restricted and user is not admin of this host
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: 9038
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: 9038
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";
9038
173c0e16e704 MUC: Add sections in room config form
Matthew Wild <mwild1@gmail.com>
parents: 9037
diff changeset
    32
		label = "Include room information in public lists";
9037
1c709e3d2e5e MUC: Improve labels of all config form items
Matthew Wild <mwild1@gmail.com>
parents: 7404
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
	});
9038
173c0e16e704 MUC: Add sections in room config form
Matthew Wild <mwild1@gmail.com>
parents: 9037
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
6994
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)
9056
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: 9038
diff changeset
    39
	if restrict_public and not um_is_admin(event.actor, module.host) then
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: 9038
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: 9038
diff changeset
    41
	end
6994
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
};