Add a config to not send out device list updates for specific users (#16909)

List of users not to send out device list updates for when they register
new devices. This is useful to handle bot accounts.

This is undocumented as its mostly a hack to test on matrix.org.

Note: This will still send out device list updates if the device is
later updated, e.g. end to end keys are added.
This commit is contained in:
Erik Johnston 2024-02-13 13:23:03 +00:00 committed by GitHub
parent 79e31e8527
commit 01910b981f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 20 additions and 2 deletions

1
changelog.d/16909.misc Normal file
View File

@ -0,0 +1 @@
Add experimental config option to not send device list updates for specific users.

View File

@ -237,6 +237,14 @@ class RegistrationConfig(Config):
self.inhibit_user_in_use_error = config.get("inhibit_user_in_use_error", False) self.inhibit_user_in_use_error = config.get("inhibit_user_in_use_error", False)
# List of user IDs not to send out device list updates for when they
# register new devices. This is useful to handle bot accounts.
#
# Note: This will still send out device list updates if the device is
# later updated, e.g. end to end keys are added.
dont_notify_new_devices_for = config.get("dont_notify_new_devices_for", [])
self.dont_notify_new_devices_for = frozenset(dont_notify_new_devices_for)
def generate_config_section( def generate_config_section(
self, generate_secrets: bool = False, **kwargs: Any self, generate_secrets: bool = False, **kwargs: Any
) -> str: ) -> str:

View File

@ -429,6 +429,10 @@ class DeviceHandler(DeviceWorkerHandler):
self._storage_controllers = hs.get_storage_controllers() self._storage_controllers = hs.get_storage_controllers()
self.db_pool = hs.get_datastores().main.db_pool self.db_pool = hs.get_datastores().main.db_pool
self._dont_notify_new_devices_for = (
hs.config.registration.dont_notify_new_devices_for
)
self.device_list_updater = DeviceListUpdater(hs, self) self.device_list_updater = DeviceListUpdater(hs, self)
federation_registry = hs.get_federation_registry() federation_registry = hs.get_federation_registry()
@ -505,6 +509,9 @@ class DeviceHandler(DeviceWorkerHandler):
self._check_device_name_length(initial_device_display_name) self._check_device_name_length(initial_device_display_name)
# Check if we should send out device lists updates for this new device.
notify = user_id not in self._dont_notify_new_devices_for
if device_id is not None: if device_id is not None:
new_device = await self.store.store_device( new_device = await self.store.store_device(
user_id=user_id, user_id=user_id,
@ -514,6 +521,7 @@ class DeviceHandler(DeviceWorkerHandler):
auth_provider_session_id=auth_provider_session_id, auth_provider_session_id=auth_provider_session_id,
) )
if new_device: if new_device:
if notify:
await self.notify_device_update(user_id, [device_id]) await self.notify_device_update(user_id, [device_id])
return device_id return device_id
@ -530,6 +538,7 @@ class DeviceHandler(DeviceWorkerHandler):
auth_provider_session_id=auth_provider_session_id, auth_provider_session_id=auth_provider_session_id,
) )
if new_device: if new_device:
if notify:
await self.notify_device_update(user_id, [new_device_id]) await self.notify_device_update(user_id, [new_device_id])
return new_device_id return new_device_id
attempts += 1 attempts += 1