From fcd47d9b853c0d7b686edf8824658e7506e62c6c Mon Sep 17 00:00:00 2001 From: gbubemismith Date: Tue, 10 Dec 2024 12:31:50 -0500 Subject: [PATCH] added decrypted folders state --- .../vault/services/key-state/folder.state.ts | 50 +++---------------- 1 file changed, 8 insertions(+), 42 deletions(-) diff --git a/libs/common/src/vault/services/key-state/folder.state.ts b/libs/common/src/vault/services/key-state/folder.state.ts index 35f941274b5..f54bace287a 100644 --- a/libs/common/src/vault/services/key-state/folder.state.ts +++ b/libs/common/src/vault/services/key-state/folder.state.ts @@ -1,57 +1,23 @@ -import { firstValueFrom } from "rxjs"; import { Jsonify } from "type-fest"; -import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; -import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { Utils } from "@bitwarden/common/platform/misc/utils"; -import { UserId } from "@bitwarden/common/types/guid"; -import { KeyService } from "@bitwarden/key-management"; - -import { DeriveDefinition, FOLDER_DISK, UserKeyDefinition } from "../../../platform/state"; +import { FOLDER_DISK, FOLDER_MEMORY, UserKeyDefinition } from "../../../platform/state"; import { FolderData } from "../../models/data/folder.data"; -import { Folder } from "../../models/domain/folder"; import { FolderView } from "../../models/view/folder.view"; export const FOLDER_ENCRYPTED_FOLDERS = UserKeyDefinition.record( FOLDER_DISK, - "folders", + "folder", { deserializer: (obj: Jsonify) => FolderData.fromJSON(obj), clearOn: ["logout"], }, ); -export const FOLDER_DECRYPTED_FOLDERS = new DeriveDefinition< - [UserId, Record], - FolderView[], +export const FOLDER_DECRYPTED_FOLDERS = new UserKeyDefinition( + FOLDER_MEMORY, + "folder", { - encryptService: EncryptService; - i18nService: I18nService; - keyService: KeyService; - } ->(FOLDER_DISK, "decryptedFolders", { - deserializer: (obj) => obj.map((f) => FolderView.fromJSON(f)), - derive: async ([userId, folderData], { encryptService, i18nService, keyService }) => { - if (!folderData) { - return []; - } - - const folders = Object.values(folderData).map((f) => new Folder(f)); - - const userKey = await firstValueFrom(keyService.userKey$(userId)); - if (!userKey) { - return []; - } - - const decryptFolderPromises = folders.map((f) => f.decryptWithKey(userKey, encryptService)); - const decryptedFolders = await Promise.all(decryptFolderPromises); - - decryptedFolders.sort(Utils.getSortFunction(i18nService, "name")); - - const noneFolder = new FolderView(); - noneFolder.name = i18nService.t("noneFolder"); - decryptedFolders.push(noneFolder); - - return decryptedFolders; + deserializer: (obj: Jsonify) => obj?.map((f) => FolderView.fromJSON(f)) ?? [], + clearOn: ["logout", "lock"], }, -}); +);