have a separate parse method for identifier so we don't validate the fragment hash

This commit is contained in:
Bruno Windels 2021-09-14 10:44:27 +02:00
parent a460b52e03
commit 41d7308ba8
3 changed files with 15 additions and 13 deletions

View file

@ -80,7 +80,7 @@ export function tryFixUrl(fragment) {
const validAttempts = []; const validAttempts = [];
for (const attempt of [...new Set(attempts)]) { for (const attempt of [...new Set(attempts)]) {
const link = Link.parse(attempt); const link = Link.parseFragment(attempt);
if (link) { if (link) {
validAttempts.push({ url: attempt, link }); validAttempts.push({ url: attempt, link });
} }
@ -98,11 +98,17 @@ export class Link {
); );
} }
static parse(fragment) { static parseIdentifier(identifier) {
if (!fragment) { return Link._parse(identifier);
}
static parseFragment(fragment) {
let [linkStr, queryParamsStr] = fragment.split("?");
if (!linkStr.startsWith("#/")) {
return null; return null;
} }
let [linkStr, queryParamsStr] = fragment.split("?"); linkStr = linkStr.substr(2);
const [identifier, eventId] = linkStr.split("/");
let viaServers = []; let viaServers = [];
let clientId = null; let clientId = null;
@ -121,14 +127,10 @@ export class Link {
} }
webInstances = getWebInstanceMap(queryParams); 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; let matches;
matches = USERID_PATTERN.exec(identifier); matches = USERID_PATTERN.exec(identifier);
if (matches) { if (matches) {

View file

@ -76,7 +76,7 @@ export class RootViewModel extends ViewModel {
} else if (hash === "" || hash === "#" || hash === "#/") { } else if (hash === "" || hash === "#" || hash === "#/") {
this._updateChildVMs(null, oldLink); this._updateChildVMs(null, oldLink);
this.createLinkViewModel = new CreateLinkViewModel(this.childOptions()); this.createLinkViewModel = new CreateLinkViewModel(this.childOptions());
} else if (newLink = Link.parse(hash)) { } else if (newLink = Link.parseFragment(hash)) {
this._updateChildVMs(newLink, oldLink); this._updateChildVMs(newLink, oldLink);
} else { } else {
this._updateChildVMs(null, oldLink); this._updateChildVMs(null, oldLink);

View file

@ -30,7 +30,7 @@ export class CreateLinkViewModel extends ViewModel {
} }
async createLink(identifier) { async createLink(identifier) {
this._link = Link.parse(identifier); this._link = Link.parseIdentifier(identifier);
if (this._link) { if (this._link) {
this.openLink("#" + this._link.toFragment()); this.openLink("#" + this._link.toFragment());
} }