Работа над ServerStorage
This commit is contained in:
@@ -1,5 +1,8 @@
|
|||||||
|
import _ from 'lodash';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import {sleep} from '../share/utils';
|
import {Buffer} from 'safe-buffer';
|
||||||
|
|
||||||
|
import * as utils from '../share/utils';
|
||||||
|
|
||||||
const api = axios.create({
|
const api = axios.create({
|
||||||
baseURL: '/api/reader'
|
baseURL: '/api/reader'
|
||||||
@@ -41,7 +44,7 @@ class Reader {
|
|||||||
throw new Error(errMes);
|
throw new Error(errMes);
|
||||||
}
|
}
|
||||||
if (i > 0)
|
if (i > 0)
|
||||||
await sleep(refreshPause);
|
await utils.sleep(refreshPause);
|
||||||
|
|
||||||
i++;
|
i++;
|
||||||
if (i > 120*1000/refreshPause) {//2 мин ждем телодвижений воркера
|
if (i > 120*1000/refreshPause) {//2 мин ждем телодвижений воркера
|
||||||
@@ -116,18 +119,6 @@ class Reader {
|
|||||||
|
|
||||||
return response.data;
|
return response.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
storageCheck(items) {
|
|
||||||
return this.storage({action: 'check', items});
|
|
||||||
}
|
|
||||||
|
|
||||||
storageGet(items) {
|
|
||||||
return this.storage({action: 'get', items});
|
|
||||||
}
|
|
||||||
|
|
||||||
storageSet(items, force) {
|
|
||||||
return this.storage({action: 'set', force, items});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default new Reader();
|
export default new Reader();
|
||||||
@@ -7,10 +7,12 @@
|
|||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import Component from 'vue-class-component';
|
import Component from 'vue-class-component';
|
||||||
import {Buffer} from 'safe-buffer';
|
import {Buffer} from 'safe-buffer';
|
||||||
|
import _ from 'lodash';
|
||||||
|
|
||||||
import bookManager from '../share/bookManager';
|
import bookManager from '../share/bookManager';
|
||||||
import readerApi from '../../../api/reader';
|
import readerApi from '../../../api/reader';
|
||||||
import * as utils from '../../../share/utils';
|
import * as utils from '../../../share/utils';
|
||||||
|
import * as cryptoUtils from '../../../share/cryptoUtils';
|
||||||
|
|
||||||
export default @Component({
|
export default @Component({
|
||||||
})
|
})
|
||||||
@@ -20,12 +22,73 @@ class ServerStorage extends Vue {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async init() {
|
async init() {
|
||||||
|
if (!this.serverStorageKey) {
|
||||||
|
//генерируем новый ключ
|
||||||
|
this.generateNewServerStorageKey();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
get settings() {
|
get settings() {
|
||||||
return this.$store.state.reader.settings;
|
return this.$store.state.reader.settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get serverStorageKey() {
|
||||||
|
return this.$store.state.reader.serverStorageKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
generateNewServerStorageKey() {
|
||||||
|
const key = utils.toBase58(Buffer.from(utils.randomArray(32)));
|
||||||
|
this.commit('reader/setServerStorageKey', key);
|
||||||
|
}
|
||||||
|
|
||||||
|
async storageCheck(items) {
|
||||||
|
return this.decodeStorageItems(await readerApi.storage({action: 'check', items}));
|
||||||
|
}
|
||||||
|
|
||||||
|
async storageGet(items) {
|
||||||
|
return this.decodeStorageItems(await readerApi.storage({action: 'get', items}));
|
||||||
|
}
|
||||||
|
|
||||||
|
async storageSet(items, force) {
|
||||||
|
return await readerApi.storage(this.encodeStorageItems({action: 'set', force, items}));
|
||||||
|
}
|
||||||
|
|
||||||
|
encodeStorageItems(request) {
|
||||||
|
let result = Object.assign({}, request);
|
||||||
|
let items = [];
|
||||||
|
for (const item of request.items) {
|
||||||
|
if (!_.isObject(item.data))
|
||||||
|
throw new Error('encodeStorageItems: data is not an object');
|
||||||
|
|
||||||
|
let encoded = Object.assign({}, item);
|
||||||
|
|
||||||
|
const comp = utils.pako.deflate(JSON.stringify(item.data), {level: 1});
|
||||||
|
encoded.data = utils.toBase64(Buffer.from(comp));
|
||||||
|
items.push(encoded);
|
||||||
|
}
|
||||||
|
|
||||||
|
result.items = items;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
decodeStorageItems(response) {
|
||||||
|
let result = Object.assign({}, response);
|
||||||
|
let items = [];
|
||||||
|
for (const item of response.items) {
|
||||||
|
let decoded = Object.assign({}, item);
|
||||||
|
if (item.data) {
|
||||||
|
if (!_.isString(item.data))
|
||||||
|
throw new Error('decodeStorageItems: data is not a string');
|
||||||
|
|
||||||
|
const a = utils.fromBase64(item.data);
|
||||||
|
decoded.data = JSON.parse(utils.pako.inflate(a, {to: 'string'}));
|
||||||
|
}
|
||||||
|
items.push(decoded);
|
||||||
|
}
|
||||||
|
|
||||||
|
result.items = items;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ export function hexToString(str) {
|
|||||||
|
|
||||||
export function randomArray(len) {
|
export function randomArray(len) {
|
||||||
const a = new Uint8Array(len);
|
const a = new Uint8Array(len);
|
||||||
crypto.getRandomValues(a);
|
window.crypto.getRandomValues(a);
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -177,6 +177,7 @@ for (const font of webFonts)
|
|||||||
// initial state
|
// initial state
|
||||||
const state = {
|
const state = {
|
||||||
toolBarActive: true,
|
toolBarActive: true,
|
||||||
|
serverStorageKey: '',
|
||||||
settings: Object.assign({}, settingDefaults),
|
settings: Object.assign({}, settingDefaults),
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -191,6 +192,9 @@ const mutations = {
|
|||||||
setToolBarActive(state, value) {
|
setToolBarActive(state, value) {
|
||||||
state.toolBarActive = value;
|
state.toolBarActive = value;
|
||||||
},
|
},
|
||||||
|
setServerStorageKey(state, value) {
|
||||||
|
state.serverStorageKey = value;
|
||||||
|
},
|
||||||
setSettings(state, value) {
|
setSettings(state, value) {
|
||||||
state.settings = Object.assign({}, state.settings, value);
|
state.settings = Object.assign({}, state.settings, value);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user