From f183e96d66bd6f48fa8b765bfc5412a11b927cc8 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 30 Sep 2019 13:04:20 -0600 Subject: [PATCH] Introduce a RiotPermalinkConstructor and fix the setting name Originally we were planning on using the current location as the permalink prefix, but that doesn't work if the user is a desktop user. --- .../permalinks/RiotPermalinkConstructor.js | 60 +++++++++++++++++++ src/utils/permalinks/RoomPermalinkCreator.js | 7 ++- 2 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 src/utils/permalinks/RiotPermalinkConstructor.js diff --git a/src/utils/permalinks/RiotPermalinkConstructor.js b/src/utils/permalinks/RiotPermalinkConstructor.js new file mode 100644 index 0000000000..87d8d058f9 --- /dev/null +++ b/src/utils/permalinks/RiotPermalinkConstructor.js @@ -0,0 +1,60 @@ +/* +Copyright 2019 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 PermalinkConstructor from "./PermalinkConstructor"; + +/** + * Generates permalinks that self-reference the running webapp + */ +export default class RiotPermalinkConstructor extends PermalinkConstructor { + + _riotUrl: string; + + constructor(riotUrl: string) { + super(); + this._riotUrl = riotUrl; + } + + forEvent(roomId: string, eventId: string, serverCandidates: string[]): string { + // TODO: Fix URL + return `${this._riotUrl}/#/${roomId}/${eventId}${this.encodeServerCandidates(serverCandidates)}`; + } + + forRoom(roomIdOrAlias: string, serverCandidates: string[]): string { + // TODO: Fix URL + return `${this._riotUrl}/#/${roomIdOrAlias}${this.encodeServerCandidates(serverCandidates)}`; + } + + forUser(userId: string): string { + // TODO: Fix URL + return `${this._riotUrl}/#/${userId}`; + } + + forGroup(groupId: string): string { + // TODO: Fix URL + return `${this._riotUrl}/#/${groupId}`; + } + + isPermalinkHost(testHost: string): boolean { + // TODO: Actual check + return testHost === this._riotUrl; + } + + encodeServerCandidates(candidates: string[]) { + if (!candidates || candidates.length === 0) return ''; + return `?via=${candidates.map(c => encodeURIComponent(c)).join("&via=")}`; + } +} diff --git a/src/utils/permalinks/RoomPermalinkCreator.js b/src/utils/permalinks/RoomPermalinkCreator.js index 7394854c18..aeb7d3b72c 100644 --- a/src/utils/permalinks/RoomPermalinkCreator.js +++ b/src/utils/permalinks/RoomPermalinkCreator.js @@ -17,8 +17,9 @@ limitations under the License. import MatrixClientPeg from "../../MatrixClientPeg"; import isIp from "is-ip"; import utils from 'matrix-js-sdk/lib/utils'; -import SpecPermalinkConstructor from "./SpecPermalinkConstructor"; +import SpecPermalinkConstructor, {baseUrl as matrixtoBaseUrl} from "./SpecPermalinkConstructor"; import PermalinkConstructor from "./PermalinkConstructor"; +import RiotPermalinkConstructor from "./RiotPermalinkConstructor"; const SdkConfig = require("../../SdkConfig"); @@ -283,8 +284,8 @@ export function isPermalinkHost(host: string): boolean { } function getPermalinkConstructor(): PermalinkConstructor { - if (SdkConfig.get()['useRiotToCreatePermalinks']) { - // TODO: Return a RiotPermalinkConstructor + if (SdkConfig.get()['permalinkPrefix'] && SdkConfig.get()['permalinkPrefix'] !== matrixtoBaseUrl) { + return new RiotPermalinkConstructor(SdkConfig.get()['permalinkPrefix']); } return new SpecPermalinkConstructor();