diff --git a/desktop/src/main/ipc.ts b/desktop/src/main/ipc.ts index 3565beba56..c5a9fdb9d4 100644 --- a/desktop/src/main/ipc.ts +++ b/desktop/src/main/ipc.ts @@ -28,8 +28,8 @@ import { } from "../services/imageProcessor"; import { clearStores, - getEncryptionKey, - setEncryptionKey, + encryptionKey, + saveEncryptionKey, } from "../services/store"; import { getElectronFilesFromGoogleZip, @@ -100,11 +100,11 @@ export const attachIPCHandlers = () => { ipcMain.on("clearStores", () => clearStores()); - ipcMain.handle("setEncryptionKey", (_, encryptionKey) => - setEncryptionKey(encryptionKey), + ipcMain.handle("saveEncryptionKey", (_, encryptionKey) => + saveEncryptionKey(encryptionKey), ); - ipcMain.handle("getEncryptionKey", () => getEncryptionKey()); + ipcMain.handle("encryptionKey", () => encryptionKey()); // - App update diff --git a/desktop/src/preload.ts b/desktop/src/preload.ts index 0dc87400f5..f3e3412e29 100644 --- a/desktop/src/preload.ts +++ b/desktop/src/preload.ts @@ -63,11 +63,11 @@ const openLogDirectory = (): Promise => const clearStores = () => ipcRenderer.send("clearStores"); -const setEncryptionKey = (encryptionKey: string): Promise => - ipcRenderer.invoke("setEncryptionKey", encryptionKey); +const encryptionKey = (): Promise => + ipcRenderer.invoke("encryptionKey"); -const getEncryptionKey = (): Promise => - ipcRenderer.invoke("getEncryptionKey"); +const saveEncryptionKey = (encryptionKey: string): Promise => + ipcRenderer.invoke("saveEncryptionKey", encryptionKey); const registerForegroundEventListener = (onForeground: () => void) => { ipcRenderer.removeAllListeners("app-in-foreground"); @@ -305,8 +305,8 @@ contextBridge.exposeInMainWorld("electron", { openDirectory, openLogDirectory, clearStores, - getEncryptionKey, - setEncryptionKey, + encryptionKey, + saveEncryptionKey, registerForegroundEventListener, // - App update diff --git a/desktop/src/services/store.ts b/desktop/src/services/store.ts index 30eb57cfea..a484080f53 100644 --- a/desktop/src/services/store.ts +++ b/desktop/src/services/store.ts @@ -11,16 +11,15 @@ export const clearStores = () => { watchStore.clear(); }; -export async function setEncryptionKey(encryptionKey: string) { +export const saveEncryptionKey = async (encryptionKey: string) => { const encryptedKey: Buffer = await safeStorage.encryptString(encryptionKey); const b64EncryptedKey = Buffer.from(encryptedKey).toString("base64"); safeStorageStore.set("encryptionKey", b64EncryptedKey); -} +}; -export async function getEncryptionKey(): Promise { +export const encryptionKey = async (): Promise => { const b64EncryptedKey = safeStorageStore.get("encryptionKey"); - if (b64EncryptedKey) { - const keyBuffer = Buffer.from(b64EncryptedKey, "base64"); - return await safeStorage.decryptString(keyBuffer); - } -} + if (!b64EncryptedKey) return undefined; + const keyBuffer = Buffer.from(b64EncryptedKey, "base64"); + return await safeStorage.decryptString(keyBuffer); +}; diff --git a/web/apps/photos/src/pages/index.tsx b/web/apps/photos/src/pages/index.tsx index f290200866..760549bdbe 100644 --- a/web/apps/photos/src/pages/index.tsx +++ b/web/apps/photos/src/pages/index.tsx @@ -133,9 +133,9 @@ export default function LandingPage() { const electron = globalThis.electron; if (!key && electron) { try { - key = await electron.getEncryptionKey(); + key = await electron.encryptionKey(); } catch (e) { - log.error("getEncryptionKey failed", e); + log.error("Failed to get encryption key from electron", e); } if (key) { await saveKeyInSessionStore( diff --git a/web/packages/accounts/pages/credentials.tsx b/web/packages/accounts/pages/credentials.tsx index bf5943238a..3e8fbabbe6 100644 --- a/web/packages/accounts/pages/credentials.tsx +++ b/web/packages/accounts/pages/credentials.tsx @@ -70,9 +70,9 @@ export default function Credentials({ appContext, appName }: PageProps) { const electron = globalThis.electron; if (!key && electron) { try { - key = await electron.getEncryptionKey(); + key = await electron.encryptionKey(); } catch (e) { - log.error("getEncryptionKey failed", e); + log.error("Failed to get encryption key from electron", e); } if (key) { await saveKeyInSessionStore( diff --git a/web/packages/next/types/ipc.ts b/web/packages/next/types/ipc.ts index 167f933382..453b88c36b 100644 --- a/web/packages/next/types/ipc.ts +++ b/web/packages/next/types/ipc.ts @@ -71,9 +71,19 @@ export interface Electron { */ clearStores: () => void; - setEncryptionKey: (encryptionKey: string) => Promise; + /** + * Return the previously saved encryption key from persintent safe storage. + * + * If no such key is found, return `undefined`. + * + * @see {@link saveEncryptionKey}. + */ + encryptionKey: () => Promise; - getEncryptionKey: () => Promise; + /** + * Save the given {@link encryptionKey} into persistent safe storage. + */ + saveEncryptionKey: (encryptionKey: string) => Promise; registerForegroundEventListener: (onForeground: () => void) => void; diff --git a/web/packages/shared/crypto/helpers.ts b/web/packages/shared/crypto/helpers.ts index 9250b4ab78..89fc27840d 100644 --- a/web/packages/shared/crypto/helpers.ts +++ b/web/packages/shared/crypto/helpers.ts @@ -103,7 +103,7 @@ export const saveKeyInSessionStore = async ( setKey(keyType, sessionKeyAttributes); const electron = globalThis.electron; if (electron && !fromDesktop && keyType === SESSION_KEYS.ENCRYPTION_KEY) { - electron.setEncryptionKey(key); + electron.saveEncryptionKey(key); } };