From a861a54fcd5ef8dcac6314069304a1afd6e244ed Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 9 Jun 2023 08:20:05 +0100 Subject: [PATCH] Matrix matrix scheme permalink constructor not stripping query params (#11060) --- .../MatrixSchemePermalinkConstructor.ts | 3 +- .../MatrixSchemePermalinkConstructor-test.ts | 30 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 test/utils/permalinks/MatrixSchemePermalinkConstructor-test.ts diff --git a/src/utils/permalinks/MatrixSchemePermalinkConstructor.ts b/src/utils/permalinks/MatrixSchemePermalinkConstructor.ts index f29c53c9db..827dfc1d0a 100644 --- a/src/utils/permalinks/MatrixSchemePermalinkConstructor.ts +++ b/src/utils/permalinks/MatrixSchemePermalinkConstructor.ts @@ -72,7 +72,8 @@ export default class MatrixSchemePermalinkConstructor extends PermalinkConstruct throw new Error("Does not appear to be a permalink"); } - const parts = fullUrl.substring("matrix:".length).split("/"); + const url = new URL(fullUrl); + const parts = url.pathname.split("/"); const identifier = parts[0]; const entityNoSigil = parts[1]; diff --git a/test/utils/permalinks/MatrixSchemePermalinkConstructor-test.ts b/test/utils/permalinks/MatrixSchemePermalinkConstructor-test.ts new file mode 100644 index 0000000000..8605775c5d --- /dev/null +++ b/test/utils/permalinks/MatrixSchemePermalinkConstructor-test.ts @@ -0,0 +1,30 @@ +/* +Copyright 2023 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import { PermalinkParts } from "../../../src/utils/permalinks/PermalinkConstructor"; +import MatrixSchemePermalinkConstructor from "../../../src/utils/permalinks/MatrixSchemePermalinkConstructor"; + +describe("MatrixSchemePermalinkConstructor", () => { + const peramlinkConstructor = new MatrixSchemePermalinkConstructor(); + + describe("parsePermalink", () => { + it("should strip ?action=chat from user links", () => { + expect(peramlinkConstructor.parsePermalink("matrix:u/user:example.com?action=chat")).toEqual( + new PermalinkParts(null, null, "@user:example.com", null), + ); + }); + }); +});