Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Add support for putting fed user query API on workers (#6873)
Browse files Browse the repository at this point in the history
  • Loading branch information
erikjohnston authored Feb 7, 2020
1 parent e1d8589 commit 21db35f
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 21 deletions.
1 change: 1 addition & 0 deletions changelog.d/6873.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add ability to route federation user device queries to workers.
1 change: 1 addition & 0 deletions docs/workers.md
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,7 @@ endpoints matching the following regular expressions:
^/_matrix/federation/v1/query_auth/
^/_matrix/federation/v1/event_auth/
^/_matrix/federation/v1/exchange_third_party_invite/
^/_matrix/federation/v1/user/devices/
^/_matrix/federation/v1/send/
^/_matrix/federation/v1/get_groups_publicised$
^/_matrix/key/v2/query
Expand Down
2 changes: 2 additions & 0 deletions synapse/app/federation_reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
from synapse.replication.slave.storage._base import BaseSlavedStore
from synapse.replication.slave.storage.account_data import SlavedAccountDataStore
from synapse.replication.slave.storage.appservice import SlavedApplicationServiceStore
from synapse.replication.slave.storage.devices import SlavedDeviceStore
from synapse.replication.slave.storage.directory import DirectoryStore
from synapse.replication.slave.storage.events import SlavedEventStore
from synapse.replication.slave.storage.groups import SlavedGroupServerStore
Expand Down Expand Up @@ -68,6 +69,7 @@ class FederationReaderSlavedStore(
SlavedKeyStore,
SlavedRegistrationStore,
SlavedGroupServerStore,
SlavedDeviceStore,
RoomStore,
DirectoryStore,
SlavedTransactionStore,
Expand Down
7 changes: 5 additions & 2 deletions synapse/federation/federation_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,8 @@ def __init__(self, hs):
self.handler = hs.get_handlers().federation_handler
self.state = hs.get_state_handler()

self.device_handler = hs.get_device_handler()

self._server_linearizer = Linearizer("fed_server")
self._transaction_linearizer = Linearizer("fed_txn_handler")

Expand Down Expand Up @@ -523,8 +525,9 @@ async def on_query_auth_request(self, origin, content, room_id, event_id):
def on_query_client_keys(self, origin, content):
return self.on_query_request("client_keys", content)

def on_query_user_devices(self, origin, user_id):
return self.on_query_request("user_devices", user_id)
async def on_query_user_devices(self, origin: str, user_id: str):
keys = await self.device_handler.on_federation_query_user_devices(user_id)
return 200, keys

@trace
async def on_claim_client_keys(self, origin, content):
Expand Down
35 changes: 16 additions & 19 deletions synapse/handlers/device.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,22 @@ def get_user_ids_changed(self, user_id, from_token):

return result

@defer.inlineCallbacks
def on_federation_query_user_devices(self, user_id):
stream_id, devices = yield self.store.get_devices_with_keys_by_user(user_id)
master_key = yield self.store.get_e2e_cross_signing_key(user_id, "master")
self_signing_key = yield self.store.get_e2e_cross_signing_key(
user_id, "self_signing"
)

return {
"user_id": user_id,
"stream_id": stream_id,
"devices": devices,
"master_key": master_key,
"self_signing_key": self_signing_key,
}


class DeviceHandler(DeviceWorkerHandler):
def __init__(self, hs):
Expand All @@ -239,9 +255,6 @@ def __init__(self, hs):
federation_registry.register_edu_handler(
"m.device_list_update", self.device_list_updater.incoming_device_list_update
)
federation_registry.register_query_handler(
"user_devices", self.on_federation_query_user_devices
)

hs.get_distributor().observe("user_left_room", self.user_left_room)

Expand Down Expand Up @@ -456,22 +469,6 @@ def notify_user_signature_update(self, from_user_id, user_ids):

self.notifier.on_new_event("device_list_key", position, users=[from_user_id])

@defer.inlineCallbacks
def on_federation_query_user_devices(self, user_id):
stream_id, devices = yield self.store.get_devices_with_keys_by_user(user_id)
master_key = yield self.store.get_e2e_cross_signing_key(user_id, "master")
self_signing_key = yield self.store.get_e2e_cross_signing_key(
user_id, "self_signing"
)

return {
"user_id": user_id,
"stream_id": stream_id,
"devices": devices,
"master_key": master_key,
"self_signing_key": self_signing_key,
}

@defer.inlineCallbacks
def user_left_room(self, user, room_id):
user_id = user.to_string()
Expand Down

0 comments on commit 21db35f

Please sign in to comment.