mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-08-20 23:38:07 -04:00
Implement MSC3983 to proxy /keys/claim queries to appservices. (#15314)
Experimental support for MSC3983 is behind a configuration flag. If enabled, for users which are exclusively owned by an application service then the appservice will be queried for one-time keys *if* there are none uploaded to Synapse.
This commit is contained in:
parent
57481ca694
commit
5282ba1e2b
9 changed files with 354 additions and 28 deletions
|
@ -105,3 +105,62 @@ class ApplicationServiceApiTestCase(unittest.HomeserverTestCase):
|
|||
)
|
||||
self.assertEqual(self.request_url, URL_LOCATION)
|
||||
self.assertEqual(result, SUCCESS_RESULT_LOCATION)
|
||||
|
||||
def test_claim_keys(self) -> None:
|
||||
"""
|
||||
Tests that the /keys/claim response is properly parsed for missing
|
||||
keys.
|
||||
"""
|
||||
|
||||
RESPONSE: JsonDict = {
|
||||
"@alice:example.org": {
|
||||
"DEVICE_1": {
|
||||
"signed_curve25519:AAAAHg": {
|
||||
# We don't really care about the content of the keys,
|
||||
# they get passed back transparently.
|
||||
},
|
||||
"signed_curve25519:BBBBHg": {},
|
||||
},
|
||||
"DEVICE_2": {"signed_curve25519:CCCCHg": {}},
|
||||
},
|
||||
}
|
||||
|
||||
async def post_json_get_json(
|
||||
uri: str,
|
||||
post_json: Any,
|
||||
headers: Mapping[Union[str, bytes], Sequence[Union[str, bytes]]],
|
||||
) -> JsonDict:
|
||||
# Ensure the access token is passed as both a header and query arg.
|
||||
if not headers.get("Authorization"):
|
||||
raise RuntimeError("Access token not provided")
|
||||
|
||||
self.assertEqual(headers.get("Authorization"), [f"Bearer {TOKEN}"])
|
||||
return RESPONSE
|
||||
|
||||
# We assign to a method, which mypy doesn't like.
|
||||
self.api.post_json_get_json = Mock(side_effect=post_json_get_json) # type: ignore[assignment]
|
||||
|
||||
MISSING_KEYS = [
|
||||
# Known user, known device, missing algorithm.
|
||||
("@alice:example.org", "DEVICE_1", "signed_curve25519:DDDDHg"),
|
||||
# Known user, missing device.
|
||||
("@alice:example.org", "DEVICE_3", "signed_curve25519:EEEEHg"),
|
||||
# Unknown user.
|
||||
("@bob:example.org", "DEVICE_4", "signed_curve25519:FFFFHg"),
|
||||
]
|
||||
|
||||
claimed_keys, missing = self.get_success(
|
||||
self.api.claim_client_keys(
|
||||
self.service,
|
||||
[
|
||||
# Found devices
|
||||
("@alice:example.org", "DEVICE_1", "signed_curve25519:AAAAHg"),
|
||||
("@alice:example.org", "DEVICE_1", "signed_curve25519:BBBBHg"),
|
||||
("@alice:example.org", "DEVICE_2", "signed_curve25519:CCCCHg"),
|
||||
]
|
||||
+ MISSING_KEYS,
|
||||
)
|
||||
)
|
||||
|
||||
self.assertEqual(claimed_keys, RESPONSE)
|
||||
self.assertEqual(missing, MISSING_KEYS)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue