improve hs validation

This commit is contained in:
Bruno Windels 2020-12-04 13:09:37 +01:00
parent 85b7d570e6
commit 4d57b3c5da
2 changed files with 23 additions and 3 deletions

View file

@ -75,7 +75,6 @@ class ServerOptions extends TemplateView {
className: "line", className: "line",
placeholder: "Other", placeholder: "Other",
name: "otherServer", name: "otherServer",
pattern: "((?:[0-9a-zA-Z][0-9a-zA-Z-]{1,61}\\.)*)(xn--[a-z0-9]+|[a-z]+)",
onClick: evt => this._onClickOther(evt), onClick: evt => this._onClickOther(evt),
}) })
]))); ])));
@ -98,9 +97,13 @@ class ServerOptions extends TemplateView {
let {name, value} = evt.target; let {name, value} = evt.target;
if (name === "selectedServer") { if (name === "selectedServer") {
this._onChangeServerRadio(evt.target); this._onChangeServerRadio(evt.target);
} else if (name === "otherServer") { } else if (name === "otherServer") {
this.value.selectServer(value); const textField = evt.target;
if(!this.value.selectOtherServer(value)) {
textField.setCustomValidity("Please enter a valid domain name");
} else {
textField.setCustomValidity("");
}
} }
} }
@ -112,6 +115,7 @@ class ServerOptions extends TemplateView {
value = otherServer.value; value = otherServer.value;
} else { } else {
otherServer.required = false; otherServer.required = false;
otherServer.setCustomValidity("");
} }
this.value.selectServer(value); this.value.selectServer(value);
} }

View file

@ -39,6 +39,22 @@ export class ServerConsentViewModel extends ViewModel {
this.emitChange(); this.emitChange();
} }
selectOtherServer(domainOrUrl) {
let urlStr = domainOrUrl;
if (!urlStr.startsWith("http://") && !urlStr.startsWith("https://")) {
urlStr = `https://${domainOrUrl}`;
}
try {
const domain = new URL(urlStr).hostname;
if (/((?:[0-9a-zA-Z][0-9a-zA-Z-]{1,61}\.)+)(xn--[a-z0-9]+|[a-z]+)/.test(domain) || domain === "localhost") {
this.selectServer(urlStr);
return true;
}
} catch (err) {}
this.selectServer(null);
return false;
}
continueWithSelection() { continueWithSelection() {
// keep previously consented servers // keep previously consented servers
const homeservers = this.preferences.homeservers || []; const homeservers = this.preferences.homeservers || [];