improve hs validation
This commit is contained in:
parent
85b7d570e6
commit
4d57b3c5da
2 changed files with 23 additions and 3 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 || [];
|
||||||
|
|
Loading…
Reference in a new issue