From 1b057029c868118a94224e486e1415ac90169c40 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sun, 5 Feb 2023 16:04:52 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE=20=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BA=D0=BB=D1=8E=D1=87=D0=B0=20=D0=B4=D0=BE=D1=81=D1=82=D1=83?= =?UTF-8?q?=D0=BF=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reader/ServerStorage/ServerStorage.vue | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/client/components/Reader/ServerStorage/ServerStorage.vue b/client/components/Reader/ServerStorage/ServerStorage.vue index 24f4b78b..a2eba6b5 100644 --- a/client/components/Reader/ServerStorage/ServerStorage.vue +++ b/client/components/Reader/ServerStorage/ServerStorage.vue @@ -22,10 +22,12 @@ const ssCacheStore = localForage.createInstance({ const componentOptions = { watch: { serverSyncEnabled: function() { - this.serverSyncEnabledChanged(); + if (this.inited) + this.serverSyncEnabledChanged(); }, serverStorageKey: function() { - this.serverStorageKeyChanged(true); + if (this.inited) + this.serverStorageKeyChanged(true); }, settings: function() { this.debouncedSaveSettings(); @@ -85,6 +87,13 @@ class ServerStorage { if (!this.cachedRecentMod) await this.cleanCachedRecent('cachedRecentMod'); + //подстраховка хранения ключа, восстановим из IndexedDB при проблемах в localStorage + if (!this.serverStorageKey) { + const key = await ssCacheStore.getItem('storageKey'); + if (key) + this.commit('reader/setServerStorageKey', key); + } + if (!this.serverStorageKey) { //генерируем новый ключ await this.generateNewServerStorageKey(); @@ -123,6 +132,7 @@ class ServerStorage { async generateNewServerStorageKey() { const key = utils.toBase58(utils.randomArray(32)); this.commit('reader/setServerStorageKey', key); + //дождемся serverStorageKeyChanged, событие по watch не работает при this.inited == false await this.serverStorageKeyChanged(true); } @@ -141,6 +151,10 @@ class ServerStorage { async serverStorageKeyChanged(force) { if (this.prevServerStorageKey != this.serverStorageKey) { this.prevServerStorageKey = this.serverStorageKey; + + //сохраним ключ также в IndexedDB, чтобы была возможность восстановить при проблемах с localStorage + await ssCacheStore.setItem('storageKey', this.serverStorageKey); + this.hashedStorageKey = utils.toBase58(cryptoUtils.sha256(this.serverStorageKey)); this.keyInited = true;