Skip to content

Commit

Permalink
Add a config to not send out device list updates for specific users (#…
Browse files Browse the repository at this point in the history
…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.
  • Loading branch information
erikjohnston authored Feb 13, 2024
1 parent 79e31e8 commit 01910b9
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 2 deletions.
1 change: 1 addition & 0 deletions changelog.d/16909.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add experimental config option to not send device list updates for specific users.
8 changes: 8 additions & 0 deletions synapse/config/registration.py
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,14 @@ def read_config(self, config: JsonDict, **kwargs: Any) -> None:

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(
self, generate_secrets: bool = False, **kwargs: Any
) -> str:
Expand Down
13 changes: 11 additions & 2 deletions synapse/handlers/device.py
Original file line number Diff line number Diff line change
Expand Up @@ -429,6 +429,10 @@ def __init__(self, hs: "HomeServer"):
self._storage_controllers = hs.get_storage_controllers()
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)

federation_registry = hs.get_federation_registry()
Expand Down Expand Up @@ -505,6 +509,9 @@ async def check_device_registered(

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:
new_device = await self.store.store_device(
user_id=user_id,
Expand All @@ -514,7 +521,8 @@ async def check_device_registered(
auth_provider_session_id=auth_provider_session_id,
)
if new_device:
await self.notify_device_update(user_id, [device_id])
if notify:
await self.notify_device_update(user_id, [device_id])
return device_id

# if the device id is not specified, we'll autogen one, but loop a few
Expand All @@ -530,7 +538,8 @@ async def check_device_registered(
auth_provider_session_id=auth_provider_session_id,
)
if new_device:
await self.notify_device_update(user_id, [new_device_id])
if notify:
await self.notify_device_update(user_id, [new_device_id])
return new_device_id
attempts += 1

Expand Down

0 comments on commit 01910b9

Please sign in to comment.