ServerStorage.vue 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <template>
  2. <div></div>
  3. </template>
  4. <script>
  5. //-----------------------------------------------------------------------------
  6. import Vue from 'vue';
  7. import Component from 'vue-class-component';
  8. import {Buffer} from 'safe-buffer';
  9. import _ from 'lodash';
  10. import bookManager from '../share/bookManager';
  11. import readerApi from '../../../api/reader';
  12. import * as utils from '../../../share/utils';
  13. import * as cryptoUtils from '../../../share/cryptoUtils';
  14. export default @Component({
  15. })
  16. class ServerStorage extends Vue {
  17. created() {
  18. this.commit = this.$store.commit;
  19. }
  20. async init() {
  21. if (!this.serverStorageKey) {
  22. //генерируем новый ключ
  23. this.generateNewServerStorageKey();
  24. }
  25. }
  26. get settings() {
  27. return this.$store.state.reader.settings;
  28. }
  29. get serverStorageKey() {
  30. return this.$store.state.reader.serverStorageKey;
  31. }
  32. generateNewServerStorageKey() {
  33. const key = utils.toBase58(Buffer.from(utils.randomArray(32)));
  34. this.commit('reader/setServerStorageKey', key);
  35. }
  36. async storageCheck(items) {
  37. return this.decodeStorageItems(await readerApi.storage({action: 'check', items}));
  38. }
  39. async storageGet(items) {
  40. return this.decodeStorageItems(await readerApi.storage({action: 'get', items}));
  41. }
  42. async storageSet(items, force) {
  43. return await readerApi.storage(this.encodeStorageItems({action: 'set', force, items}));
  44. }
  45. encodeStorageItems(request) {
  46. let result = Object.assign({}, request);
  47. let items = [];
  48. for (const item of request.items) {
  49. if (!_.isObject(item.data))
  50. throw new Error('encodeStorageItems: data is not an object');
  51. let encoded = Object.assign({}, item);
  52. const comp = utils.pako.deflate(JSON.stringify(item.data), {level: 1});
  53. encoded.data = utils.toBase64(Buffer.from(comp));
  54. items.push(encoded);
  55. }
  56. result.items = items;
  57. return result;
  58. }
  59. decodeStorageItems(response) {
  60. let result = Object.assign({}, response);
  61. let items = [];
  62. for (const item of response.items) {
  63. let decoded = Object.assign({}, item);
  64. if (item.data) {
  65. if (!_.isString(item.data))
  66. throw new Error('decodeStorageItems: data is not a string');
  67. const a = utils.fromBase64(item.data);
  68. decoded.data = JSON.parse(utils.pako.inflate(a, {to: 'string'}));
  69. }
  70. items.push(decoded);
  71. }
  72. result.items = items;
  73. return result;
  74. }
  75. }
  76. //-----------------------------------------------------------------------------
  77. </script>