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 = [];
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) {

View file

@ -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);

View file

@ -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());
}