From 5c87b560b9388196e89bfc2cce17c89e9ed8fd29 Mon Sep 17 00:00:00 2001 From: Sorunome Date: Thu, 21 Oct 2021 11:10:06 +0200 Subject: [PATCH] fix: obay explicitly set ports in mxc URLs --- lib/src/utils/uri_extension.dart | 6 +++--- test/mxc_uri_extension_test.dart | 13 +++++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/src/utils/uri_extension.dart b/lib/src/utils/uri_extension.dart index 6202ad3b..a668ec9a 100644 --- a/lib/src/utils/uri_extension.dart +++ b/lib/src/utils/uri_extension.dart @@ -24,8 +24,8 @@ extension MxcUriExtension on Uri { /// Returns a download Link to this content. Uri getDownloadLink(Client matrix) => isScheme('mxc') ? matrix.homeserver != null - ? matrix.homeserver - ?.resolve('_matrix/media/r0/download/$host$path') ?? + ? matrix.homeserver?.resolve( + '_matrix/media/r0/download/$host${hasPort ? ':$port' : ''}$path') ?? Uri() : Uri() : this; @@ -48,7 +48,7 @@ extension MxcUriExtension on Uri { return Uri( scheme: homeserver.scheme, host: homeserver.host, - path: '/_matrix/media/r0/thumbnail/$host$path', + path: '/_matrix/media/r0/thumbnail/$host${hasPort ? ':$port' : ''}$path', port: homeserver.port, queryParameters: { if (width != null) 'width': width.round().toString(), diff --git a/test/mxc_uri_extension_test.dart b/test/mxc_uri_extension_test.dart index b4d505e7..c9a3ce7d 100644 --- a/test/mxc_uri_extension_test.dart +++ b/test/mxc_uri_extension_test.dart @@ -73,5 +73,18 @@ void main() { .toString(), 'https://fakeserver.notexisting:1337/_matrix/media/r0/thumbnail/exampleserver.abc/abcdefghijklmn?width=50&height=50&method=scale&animated=true'); }); + test('other remote port', () async { + final client = Client('testclient', httpClient: FakeMatrixApi()); + await client.checkHomeserver('https://fakeserver.notexisting', + checkWellKnown: false); + final mxc = 'mxc://exampleserver.abc:1234/abcdefghijklmn'; + final content = Uri.parse(mxc); + expect(content.isScheme('mxc'), true); + + expect(content.getDownloadLink(client).toString(), + '${client.homeserver.toString()}/_matrix/media/r0/download/exampleserver.abc:1234/abcdefghijklmn'); + expect(content.getThumbnail(client, width: 50, height: 50).toString(), + '${client.homeserver.toString()}/_matrix/media/r0/thumbnail/exampleserver.abc:1234/abcdefghijklmn?width=50&height=50&method=crop&animated=false'); + }); }); }