From 952f3697da404177715062bb8649db3b815ea8e9 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Tue, 17 Jul 2018 11:57:28 +0100 Subject: MUC: Allow restricting public/persistent room options to service admins (muc_room_allow_public/muc_room_allow_persistent) --- plugins/muc/hidden.lib.lua | 10 ++++++++++ plugins/muc/persistent.lib.lua | 10 ++++++++++ 2 files changed, 20 insertions(+) (limited to 'plugins') diff --git a/plugins/muc/hidden.lib.lua b/plugins/muc/hidden.lib.lua index acb8c0fc..153df21a 100644 --- a/plugins/muc/hidden.lib.lua +++ b/plugins/muc/hidden.lib.lua @@ -7,6 +7,9 @@ -- COPYING file in the source package for more information. -- +local restrict_public = not module:get_option_boolean("muc_room_allow_public", true); +local um_is_admin = require "core.usermanager".is_admin; + local function get_hidden(room) return room._data.hidden; end @@ -19,6 +22,10 @@ local function set_hidden(room, hidden) end module:hook("muc-config-form", function(event) + if restrict_public and not um_is_admin(event.actor, module.host) then + -- Don't show option if public rooms are restricted and user is not admin of this host + return; + end table.insert(event.form, { name = "muc#roomconfig_publicroom"; type = "boolean"; @@ -29,6 +36,9 @@ module:hook("muc-config-form", function(event) end, 100-9); module:hook("muc-config-submitted/muc#roomconfig_publicroom", function(event) + if restrict_public and not um_is_admin(event.actor, module.host) then + return; -- Not allowed + end if set_hidden(event.room, not event.value) then event.status_codes["104"] = true; end diff --git a/plugins/muc/persistent.lib.lua b/plugins/muc/persistent.lib.lua index aa2cdf26..c3b16ea4 100644 --- a/plugins/muc/persistent.lib.lua +++ b/plugins/muc/persistent.lib.lua @@ -7,6 +7,9 @@ -- COPYING file in the source package for more information. -- +local restrict_persistent = not module:get_option_boolean("muc_room_allow_persistent", true); +local um_is_admin = require "core.usermanager".is_admin; + local function get_persistent(room) return room._data.persistent; end @@ -19,6 +22,10 @@ local function set_persistent(room, persistent) end module:hook("muc-config-form", function(event) + if restrict_persistent and not um_is_admin(event.actor, module.host) then + -- Don't show option if hidden rooms are restricted and user is not admin of this host + return; + end table.insert(event.form, { name = "muc#roomconfig_persistentroom"; type = "boolean"; @@ -29,6 +36,9 @@ module:hook("muc-config-form", function(event) end, 100-5); module:hook("muc-config-submitted/muc#roomconfig_persistentroom", function(event) + if restrict_persistent and not um_is_admin(event.actor, module.host) then + return; -- Not allowed + end if set_persistent(event.room, event.value) then event.status_codes["104"] = true; end -- cgit v1.2.3