diff --git a/src/js/login.js b/src/js/login.js index 83353cd..3bf23d0 100644 --- a/src/js/login.js +++ b/src/js/login.js @@ -71,7 +71,6 @@ class Form extends ElemJS { this.on("submit", this.submit.bind(this)) } - async submit() { if (this.processing) return this.processing = true @@ -114,32 +113,31 @@ class Form extends ElemJS { } async findHomeserver(address, maxDepth = 5) { - - //Protects us from servers sending us on a redirect loop + // Protects us from servers sending us on a redirect loop maxDepth-- - if(maxDepth<=0) throw new Error(`Failed to look up homeserver, maximum search depth reached`) - - //Preprocess the address + if (maxDepth <= 0) throw new Error(`Failed to look up homeserver, maximum search depth reached`) + + // Normalise the address if (!address.match(/^https?:\/\//)) { console.warn(`${address} doesn't specify the protocol, assuming https`) address = "https://" + address } address = address.replace(/\/*$/, "") - + this.status(`Looking up homeserver... trying ${address}`) - + // Check if we found the actual matrix server - const versionsReq = await fetch(`${address}/_matrix/client/versions`).catch(()=>{}) - /* jshint ignore:start */ - //JsHint doesn't support optional chaining - // https://github.com/jshint/jshint/issues/3448 - if(versionsReq?.ok) { - const versions = await versionsReq.json().catch(()=>{}) - if (Array.isArray(versions?.versions)) return address - } - /* jshint ignore:end */ - - // find the next matrix server in the chain + try { + const versionsReq = await fetch(`${address}/_matrix/client/versions`) + if (versionsReq.ok) { + const versions = await versionsReq.json() + if (Array.isArray(versions.versions)) { + return address + } + } + } catch(e) {} + + // Find the next matrix server in the chain const root = await fetch(`${address}/.well-known/matrix/client`).then(res => res.json()).catch(e => { console.error(e) throw new Error(`Failed to look up server ${address}`) @@ -155,7 +153,6 @@ class Form extends ElemJS { return this.findHomeserver(nextAddress, maxDepth) } - status(message) { feedback.setLoading(true) feedback.message(message) @@ -169,6 +166,3 @@ class Form extends ElemJS { } const form = new Form() - - -