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) => {
const sessionJson = JSON.stringify({ ...loadStoredSession(), userId: global.currentUserId });
const globalJson = serializeGlobal();
const globalJson = serializeGlobal(global);
await encryptSession(sessionJson, globalJson);
forgetPasscode();

View File

@ -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) => {

View File

@ -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, [