mirror of
https://mau.dev/maunium/synapse.git
synced 2024-10-01 01:36:05 -04:00
Declare support for Matrix 1.6 (#15559)
Adds logging for key server requests which include a key ID. This is technically in violation of the 1.6 spec, but is the only way to remain backwards compatibly with earlier versions of Synapse (and possibly other homeservers) which *did* include the key ID.
This commit is contained in:
parent
808105bd31
commit
def480442d
1
changelog.d/15559.feature
Normal file
1
changelog.d/15559.feature
Normal file
@ -0,0 +1 @@
|
|||||||
|
Advertise support for Matrix 1.6 on `/_matrix/client/versions`.
|
@ -79,6 +79,7 @@ class VersionsRestServlet(RestServlet):
|
|||||||
"v1.3",
|
"v1.3",
|
||||||
"v1.4",
|
"v1.4",
|
||||||
"v1.5",
|
"v1.5",
|
||||||
|
"v1.6",
|
||||||
],
|
],
|
||||||
# as per MSC1497:
|
# as per MSC1497:
|
||||||
"unstable_features": {
|
"unstable_features": {
|
||||||
|
@ -34,6 +34,8 @@ class LocalKey(RestServlet):
|
|||||||
"""HTTP resource containing encoding the TLS X.509 certificate and NACL
|
"""HTTP resource containing encoding the TLS X.509 certificate and NACL
|
||||||
signature verification keys for this server::
|
signature verification keys for this server::
|
||||||
|
|
||||||
|
GET /_matrix/key/v2/server HTTP/1.1
|
||||||
|
|
||||||
GET /_matrix/key/v2/server/a.key.id HTTP/1.1
|
GET /_matrix/key/v2/server/a.key.id HTTP/1.1
|
||||||
|
|
||||||
HTTP/1.1 200 OK
|
HTTP/1.1 200 OK
|
||||||
@ -100,6 +102,15 @@ class LocalKey(RestServlet):
|
|||||||
def on_GET(
|
def on_GET(
|
||||||
self, request: Request, key_id: Optional[str] = None
|
self, request: Request, key_id: Optional[str] = None
|
||||||
) -> Tuple[int, JsonDict]:
|
) -> Tuple[int, JsonDict]:
|
||||||
|
# Matrix 1.6 drops support for passing the key_id, this is incompatible
|
||||||
|
# with earlier versions and is allowed in order to support both.
|
||||||
|
# A warning is issued to help determine when it is safe to drop this.
|
||||||
|
if key_id:
|
||||||
|
logger.warning(
|
||||||
|
"Request for local server key with deprecated key ID (logging to determine usage level for future removal): %s",
|
||||||
|
key_id,
|
||||||
|
)
|
||||||
|
|
||||||
time_now = self.clock.time_msec()
|
time_now = self.clock.time_msec()
|
||||||
# Update the expiry time if less than half the interval remains.
|
# Update the expiry time if less than half the interval remains.
|
||||||
if time_now + self.config.key.key_refresh_interval / 2 > self.valid_until_ts:
|
if time_now + self.config.key.key_refresh_interval / 2 > self.valid_until_ts:
|
||||||
|
@ -126,6 +126,15 @@ class RemoteKey(RestServlet):
|
|||||||
self, request: Request, server: str, key_id: Optional[str] = None
|
self, request: Request, server: str, key_id: Optional[str] = None
|
||||||
) -> Tuple[int, JsonDict]:
|
) -> Tuple[int, JsonDict]:
|
||||||
if server and key_id:
|
if server and key_id:
|
||||||
|
# Matrix 1.6 drops support for passing the key_id, this is incompatible
|
||||||
|
# with earlier versions and is allowed in order to support both.
|
||||||
|
# A warning is issued to help determine when it is safe to drop this.
|
||||||
|
logger.warning(
|
||||||
|
"Request for remote server key with deprecated key ID (logging to determine usage level for future removal): %s / %s",
|
||||||
|
server,
|
||||||
|
key_id,
|
||||||
|
)
|
||||||
|
|
||||||
minimum_valid_until_ts = parse_integer(request, "minimum_valid_until_ts")
|
minimum_valid_until_ts = parse_integer(request, "minimum_valid_until_ts")
|
||||||
arguments = {}
|
arguments = {}
|
||||||
if minimum_valid_until_ts is not None:
|
if minimum_valid_until_ts is not None:
|
||||||
@ -161,7 +170,7 @@ class RemoteKey(RestServlet):
|
|||||||
|
|
||||||
time_now_ms = self.clock.time_msec()
|
time_now_ms = self.clock.time_msec()
|
||||||
|
|
||||||
# Map server_name->key_id->int. Note that the value of the init is unused.
|
# Map server_name->key_id->int. Note that the value of the int is unused.
|
||||||
# XXX: why don't we just use a set?
|
# XXX: why don't we just use a set?
|
||||||
cache_misses: Dict[str, Dict[str, int]] = {}
|
cache_misses: Dict[str, Dict[str, int]] = {}
|
||||||
for (server_name, key_id, _), key_results in cached.items():
|
for (server_name, key_id, _), key_results in cached.items():
|
||||||
|
Loading…
Reference in New Issue
Block a user