Always send device_one_time_keys_count (#10457)

As per comment

Fixes https://github.com/matrix-org/synapse/issues/10456
See also https://github.com/vector-im/element-android/issues/3725
This commit is contained in:
David Baker 2021-07-22 15:29:27 +01:00 committed by GitHub
parent 519ec8271f
commit 7da24b975d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 4 deletions

1
changelog.d/10457.bugfix Normal file
View file

@ -0,0 +1 @@
Always include `device_one_time_keys_count` key in `/sync` response to work around a bug in Element Android that broke encryption for new devices.

View file

@ -252,10 +252,13 @@ class SyncRestServlet(RestServlet):
if sync_result.device_lists.left: if sync_result.device_lists.left:
response["device_lists"]["left"] = list(sync_result.device_lists.left) response["device_lists"]["left"] = list(sync_result.device_lists.left)
if sync_result.device_one_time_keys_count: # We always include this because https://github.com/vector-im/element-android/issues/3725
response[ # The spec isn't terribly clear on when this can be omitted and how a client would tell
"device_one_time_keys_count" # the difference between "no keys present" and "nothing changed" in terms of whole field
] = sync_result.device_one_time_keys_count # absent / individual key type entry absent
# Corresponding synapse issue: https://github.com/matrix-org/synapse/issues/10456
response["device_one_time_keys_count"] = sync_result.device_one_time_keys_count
if sync_result.device_unused_fallback_key_types: if sync_result.device_unused_fallback_key_types:
response[ response[
"org.matrix.msc2732.device_unused_fallback_key_types" "org.matrix.msc2732.device_unused_fallback_key_types"