diff --git a/src/global/actions/api/initial.ts b/src/global/actions/api/initial.ts index 5aa824511..43d91a168 100644 --- a/src/global/actions/api/initial.ts +++ b/src/global/actions/api/initial.ts @@ -202,7 +202,7 @@ addActionHandler('deleteDeviceToken', (global) => { addActionHandler('lockScreen', async (global) => { const sessionJson = JSON.stringify({ ...loadStoredSession(), userId: global.currentUserId }); - const globalJson = serializeGlobal(); + const globalJson = serializeGlobal(global); await encryptSession(sessionJson, globalJson); forgetPasscode(); diff --git a/src/global/actions/ui/passcode.ts b/src/global/actions/ui/passcode.ts index bf7fe0efc..2633e229d 100644 --- a/src/global/actions/ui/passcode.ts +++ b/src/global/actions/ui/passcode.ts @@ -3,7 +3,7 @@ import { addActionHandler, setGlobal, getGlobal } from '../../index'; import { clearPasscodeSettings, updatePasscodeSettings } from '../../reducers'; import { clearStoredSession, loadStoredSession, storeSession } from '../../../util/sessions'; import { clearEncryptedSession, encryptSession, setupPasscode } from '../../../util/passcode'; -import { serializeGlobal } from '../../cache'; +import { forceUpdateCache, serializeGlobal } from '../../cache'; import { onBeforeUnload } from '../../../util/schedulers'; onBeforeUnload(() => { @@ -19,7 +19,11 @@ addActionHandler('setPasscode', async (global, actions, { passcode }) => { await setupPasscode(passcode); const sessionJson = JSON.stringify({ ...loadStoredSession(), userId: global.currentUserId }); - const globalJson = serializeGlobal(); + const globalJson = serializeGlobal(updatePasscodeSettings(getGlobal(), { + hasPasscode: true, + error: undefined, + isLoading: false, + })); await encryptSession(sessionJson, globalJson); @@ -28,6 +32,8 @@ addActionHandler('setPasscode', async (global, actions, { passcode }) => { error: undefined, isLoading: false, })); + + forceUpdateCache(true); }); addActionHandler('clearPasscode', (global) => { diff --git a/src/global/cache.ts b/src/global/cache.ts index 2a39c1659..08275670e 100644 --- a/src/global/cache.ts +++ b/src/global/cache.ts @@ -260,15 +260,21 @@ function updateCache() { return; } + forceUpdateCache(); +} + +export function forceUpdateCache(noEncrypt = false) { + const global = getGlobal(); const { hasPasscode, isScreenLocked } = global.passcode; - const serializedGlobal = serializeGlobal(); + const serializedGlobal = serializeGlobal(global); if (hasPasscode) { - if (!isScreenLocked) { + if (!isScreenLocked && !noEncrypt) { void encryptSession(undefined, serializedGlobal); } - localStorage.setItem(GLOBAL_STATE_CACHE_KEY, JSON.stringify(clearGlobalForLockScreen(global))); + const serializedGlobalClean = JSON.stringify(clearGlobalForLockScreen(global)); + localStorage.setItem(GLOBAL_STATE_CACHE_KEY, serializedGlobalClean); return; } @@ -276,8 +282,7 @@ function updateCache() { localStorage.setItem(GLOBAL_STATE_CACHE_KEY, serializedGlobal); } -export function serializeGlobal() { - const global = getGlobal(); +export function serializeGlobal(global: GlobalState) { const reducedGlobal: GlobalState = { ...INITIAL_STATE, ...pick(global, [