From bd93048aaa83737f39369c2a1a5bca68c7fcfc20 Mon Sep 17 00:00:00 2001 From: Abdullah Atta Date: Wed, 7 Feb 2024 19:35:23 +0500 Subject: [PATCH] web: fix app lock not getting disabled --- apps/web/src/interfaces/key-store.ts | 36 +++++++++++++++++++++------- apps/web/src/views/app-lock.tsx | 3 ++- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/apps/web/src/interfaces/key-store.ts b/apps/web/src/interfaces/key-store.ts index b2de1ae32..c24da5252 100644 --- a/apps/web/src/interfaces/key-store.ts +++ b/apps/web/src/interfaces/key-store.ts @@ -113,10 +113,7 @@ class KeyStore { ); await this.metadataStore.delete(this.keyId); - await this.metadataStore.set("credentials", [ - ...(await this.getCredentials()), - { id: credential.id, type: credential.type } - ]); + await this.setCredential({ id: credential.id, type: credential.type }); this.key = originalKey; return this; @@ -128,7 +125,7 @@ class KeyStore { permanent?: boolean; } ) { - if (!(await this.isLocked())) return this; + if (!(await this.hasCredential(credential))) return; const encryptedKey = await this.metadataStore.get< Cipher<"base64"> | EncryptedData @@ -147,9 +144,7 @@ class KeyStore { ); if (options?.permanent) { - for (const credential of await this.getCredentials()) { - await this.metadataStore.delete(this.getCredentialKey(credential)); - } + await this.resetCredentials(); await this.storeKey(key); this.key = undefined; } else this.key = key; @@ -228,6 +223,31 @@ class KeyStore { ); } + public async hasCredential(credential: SerializableCredential) { + const credentials = await this.getCredentials(); + const index = credentials.findIndex( + (c) => c.type === credential.type && c.id === credential.id + ); + return index > -1; + } + + public async resetCredentials() { + for (const credential of await this.getCredentials()) { + await this.metadataStore.delete(this.getCredentialKey(credential)); + } + await this.metadataStore.delete("credentials"); + } + + public async setCredential(credential: SerializableCredential) { + const credentials = await this.getCredentials(); + const index = credentials.findIndex( + (c) => c.type === credential.type && c.id === credential.id + ); + if (index > -1) return; + credentials.push(credential); + await this.metadataStore.set("credentials", credentials); + } + public async set(name: string, value: string) { if (await this.isLocked()) throw new Error("Please unlock the key store to set values."); diff --git a/apps/web/src/views/app-lock.tsx b/apps/web/src/views/app-lock.tsx index 28383426d..a5d439ea5 100644 --- a/apps/web/src/views/app-lock.tsx +++ b/apps/web/src/views/app-lock.tsx @@ -83,7 +83,8 @@ export default function AppLock(props: PropsWithChildren) { alignItems: "center", justifyContent: "center", height: "100%", - flexDirection: "column" + flexDirection: "column", + overflowY: "auto" }} onSubmit={async (e) => { e.preventDefault();