diff --git a/client/components/Reader/ServerStorage/ServerStorage.vue b/client/components/Reader/ServerStorage/ServerStorage.vue index 0db07d4b..27280df3 100644 --- a/client/components/Reader/ServerStorage/ServerStorage.vue +++ b/client/components/Reader/ServerStorage/ServerStorage.vue @@ -17,6 +17,9 @@ const maxSetTries = 5; export default @Component({ watch: { + serverStorageKey: function() { + this.serverStorageKeyChanged(); + }, profiles: function() { this.saveProfiles(); }, @@ -25,17 +28,27 @@ export default @Component({ class ServerStorage extends Vue { created() { this.commit = this.$store.commit; + this.prevServerStorageKey = null; + this.$root.$on('generateNewServerStorageKey', () => {this.generateNewServerStorageKey()}); } async init() { if (!this.serverStorageKey) { //генерируем новый ключ - this.generateNewServerStorageKey(); + await this.generateNewServerStorageKey(); + } else { + await this.serverStorageKeyChanged(); } - this.hashedStorageKey = utils.toBase58(cryptoUtils.sha256(this.serverStorageKey)); + } - await this.loadProfiles(); - this.checkCurrentProfile(); + async serverStorageKeyChanged() { + if (this.prevServerStorageKey != this.serverStorageKey) { + this.prevServerStorageKey = this.serverStorageKey; + this.hashedStorageKey = utils.toBase58(cryptoUtils.sha256(this.serverStorageKey)); + + await this.loadProfiles(); + this.checkCurrentProfile(); + } } get serverSyncEnabled() { @@ -94,11 +107,10 @@ class ServerStorage extends Vue { if (prof.rev == 0) prof.data = {}; + this.oldProfiles = prof.data; this.commit('reader/setProfiles', prof.data); this.commit('reader/setProfilesRev', prof.rev); - this.oldProfiles = this.profiles; - this.notifySuccessIfNeeded(oldRev, prof.rev); } else { this.warning(`Неверный ответ сервера: ${prof.state}`); @@ -142,9 +154,10 @@ class ServerStorage extends Vue { } } - generateNewServerStorageKey() { + async generateNewServerStorageKey() { const key = utils.toBase58(utils.randomArray(32)); this.commit('reader/setServerStorageKey', key); + await this.serverStorageKeyChanged(); } async storageCheck(items) { diff --git a/client/components/Reader/SettingsPage/SettingsPage.vue b/client/components/Reader/SettingsPage/SettingsPage.vue index 5aa0a60b..7d650333 100644 --- a/client/components/Reader/SettingsPage/SettingsPage.vue +++ b/client/components/Reader/SettingsPage/SettingsPage.vue @@ -10,7 +10,7 @@ -
Управление синхронизацией настроек
+
Управление синхронизацией данных
Включить синхронизацию с сервером @@ -51,7 +51,7 @@
Ключ доступа позволяет восстановить профили с настройками и список читаемых книг. - Для этого необходимо передать ключ на устройство через почту, мессенджер или другим способом. + Для этого необходимо передать ключ на новое устройство через почту, мессенджер или другим способом.
@@ -729,6 +729,23 @@ class SettingsPage extends Vue { } async generateServerStorageKey() { + try { + const result = await this.$prompt(`Предупреждение! Изменение ключа доступа приведет к потере всех профилей и читаемых книг, привязанных к предыдущему ключу.` + + `

Введите 'да' для подтверждения генерации нового ключа:`, '', { + dangerouslyUseHTMLString: true, + confirmButtonText: 'OK', + cancelButtonText: 'Отмена', + inputValidator: (str) => { if (str && str.toLowerCase() === 'да') return true; else return 'Генерация не подтверждена'; }, + type: 'warning' + }); + + if (result.value && result.value.toLowerCase() == 'да') { + this.$root.$emit('generateNewServerStorageKey'); + } + } catch (e) { + // + } + } keyHook(event) {