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}`);
}