Lock Screen: Force cache on setup

This commit is contained in:
Alexander Zinchuk 2022-06-01 04:45:35 +04:00
parent c5c44eddd2
commit 9b2cb2730a
3 changed files with 19 additions and 8 deletions

View File

@ -202,7 +202,7 @@ addActionHandler('deleteDeviceToken', (global) => {
addActionHandler('lockScreen', async (global) => { addActionHandler('lockScreen', async (global) => {
const sessionJson = JSON.stringify({ ...loadStoredSession(), userId: global.currentUserId }); const sessionJson = JSON.stringify({ ...loadStoredSession(), userId: global.currentUserId });
const globalJson = serializeGlobal(); const globalJson = serializeGlobal(global);
await encryptSession(sessionJson, globalJson); await encryptSession(sessionJson, globalJson);
forgetPasscode(); forgetPasscode();

View File

@ -3,7 +3,7 @@ import { addActionHandler, setGlobal, getGlobal } from '../../index';
import { clearPasscodeSettings, updatePasscodeSettings } from '../../reducers'; import { clearPasscodeSettings, updatePasscodeSettings } from '../../reducers';
import { clearStoredSession, loadStoredSession, storeSession } from '../../../util/sessions'; import { clearStoredSession, loadStoredSession, storeSession } from '../../../util/sessions';
import { clearEncryptedSession, encryptSession, setupPasscode } from '../../../util/passcode'; import { clearEncryptedSession, encryptSession, setupPasscode } from '../../../util/passcode';
import { serializeGlobal } from '../../cache'; import { forceUpdateCache, serializeGlobal } from '../../cache';
import { onBeforeUnload } from '../../../util/schedulers'; import { onBeforeUnload } from '../../../util/schedulers';
onBeforeUnload(() => { onBeforeUnload(() => {
@ -19,7 +19,11 @@ addActionHandler('setPasscode', async (global, actions, { passcode }) => {
await setupPasscode(passcode); await setupPasscode(passcode);
const sessionJson = JSON.stringify({ ...loadStoredSession(), userId: global.currentUserId }); 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); await encryptSession(sessionJson, globalJson);
@ -28,6 +32,8 @@ addActionHandler('setPasscode', async (global, actions, { passcode }) => {
error: undefined, error: undefined,
isLoading: false, isLoading: false,
})); }));
forceUpdateCache(true);
}); });
addActionHandler('clearPasscode', (global) => { addActionHandler('clearPasscode', (global) => {

View File

@ -260,15 +260,21 @@ function updateCache() {
return; return;
} }
forceUpdateCache();
}
export function forceUpdateCache(noEncrypt = false) {
const global = getGlobal();
const { hasPasscode, isScreenLocked } = global.passcode; const { hasPasscode, isScreenLocked } = global.passcode;
const serializedGlobal = serializeGlobal(); const serializedGlobal = serializeGlobal(global);
if (hasPasscode) { if (hasPasscode) {
if (!isScreenLocked) { if (!isScreenLocked && !noEncrypt) {
void encryptSession(undefined, serializedGlobal); 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; return;
} }
@ -276,8 +282,7 @@ function updateCache() {
localStorage.setItem(GLOBAL_STATE_CACHE_KEY, serializedGlobal); localStorage.setItem(GLOBAL_STATE_CACHE_KEY, serializedGlobal);
} }
export function serializeGlobal() { export function serializeGlobal(global: GlobalState) {
const global = getGlobal();
const reducedGlobal: GlobalState = { const reducedGlobal: GlobalState = {
...INITIAL_STATE, ...INITIAL_STATE,
...pick(global, [ ...pick(global, [