diff options
author | Patrick Cloke <clokep@users.noreply.github.com> | 2023-11-29 14:03:42 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-29 19:03:42 +0000 |
commit | d6c3b7584fc46571e65226793304df35d7081534 (patch) | |
tree | 663afeec9b90d9a47718c33a090c03ab6cbd7004 /synapse/media | |
parent | Reduce DB load when forget on leave setting is disabled (#16668) (diff) | |
download | synapse-d6c3b7584fc46571e65226793304df35d7081534.tar.xz |
Request & follow redirects for /media/v3/download (#16701)
Implement MSC3860 to follow redirects for federated media downloads. Note that the Client-Server API doesn't support this (yet) since the media repository in Synapse doesn't have a way of supporting redirects.
Diffstat (limited to 'synapse/media')
-rw-r--r-- | synapse/media/media_repository.py | 17 |
1 files changed, 4 insertions, 13 deletions
diff --git a/synapse/media/media_repository.py b/synapse/media/media_repository.py index bf976b9e7c..d62af22adb 100644 --- a/synapse/media/media_repository.py +++ b/synapse/media/media_repository.py @@ -77,7 +77,7 @@ class MediaRepository: def __init__(self, hs: "HomeServer"): self.hs = hs self.auth = hs.get_auth() - self.client = hs.get_federation_http_client() + self.client = hs.get_federation_client() self.clock = hs.get_clock() self.server_name = hs.hostname self.store = hs.get_datastores().main @@ -644,22 +644,13 @@ class MediaRepository: file_info = FileInfo(server_name=server_name, file_id=file_id) with self.media_storage.store_into_file(file_info) as (f, fname, finish): - request_path = "/".join( - ("/_matrix/media/r0/download", server_name, media_id) - ) try: - length, headers = await self.client.get_file( + length, headers = await self.client.download_media( server_name, - request_path, + media_id, output_stream=f, max_size=self.max_upload_size, - args={ - # tell the remote server to 404 if it doesn't - # recognise the server_name, to make sure we don't - # end up with a routing loop. - "allow_remote": "false", - "timeout_ms": str(max_timeout_ms), - }, + max_timeout_ms=max_timeout_ms, ) except RequestSendFailed as e: logger.warning( |