mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-11-13 08:10:42 -05:00
Always communicate device OTK counts to clients (#10485)
Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
This commit is contained in:
parent
92a882254b
commit
74d09a43d9
5 changed files with 36 additions and 6 deletions
|
|
@ -127,6 +127,14 @@ class ToDeviceEventTypes:
|
|||
RoomKeyRequest = "m.room_key_request"
|
||||
|
||||
|
||||
class DeviceKeyAlgorithms:
|
||||
"""Spec'd algorithms for the generation of per-device keys"""
|
||||
|
||||
ED25519 = "ed25519"
|
||||
CURVE25519 = "curve25519"
|
||||
SIGNED_CURVE25519 = "signed_curve25519"
|
||||
|
||||
|
||||
class EduTypes:
|
||||
Presence = "m.presence"
|
||||
|
||||
|
|
|
|||
|
|
@ -1093,6 +1093,10 @@ class SyncHandler:
|
|||
one_time_key_counts: JsonDict = {}
|
||||
unused_fallback_key_types: List[str] = []
|
||||
if device_id:
|
||||
# TODO: We should have a way to let clients differentiate between the states of:
|
||||
# * no change in OTK count since the provided since token
|
||||
# * the server has zero OTKs left for this device
|
||||
# Spec issue: https://github.com/matrix-org/matrix-doc/issues/3298
|
||||
one_time_key_counts = await self.store.count_e2e_one_time_keys(
|
||||
user_id, device_id
|
||||
)
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ from canonicaljson import encode_canonical_json
|
|||
|
||||
from twisted.enterprise.adbapi import Connection
|
||||
|
||||
from synapse.api.constants import DeviceKeyAlgorithms
|
||||
from synapse.logging.opentracing import log_kv, set_tag, trace
|
||||
from synapse.storage._base import SQLBaseStore, db_to_json
|
||||
from synapse.storage.database import DatabasePool, make_in_list_sql_clause
|
||||
|
|
@ -381,9 +382,15 @@ class EndToEndKeyWorkerStore(EndToEndKeyBackgroundStore):
|
|||
" GROUP BY algorithm"
|
||||
)
|
||||
txn.execute(sql, (user_id, device_id))
|
||||
result = {}
|
||||
|
||||
# Initially set the key count to 0. This ensures that the client will always
|
||||
# receive *some count*, even if it's 0.
|
||||
result = {DeviceKeyAlgorithms.SIGNED_CURVE25519: 0}
|
||||
|
||||
# Override entries with the count of any keys we pulled from the database
|
||||
for algorithm, key_count in txn:
|
||||
result[algorithm] = key_count
|
||||
|
||||
return result
|
||||
|
||||
return await self.db_pool.runInteraction(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue