Use localStorage
This commit is contained in:
		| @@ -26,15 +26,37 @@ export class App { | |||||||
|             this.handleUrl(event.newURL); |             this.handleUrl(event.newURL); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|  |         const domainName = window.localStorage['domainName']; | ||||||
|  |         const sessionToken = window.localStorage['sessionToken']; | ||||||
|  |         if (domainName && sessionToken) { | ||||||
|  |             USIMP.Domain.fromName(domainName).then((domain) => { | ||||||
|  |                 const session = new USIMP.Session(domain); | ||||||
|  |                 session.chooseDomainServer().then(() => { | ||||||
|  |                     session.token = sessionToken; | ||||||
|  |                     session.ping().then(() => { | ||||||
|  |                         this.session = session; | ||||||
|  |                         this.defaultLocation = '/'; | ||||||
|  |                         this.handleUrl(document.URL); | ||||||
|  |                     }) | ||||||
|  |                 }); | ||||||
|  |             }, (error) => { | ||||||
|  |                 if (error instanceof DOMException) { | ||||||
|  |                     throw new Error("Connection timed out"); | ||||||
|  |                 } else { | ||||||
|  |                     throw new Error("Invalid USIMP domain"); | ||||||
|  |                 } | ||||||
|  |             }); | ||||||
|  |         } else { | ||||||
|             this.handleUrl(document.URL); |             this.handleUrl(document.URL); | ||||||
|         } |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|     close() { |     quit() { | ||||||
|         if (this.session) this.session.close(); |         if (this.session) this.session.close().then(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     sleep() { |     sleep() { | ||||||
|         if (this.session) this.session.sleep(); |         if (this.session) this.session.sleep().then(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     async wakeup() { |     async wakeup() { | ||||||
| @@ -52,7 +74,7 @@ export class App { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     handleHash(hash: string) { |     handleHash(hash: string) { | ||||||
|         if (hash[0] === '#') hash = hash.substr(1); |         if (hash[0] === '#') hash = hash.substring(1); | ||||||
|  |  | ||||||
|         const defaultCase = () => { |         const defaultCase = () => { | ||||||
|             history.replaceState(null, document.title, `#${this.defaultLocation}`); |             history.replaceState(null, document.title, `#${this.defaultLocation}`); | ||||||
| @@ -110,7 +132,7 @@ export class App { | |||||||
|         if (response.status === "success") { |         if (response.status === "success") { | ||||||
|             this.session = session; |             this.session = session; | ||||||
|             this.defaultLocation = "/"; |             this.defaultLocation = "/"; | ||||||
|             this.setHash("/"); |             return true; | ||||||
|         } else { |         } else { | ||||||
|             console.error(response.error); |             console.error(response.error); | ||||||
|             throw new Error(response.error.message || response.error.code); |             throw new Error(response.error.message || response.error.code); | ||||||
| @@ -188,6 +210,8 @@ export class App { | |||||||
|                 <input name="account" placeholder="Account name" type="text" required/> |                 <input name="account" placeholder="Account name" type="text" required/> | ||||||
|                 <input name="domain" placeholder="Domain" type="text" pattern="([a-zA-Z0-9_-]+\\.)+[a-zA-Z]{2,}" required/> |                 <input name="domain" placeholder="Domain" type="text" pattern="([a-zA-Z0-9_-]+\\.)+[a-zA-Z]{2,}" required/> | ||||||
|                 <input name="password" placeholder="Password" type="password" required/> |                 <input name="password" placeholder="Password" type="password" required/> | ||||||
|  |                 <label><input name="saveAccountName" type="checkbox"/> Save Account Name</label> | ||||||
|  |                 <label><input name="keepSession" type="checkbox"/> Keep me signed in</label> | ||||||
|                 <button type="submit">Login</button> |                 <button type="submit">Login</button> | ||||||
|             </form>`; |             </form>`; | ||||||
|  |  | ||||||
| @@ -204,8 +228,21 @@ export class App { | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             try { |             try { | ||||||
|  |                 const accountName: string = form['account'].value; | ||||||
|  |                 const domainName: string = form['domain'].value; | ||||||
|  |                 const keepSession: boolean = form['keepSession'].checked; | ||||||
|  |                 const saveAccountName: boolean = form['saveAccountName'].checked; | ||||||
|                 try { |                 try { | ||||||
|                     await this.login(form['account'].value, form['domain'].value, form['password'].value); |                     if (await this.login(accountName, domainName, form['password'].value)) { | ||||||
|  |                         window.localStorage.clear(); | ||||||
|  |                         if (keepSession || saveAccountName) | ||||||
|  |                             window.localStorage['domainName'] = domainName; | ||||||
|  |                         if (keepSession) | ||||||
|  |                             window.localStorage['sessionToken'] = this.session?.token; | ||||||
|  |                         if (saveAccountName) | ||||||
|  |                             window.localStorage['accountName'] = accountName; | ||||||
|  |                         this.setHash("/"); | ||||||
|  |                     } | ||||||
|                 } finally { |                 } finally { | ||||||
|                     for (const d of form.getElementsByTagName("div")) form.removeChild(d); |                     for (const d of form.getElementsByTagName("div")) form.removeChild(d); | ||||||
|                     for (const e of form.getElementsByTagName("input")) e.disabled = false; |                     for (const e of form.getElementsByTagName("input")) e.disabled = false; | ||||||
| @@ -231,20 +268,30 @@ export class App { | |||||||
|  |  | ||||||
|         const domain = document.getElementsByName("domain")[0]; |         const domain = document.getElementsByName("domain")[0]; | ||||||
|         if (!domain) throw new Error("Element name=domain not found"); |         if (!domain) throw new Error("Element name=domain not found"); | ||||||
|  |         domain.addEventListener("input", () => { | ||||||
|         domain.addEventListener("input", (event) => { |  | ||||||
|             domain.removeAttribute("invalid"); |             domain.removeAttribute("invalid"); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|         const account = document.getElementsByName("account")[0]; |         const account = document.getElementsByName("account")[0]; | ||||||
|         if (!account) throw new Error("Element name=account not found"); |         if (!account) throw new Error("Element name=account not found"); | ||||||
|  |         account.addEventListener("input", () => { | ||||||
|         account.addEventListener("input", (event) => { |  | ||||||
|             account.removeAttribute("invalid"); |             account.removeAttribute("invalid"); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|  |         const password = document.getElementsByName("password")[0]; | ||||||
|  |         if (!password) throw new Error("Element name=password not found"); | ||||||
|  |  | ||||||
|  |         const accountName = window.localStorage['accountName']; | ||||||
|  |         const domainName = window.localStorage['domainName']; | ||||||
|  |         if (accountName && domainName) { | ||||||
|  |             form['account'].value = accountName; | ||||||
|  |             form['domain'].value = domainName; | ||||||
|  |             form['saveAccountName'].checked = true; | ||||||
|  |             password.focus(); | ||||||
|  |         } else { | ||||||
|             account.focus(); |             account.focus(); | ||||||
|         } |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|     setupMain() { |     setupMain() { | ||||||
|         if (!this.session) throw new Error("Invalid state"); |         if (!this.session) throw new Error("Invalid state"); | ||||||
|   | |||||||
| @@ -28,7 +28,7 @@ window.addEventListener("DOMContentLoaded", () => { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     window.addEventListener("beforeunload", () => { |     window.addEventListener("beforeunload", () => { | ||||||
|         locutus.close(); |         locutus.quit(); | ||||||
|     }); |     }); | ||||||
| }); | }); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,10 +1,10 @@ | |||||||
| { | { | ||||||
|   "compilerOptions": { |   "compilerOptions": { | ||||||
|     /* Visit https://aka.ms/tsconfig.json to read more about this file */ |     /* Visit https://aka.ms/tsconfig.json to read more about this file */ | ||||||
|     "target": "ES2020", |     "target": "ESNext", | ||||||
|     "module": "ES2020", |     "module": "ESNext", | ||||||
|     "outDir": "dest/www/res/scripts", |     "outDir": "dest/www/res/scripts", | ||||||
|     "rootDir": "src", |     "rootDir": "src/", | ||||||
|     "strict": true, |     "strict": true, | ||||||
|     "noImplicitAny": true, |     "noImplicitAny": true, | ||||||
|     "strictNullChecks": true, |     "strictNullChecks": true, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user