diff --git a/client/api/misc.js b/client/api/misc.js index 9c4f3a0c..0ece914b 100644 --- a/client/api/misc.js +++ b/client/api/misc.js @@ -4,7 +4,8 @@ class Misc { async loadConfig() { const query = {params: [ - 'name', 'version', 'mode', 'maxUploadFileSize', 'useExternalBookConverter', 'acceptFileExt', 'bucEnabled', 'branch', 'networkLibraryLink', + 'name', 'version', 'mode', 'maxUploadFileSize', 'useExternalBookConverter', + 'acceptFileExt', 'bucEnabled', 'branch', 'networkLibraryLink', 'restricted' ]}; const config = await wsc.message(await wsc.send(Object.assign({action: 'get-config'}, query))); diff --git a/client/components/Reader/Reader.vue b/client/components/Reader/Reader.vue index e3910f51..00949ab3 100644 --- a/client/components/Reader/Reader.vue +++ b/client/components/Reader/Reader.vue @@ -416,7 +416,7 @@ class Reader { await wallpaperStorage.init(); await coversStorage.init(); - await bookManager.init(this.settings); + await bookManager.init(this.settings, this.restricted); bookManager.addEventListener(this.bookManagerEvent); if (this.$root.getRootRoute() == '/reader') { @@ -770,6 +770,10 @@ class Reader { return this.$store.state.config.bucEnabled && this.bucEnabled; } + get restricted() { + return this.$store.state.config.restricted; + } + get routeParamUrl() { let result = ''; const path = this.$route.fullPath; diff --git a/client/components/Reader/share/bmHelper.js b/client/components/Reader/share/bmHelper.js new file mode 100644 index 00000000..fa946cdc --- /dev/null +++ b/client/components/Reader/share/bmHelper.js @@ -0,0 +1,8 @@ +export default { + restrictedData: ` + +Нарушение авторских прав +

Книга не загружена по причине нарушения авторских прав.

+
`, + +}; \ No newline at end of file diff --git a/client/components/Reader/share/bookManager.js b/client/components/Reader/share/bookManager.js index 73b7c390..4f69bb92 100644 --- a/client/components/Reader/share/bookManager.js +++ b/client/components/Reader/share/bookManager.js @@ -3,6 +3,7 @@ import path from 'path-browserify'; import _ from 'lodash'; import BookParser from './BookParser'; +import bmHelper from './bmHelper'; import readerApi from '../../../api/reader'; import coversStorage from './coversStorage'; import * as utils from '../../../share/utils'; @@ -26,9 +27,10 @@ const bmRecentStoreNew = localForage.createInstance({ }); class BookManager { - async init(settings) { + async init(settings, restricted) { this.loaded = false; this.settings = settings; + this.restricted = restricted; this.eventListeners = []; this.books = {}; @@ -232,6 +234,18 @@ class BookManager { return inflator.result; } + isUrlAllowed(url) { + const restrictedSites = this.restricted?.sites; + if (restrictedSites) { + for (const site of restrictedSites) { + if (url.indexOf(site) === 0) + return false; + } + } + + return true; + } + async addBook(newBook, callback) { let meta = {url: newBook.url, path: newBook.path}; @@ -348,6 +362,10 @@ class BookManager { } async parseBook(meta, data, callback) { + if (!this.isUrlAllowed(meta.url)) { + data = bmHelper.restrictedData; + } + const parsed = new BookParser(this.settings); const parsedMeta = await parsed.parse(data, callback); diff --git a/client/components/Reader/versionHistory.js b/client/components/Reader/versionHistory.js index 90ae6660..b9c84790 100644 --- a/client/components/Reader/versionHistory.js +++ b/client/components/Reader/versionHistory.js @@ -1,4 +1,17 @@ export const versionHistory = [ +{ + version: '1.2.5', + releaseDate: '2024-10-03', + showUntil: '2024-10-02', + content: +` + + +` +}, + { version: '1.2.4', releaseDate: '2024-08-27', diff --git a/package-lock.json b/package-lock.json index b9a1d88e..3c9c769f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "liberama", - "version": "1.2.3", + "version": "1.2.5", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "liberama", - "version": "1.2.3", + "version": "1.2.5", "hasInstallScript": true, "license": "CC0-1.0", "dependencies": { diff --git a/package.json b/package.json index 52b71fba..bccfac5a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "liberama", - "version": "1.2.4", + "version": "1.2.5", "author": "Book Pauk ", "license": "CC0-1.0", "repository": "bookpauk/liberama", diff --git a/server/config/base.js b/server/config/base.js index 7f9daa00..7484c7ff 100644 --- a/server/config/base.js +++ b/server/config/base.js @@ -18,7 +18,8 @@ module.exports = { useExternalBookConverter: false, acceptFileExt: '.fb2, .fb3, .html, .txt, .zip, .bz2, .gz, .rar, .epub, .mobi, .rtf, .doc, .docx, .pdf, .djvu, .jpg, .jpeg, .png', - webConfigParams: ['name', 'version', 'mode', 'maxUploadFileSize', 'useExternalBookConverter', 'acceptFileExt', 'bucEnabled', 'branch', 'networkLibraryLink'], + restricted: {}, + webConfigParams: ['name', 'version', 'mode', 'maxUploadFileSize', 'useExternalBookConverter', 'acceptFileExt', 'bucEnabled', 'branch', 'networkLibraryLink', 'restricted'], jembaDb: [ { diff --git a/server/config/index.js b/server/config/index.js index bf666b00..dd6249a8 100644 --- a/server/config/index.js +++ b/server/config/index.js @@ -56,6 +56,7 @@ class ConfigManager { await fs.ensureDir(config.dataDir); this._userConfigFile = `${config.dataDir}/config.json`; + this._restrictedFile = `${config.dataDir}/restricted.json`; this._config = config; this.inited = true; @@ -75,6 +76,10 @@ class ConfigManager { return this._userConfigFile; } + get restrictedFile() { + return this._restrictedFile; + } + set userConfigFile(value) { if (value) this._userConfigFile = value; @@ -100,6 +105,12 @@ class ConfigManager { } else { await this.save(); } + + if (await fs.pathExists(this.restrictedFile)) { + const data = JSON.parse(await fs.readFile(this.restrictedFile, 'utf8')); + + this.config = {restricted: data}; + } } catch(e) { throw new Error(`Error while loading "${this.userConfigFile}": ${e.message}`); }