From 41d7308ba84901f24fb5047cf90571273c3e93c3 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 14 Sep 2021 10:44:27 +0200 Subject: [PATCH] have a separate parse method for identifier so we don't validate the fragment hash --- src/Link.js | 24 +++++++++++++----------- src/RootViewModel.js | 2 +- src/create/CreateLinkViewModel.js | 2 +- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/Link.js b/src/Link.js index cb7653f..72dd539 100644 --- a/src/Link.js +++ b/src/Link.js @@ -80,7 +80,7 @@ export function tryFixUrl(fragment) { const validAttempts = []; for (const attempt of [...new Set(attempts)]) { - const link = Link.parse(attempt); + const link = Link.parseFragment(attempt); if (link) { validAttempts.push({ url: attempt, link }); } @@ -98,11 +98,17 @@ export class Link { ); } - static parse(fragment) { - if (!fragment) { + static parseIdentifier(identifier) { + return Link._parse(identifier); + } + + static parseFragment(fragment) { + let [linkStr, queryParamsStr] = fragment.split("?"); + if (!linkStr.startsWith("#/")) { return null; } - let [linkStr, queryParamsStr] = fragment.split("?"); + linkStr = linkStr.substr(2); + const [identifier, eventId] = linkStr.split("/"); let viaServers = []; let clientId = null; @@ -121,14 +127,10 @@ export class Link { } webInstances = getWebInstanceMap(queryParams); } + return Link._parse(identifier, eventId, clientId, viaServers, webInstances); + } - if (!linkStr.startsWith("#/")) { - return null; - } - linkStr = linkStr.substr(2); - - const [identifier, eventId] = linkStr.split("/"); - + static _parse(identifier, eventId = undefined, clientId = null, viaServers = [], webInstances = {}) { let matches; matches = USERID_PATTERN.exec(identifier); if (matches) { diff --git a/src/RootViewModel.js b/src/RootViewModel.js index 39f6733..05a8cd8 100644 --- a/src/RootViewModel.js +++ b/src/RootViewModel.js @@ -76,7 +76,7 @@ export class RootViewModel extends ViewModel { } else if (hash === "" || hash === "#" || hash === "#/") { this._updateChildVMs(null, oldLink); this.createLinkViewModel = new CreateLinkViewModel(this.childOptions()); - } else if (newLink = Link.parse(hash)) { + } else if (newLink = Link.parseFragment(hash)) { this._updateChildVMs(newLink, oldLink); } else { this._updateChildVMs(null, oldLink); diff --git a/src/create/CreateLinkViewModel.js b/src/create/CreateLinkViewModel.js index 50aa880..80b5d0c 100644 --- a/src/create/CreateLinkViewModel.js +++ b/src/create/CreateLinkViewModel.js @@ -30,7 +30,7 @@ export class CreateLinkViewModel extends ViewModel { } async createLink(identifier) { - this._link = Link.parse(identifier); + this._link = Link.parseIdentifier(identifier); if (this._link) { this.openLink("#" + this._link.toFragment()); }