Compare commits

...

3 Commits

Author SHA1 Message Date
Matthew Hodgson
ba33466939 update sample config 2022-04-23 15:39:41 +01:00
Matthew Hodgson
8cb9abe8e7 changelog 2022-04-23 15:36:41 +01:00
Matthew Hodgson
0a6f1d1ac2 add default_power_level_content_override config option.
Lets you override the default power levels for rooms created on this server, per
room creation preset.

Useful if you know that your users need special permissions in rooms
that they create (e.g. to send particular types of state events without
needing an elevated power level).  This takes the same shape as the
power_level_content_override parameter in the /createRoom API, but
is applied before that parameter.

This is something of a workaround in the absence of MSC3779 or MSC3761.
2022-04-23 15:25:25 +01:00
4 changed files with 58 additions and 0 deletions

View File

@@ -0,0 +1 @@
Add default_power_level_content_override config option.

View File

@@ -2449,6 +2449,22 @@ push:
#
#encryption_enabled_by_default_for_room_type: invite
# Override the default power levels for rooms created on this server, per
# room creation preset.
#
# Useful if you know that your users need special permissions in rooms
# that they create (e.g. to send particular types of state events without
# needing an elevated power level). This takes the same shape as the
# `power_level_content_override` parameter in the /createRoom API, but
# is applied before that parameter.
#
# This is something of a workaround in the absence of MSC3779 or MSC3761.
#
#default_power_level_content_override:
# private_chat: null
# trusted_private_chat: null
# public_chat: null
# Uncomment to allow non-server-admin users to create groups on this server
#

View File

@@ -63,6 +63,19 @@ class RoomConfig(Config):
"Invalid value for encryption_enabled_by_default_for_room_type"
)
self.default_power_level_content_override = config.get(
"default_power_level_content_override",
None,
)
if self.default_power_level_content_override is not None:
for preset in self.default_power_level_content_override:
if preset not in vars(RoomCreationPreset).values():
raise ConfigError(
"Unrecognised room preset %s in default_power_level_content_override"
% preset
)
# We validate the actual overrides when we try to apply them.
def generate_config_section(self, **kwargs: Any) -> str:
return """\
## Rooms ##
@@ -83,4 +96,20 @@ class RoomConfig(Config):
# will also not affect rooms created by other servers.
#
#encryption_enabled_by_default_for_room_type: invite
# Override the default power levels for rooms created on this server, per
# room creation preset.
#
# Useful if you know that your users need special permissions in rooms
# that they create (e.g. to send particular types of state events without
# needing an elevated power level). This takes the same shape as the
# `power_level_content_override` parameter in the /createRoom API, but
# is applied before that parameter.
#
# This is something of a workaround in the absence of MSC3779 or MSC3761.
#
#default_power_level_content_override:
# private_chat: null
# trusted_private_chat: null
# public_chat: null
"""

View File

@@ -1046,6 +1046,18 @@ class RoomCreationHandler:
if power_level_content_override:
power_level_content.update(power_level_content_override)
# override default_power_level_content_override for this room preset, if any
default_power_level_content_override = (
self.config.room.default_power_level_content_override
)
if (
default_power_level_content_override
and default_power_level_content_override.get(preset_config)
):
power_level_content.update(
default_power_level_content_override.get(preset_config)
)
last_sent_stream_id = await send(
etype=EventTypes.PowerLevels, content=power_level_content
)