Merge pull request #232 from matrix-org/bwindels/fix-parse-identifier

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:51:39 +02:00 committed by GitHub
commit 27c74448d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 9 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,20 @@ export class Link {
);
}
static parse(fragment) {
static parseIdentifier(identifier) {
return Link._parse(identifier);
}
static parseFragment(fragment) {
if (!fragment) {
return null;
}
let [linkStr, queryParamsStr] = fragment.split("?");
if (!linkStr.startsWith("#/")) {
return null;
}
linkStr = linkStr.substr(2);
const [identifier, eventId] = linkStr.split("/");
let viaServers = [];
let clientId = null;
@ -121,14 +130,13 @@ export class Link {
}
webInstances = getWebInstanceMap(queryParams);
}
return Link._parse(identifier, eventId, clientId, viaServers, webInstances);
}
if (!linkStr.startsWith("#/")) {
static _parse(identifier, eventId = undefined, clientId = null, viaServers = [], webInstances = {}) {
if (!identifier) {
return null;
}
linkStr = linkStr.substr(2);
const [identifier, eventId] = linkStr.split("/");
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());
}