Работа над ServerStorage
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user