mirror of
https://mau.dev/maunium/synapse.git
synced 2024-10-01 01:36:05 -04:00
Merge branch 'release-v1.20.0' into develop
This commit is contained in:
commit
77b4711bc2
1
changelog.d/8234.misc
Normal file
1
changelog.d/8234.misc
Normal file
@ -0,0 +1 @@
|
|||||||
|
Refactor queries for device keys and cross-signatures.
|
1
changelog.d/8252.feature
Normal file
1
changelog.d/8252.feature
Normal file
@ -0,0 +1 @@
|
|||||||
|
Use the default template file when its equivalent is not found in a custom template directory.
|
1
changelog.d/8254.feature
Normal file
1
changelog.d/8254.feature
Normal file
@ -0,0 +1 @@
|
|||||||
|
Add unread messages count to sync responses, as specified in [MSC2654](https://github.com/matrix-org/matrix-doc/pull/2654).
|
@ -171,7 +171,7 @@ class SAML2Config(Config):
|
|||||||
|
|
||||||
self.saml2_error_html_template = self.read_templates(
|
self.saml2_error_html_template = self.read_templates(
|
||||||
["saml_error.html"], saml2_config.get("template_dir")
|
["saml_error.html"], saml2_config.get("template_dir")
|
||||||
)
|
)[0]
|
||||||
|
|
||||||
def _default_saml_config_dict(
|
def _default_saml_config_dict(
|
||||||
self, required_attributes: set, optional_attributes: set
|
self, required_attributes: set, optional_attributes: set
|
||||||
|
@ -36,7 +36,7 @@ async def get_badge_count(store, user_id):
|
|||||||
)
|
)
|
||||||
# return one badge count per conversation, as count per
|
# return one badge count per conversation, as count per
|
||||||
# message is so noisy as to be almost useless
|
# message is so noisy as to be almost useless
|
||||||
badge += 1 if notifs["unread_count"] else 0
|
badge += 1 if notifs["notify_count"] else 0
|
||||||
return badge
|
return badge
|
||||||
|
|
||||||
|
|
||||||
|
@ -291,15 +291,9 @@ class DeviceWorkerStore(SQLBaseStore):
|
|||||||
prev_id = stream_id
|
prev_id = stream_id
|
||||||
|
|
||||||
if device is not None:
|
if device is not None:
|
||||||
key_json = device.key_json
|
keys = device.keys
|
||||||
if key_json:
|
if keys:
|
||||||
result["keys"] = db_to_json(key_json)
|
result["keys"] = keys
|
||||||
|
|
||||||
if device.signatures:
|
|
||||||
for sig_user_id, sigs in device.signatures.items():
|
|
||||||
result["keys"].setdefault("signatures", {}).setdefault(
|
|
||||||
sig_user_id, {}
|
|
||||||
).update(sigs)
|
|
||||||
|
|
||||||
device_display_name = device.display_name
|
device_display_name = device.display_name
|
||||||
if device_display_name:
|
if device_display_name:
|
||||||
|
@ -43,12 +43,8 @@ class DeviceKeyLookupResult:
|
|||||||
|
|
||||||
# the key data from e2e_device_keys_json. Typically includes fields like
|
# the key data from e2e_device_keys_json. Typically includes fields like
|
||||||
# "algorithm", "keys" (including the curve25519 identity key and the ed25519 signing
|
# "algorithm", "keys" (including the curve25519 identity key and the ed25519 signing
|
||||||
# key) and "signatures" (a signature of the structure by the ed25519 key)
|
# key) and "signatures" (a map from (user id) to (key id/device_id) to signature.)
|
||||||
key_json = attr.ib(type=Optional[str])
|
keys = attr.ib(type=Optional[JsonDict])
|
||||||
|
|
||||||
# cross-signing sigs on this device.
|
|
||||||
# dict from (signing user_id)->(signing device_id)->sig
|
|
||||||
signatures = attr.ib(type=Optional[Dict[str, Dict[str, str]]], factory=dict)
|
|
||||||
|
|
||||||
|
|
||||||
class EndToEndKeyWorkerStore(SQLBaseStore):
|
class EndToEndKeyWorkerStore(SQLBaseStore):
|
||||||
@ -70,15 +66,9 @@ class EndToEndKeyWorkerStore(SQLBaseStore):
|
|||||||
for device_id, device in user_devices.items():
|
for device_id, device in user_devices.items():
|
||||||
result = {"device_id": device_id}
|
result = {"device_id": device_id}
|
||||||
|
|
||||||
key_json = device.key_json
|
keys = device.keys
|
||||||
if key_json:
|
if keys:
|
||||||
result["keys"] = db_to_json(key_json)
|
result["keys"] = keys
|
||||||
|
|
||||||
if device.signatures:
|
|
||||||
for sig_user_id, sigs in device.signatures.items():
|
|
||||||
result["keys"].setdefault("signatures", {}).setdefault(
|
|
||||||
sig_user_id, {}
|
|
||||||
).update(sigs)
|
|
||||||
|
|
||||||
device_display_name = device.display_name
|
device_display_name = device.display_name
|
||||||
if device_display_name:
|
if device_display_name:
|
||||||
@ -114,16 +104,11 @@ class EndToEndKeyWorkerStore(SQLBaseStore):
|
|||||||
for user_id, device_keys in results.items():
|
for user_id, device_keys in results.items():
|
||||||
rv[user_id] = {}
|
rv[user_id] = {}
|
||||||
for device_id, device_info in device_keys.items():
|
for device_id, device_info in device_keys.items():
|
||||||
r = db_to_json(device_info.key_json)
|
r = device_info.keys
|
||||||
r["unsigned"] = {}
|
r["unsigned"] = {}
|
||||||
display_name = device_info.display_name
|
display_name = device_info.display_name
|
||||||
if display_name is not None:
|
if display_name is not None:
|
||||||
r["unsigned"]["device_display_name"] = display_name
|
r["unsigned"]["device_display_name"] = display_name
|
||||||
if device_info.signatures:
|
|
||||||
for sig_user_id, sigs in device_info.signatures.items():
|
|
||||||
r.setdefault("signatures", {}).setdefault(
|
|
||||||
sig_user_id, {}
|
|
||||||
).update(sigs)
|
|
||||||
rv[user_id][device_id] = r
|
rv[user_id][device_id] = r
|
||||||
|
|
||||||
return rv
|
return rv
|
||||||
@ -140,6 +125,9 @@ class EndToEndKeyWorkerStore(SQLBaseStore):
|
|||||||
Any cross-signatures made on the keys by the owner of the device are also
|
Any cross-signatures made on the keys by the owner of the device are also
|
||||||
included.
|
included.
|
||||||
|
|
||||||
|
The cross-signatures are added to the `signatures` field within the `keys`
|
||||||
|
object in the response.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
query_list: List of pairs of user_ids and device_ids. Device id can be None
|
query_list: List of pairs of user_ids and device_ids. Device id can be None
|
||||||
to indicate "all devices for this user"
|
to indicate "all devices for this user"
|
||||||
@ -170,7 +158,7 @@ class EndToEndKeyWorkerStore(SQLBaseStore):
|
|||||||
(user_id, device_id)
|
(user_id, device_id)
|
||||||
for user_id, dev in result.items()
|
for user_id, dev in result.items()
|
||||||
for device_id, d in dev.items()
|
for device_id, d in dev.items()
|
||||||
if d is not None
|
if d is not None and d.keys is not None
|
||||||
)
|
)
|
||||||
|
|
||||||
for batch in batch_iter(signature_query, 50):
|
for batch in batch_iter(signature_query, 50):
|
||||||
@ -183,8 +171,9 @@ class EndToEndKeyWorkerStore(SQLBaseStore):
|
|||||||
# add each cross-signing signature to the correct device in the result dict.
|
# add each cross-signing signature to the correct device in the result dict.
|
||||||
for (user_id, key_id, device_id, signature) in cross_sigs_result:
|
for (user_id, key_id, device_id, signature) in cross_sigs_result:
|
||||||
target_device_result = result[user_id][device_id]
|
target_device_result = result[user_id][device_id]
|
||||||
target_device_signatures = target_device_result.signatures
|
target_device_signatures = target_device_result.keys.setdefault(
|
||||||
|
"signatures", {}
|
||||||
|
)
|
||||||
signing_user_signatures = target_device_signatures.setdefault(
|
signing_user_signatures = target_device_signatures.setdefault(
|
||||||
user_id, {}
|
user_id, {}
|
||||||
)
|
)
|
||||||
@ -240,7 +229,7 @@ class EndToEndKeyWorkerStore(SQLBaseStore):
|
|||||||
if include_deleted_devices:
|
if include_deleted_devices:
|
||||||
deleted_devices.remove((user_id, device_id))
|
deleted_devices.remove((user_id, device_id))
|
||||||
result.setdefault(user_id, {})[device_id] = DeviceKeyLookupResult(
|
result.setdefault(user_id, {})[device_id] = DeviceKeyLookupResult(
|
||||||
display_name, key_json
|
display_name, db_to_json(key_json) if key_json else None
|
||||||
)
|
)
|
||||||
|
|
||||||
if include_deleted_devices:
|
if include_deleted_devices:
|
||||||
|
@ -19,8 +19,8 @@
|
|||||||
|
|
||||||
-- Add columns to event_push_actions and event_push_actions_staging to track unread
|
-- Add columns to event_push_actions and event_push_actions_staging to track unread
|
||||||
-- messages and calculate unread counts.
|
-- messages and calculate unread counts.
|
||||||
ALTER TABLE event_push_actions_staging ADD COLUMN unread SMALLINT NOT NULL DEFAULT 0;
|
ALTER TABLE event_push_actions_staging ADD COLUMN unread SMALLINT;
|
||||||
ALTER TABLE event_push_actions ADD COLUMN unread SMALLINT NOT NULL DEFAULT 0;
|
ALTER TABLE event_push_actions ADD COLUMN unread SMALLINT;
|
||||||
|
|
||||||
-- Add column to event_push_summary
|
-- Add column to event_push_summary
|
||||||
ALTER TABLE event_push_summary ADD COLUMN unread_count BIGINT NOT NULL DEFAULT 0;
|
ALTER TABLE event_push_summary ADD COLUMN unread_count BIGINT;
|
Loading…
Reference in New Issue
Block a user