# HG changeset patch # User Matthew Wild # Date 1531825048 -3600 # Node ID ea9e1f8f3013055a590d5bbdd970b3c0a932a7e6 # Parent 5017e43ccc395cd1ca266a9d15b9fdac4a0e60fd MUC: Allow restricting public/persistent room options to service admins (muc_room_allow_public/muc_room_allow_persistent) diff -r 5017e43ccc39 -r ea9e1f8f3013 plugins/muc/hidden.lib.lua --- a/plugins/muc/hidden.lib.lua Tue Jul 17 11:54:02 2018 +0100 +++ b/plugins/muc/hidden.lib.lua Tue Jul 17 11:57:28 2018 +0100 @@ -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 @@ 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 @@ 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 -r 5017e43ccc39 -r ea9e1f8f3013 plugins/muc/persistent.lib.lua --- a/plugins/muc/persistent.lib.lua Tue Jul 17 11:54:02 2018 +0100 +++ b/plugins/muc/persistent.lib.lua Tue Jul 17 11:57:28 2018 +0100 @@ -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 @@ 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 @@ 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