Работа над ServerStorage

This commit is contained in:
Book Pauk
2019-03-17 20:09:16 +07:00
parent 2a4ff926ae
commit 3a46a157f9
2 changed files with 39 additions and 9 deletions

View File

@@ -17,6 +17,9 @@ const maxSetTries = 5;
export default @Component({ export default @Component({
watch: { watch: {
serverStorageKey: function() {
this.serverStorageKeyChanged();
},
profiles: function() { profiles: function() {
this.saveProfiles(); this.saveProfiles();
}, },
@@ -25,17 +28,27 @@ export default @Component({
class ServerStorage extends Vue { class ServerStorage extends Vue {
created() { created() {
this.commit = this.$store.commit; this.commit = this.$store.commit;
this.prevServerStorageKey = null;
this.$root.$on('generateNewServerStorageKey', () => {this.generateNewServerStorageKey()});
} }
async init() { async init() {
if (!this.serverStorageKey) { if (!this.serverStorageKey) {
//генерируем новый ключ //генерируем новый ключ
this.generateNewServerStorageKey(); await this.generateNewServerStorageKey();
} else {
await this.serverStorageKeyChanged();
} }
this.hashedStorageKey = utils.toBase58(cryptoUtils.sha256(this.serverStorageKey)); }
await this.loadProfiles(); async serverStorageKeyChanged() {
this.checkCurrentProfile(); if (this.prevServerStorageKey != this.serverStorageKey) {
this.prevServerStorageKey = this.serverStorageKey;
this.hashedStorageKey = utils.toBase58(cryptoUtils.sha256(this.serverStorageKey));
await this.loadProfiles();
this.checkCurrentProfile();
}
} }
get serverSyncEnabled() { get serverSyncEnabled() {
@@ -94,11 +107,10 @@ class ServerStorage extends Vue {
if (prof.rev == 0) if (prof.rev == 0)
prof.data = {}; prof.data = {};
this.oldProfiles = prof.data;
this.commit('reader/setProfiles', prof.data); this.commit('reader/setProfiles', prof.data);
this.commit('reader/setProfilesRev', prof.rev); this.commit('reader/setProfilesRev', prof.rev);
this.oldProfiles = this.profiles;
this.notifySuccessIfNeeded(oldRev, prof.rev); this.notifySuccessIfNeeded(oldRev, prof.rev);
} else { } else {
this.warning(`Неверный ответ сервера: ${prof.state}`); this.warning(`Неверный ответ сервера: ${prof.state}`);
@@ -142,9 +154,10 @@ class ServerStorage extends Vue {
} }
} }
generateNewServerStorageKey() { async generateNewServerStorageKey() {
const key = utils.toBase58(utils.randomArray(32)); const key = utils.toBase58(utils.randomArray(32));
this.commit('reader/setServerStorageKey', key); this.commit('reader/setServerStorageKey', key);
await this.serverStorageKeyChanged();
} }
async storageCheck(items) { async storageCheck(items) {

View File

@@ -10,7 +10,7 @@
<!-- Профили -------------------------------------------------------------------------> <!-- Профили ------------------------------------------------------------------------->
<el-tab-pane label="Профили"> <el-tab-pane label="Профили">
<el-form :model="form" size="small" label-width="80px" @submit.native.prevent> <el-form :model="form" size="small" label-width="80px" @submit.native.prevent>
<div class="partHeader">Управление синхронизацией настроек</div> <div class="partHeader">Управление синхронизацией данных</div>
<el-form-item label=""> <el-form-item label="">
<el-checkbox v-model="serverSyncEnabled">Включить синхронизацию с сервером</el-checkbox> <el-checkbox v-model="serverSyncEnabled">Включить синхронизацию с сервером</el-checkbox>
</el-form-item> </el-form-item>
@@ -51,7 +51,7 @@
<el-form-item label=""> <el-form-item label="">
<div class="text"> <div class="text">
Ключ доступа позволяет восстановить профили с настройками и список читаемых книг. Ключ доступа позволяет восстановить профили с настройками и список читаемых книг.
Для этого необходимо передать ключ на устройство через почту, мессенджер или другим способом. Для этого необходимо передать ключ на новое устройство через почту, мессенджер или другим способом.
</div> </div>
</el-form-item> </el-form-item>
@@ -729,6 +729,23 @@ class SettingsPage extends Vue {
} }
async generateServerStorageKey() { async generateServerStorageKey() {
try {
const result = await this.$prompt(`<b>Предупреждение!</b> Изменение ключа доступа приведет к потере всех профилей и читаемых книг, привязанных к предыдущему ключу.` +
`<br><br>Введите 'да' для подтверждения генерации нового ключа:`, '', {
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) { keyHook(event) {