diff --git a/package-lock.json b/package-lock.json index b6dcfe3e..f4d149a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "Liberama", - "version": "0.8.1", + "version": "0.8.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -12807,14 +12807,6 @@ } } }, - "webdav-fs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webdav-fs/-/webdav-fs-2.0.0.tgz", - "integrity": "sha512-TjqQKNnf1NuPiMEFJVrmWUYpIEgUxWRktddu5JhQsyxFIOyAJT0cpLyaoOdAp/yrG1yXgDsa6ZL9z+h4Z71zWA==", - "requires": { - "webdav": "^2.0.0" - } - }, "webpack": { "version": "4.40.2", "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.40.2.tgz", diff --git a/package.json b/package.json index 99e0e533..3be87510 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "vue-router": "^3.1.3", "vuex": "^3.1.1", "vuex-persistedstate": "^2.5.4", - "webdav-fs": "^2.0.0", + "webdav": "^2.10.1", "zip-stream": "^2.1.2" } } diff --git a/server/core/Reader/ReaderWorker.js b/server/core/Reader/ReaderWorker.js index d2b6a92f..014a2e76 100644 --- a/server/core/Reader/ReaderWorker.js +++ b/server/core/Reader/ReaderWorker.js @@ -31,7 +31,9 @@ class ReaderWorker { this.remoteWebDavStorage = false; if (config.remoteWebDavStorage) { - this.remoteWebDavStorage = new RemoteWebDavStorage(config.remoteWebDavStorage); + this.remoteWebDavStorage = new RemoteWebDavStorage( + Object.assign({maxContentLength: config.maxUploadFileSize}, config.remoteWebDavStorage) + ); } this.periodicCleanDir(this.config.tempPublicDir, this.config.maxTempPublicDirSize, 60*60*1000);//1 раз в час diff --git a/server/core/RemoteWebDavStorage.js b/server/core/RemoteWebDavStorage.js index e7d0ad83..21d0c107 100644 --- a/server/core/RemoteWebDavStorage.js +++ b/server/core/RemoteWebDavStorage.js @@ -1,62 +1,48 @@ const fs = require('fs-extra'); const path = require('path'); -const WebDavFS = require('webdav-fs'); +const { createClient } = require('webdav'); class RemoteWebDavStorage { constructor(config) { - const opts = Object.assign({}, config); - this.wfs = WebDavFS(config.url, opts); + this.config = Object.assign({}, config); + this.config.maxContentLength = this.config.maxContentLength || 10*1024*1024; + this.wdc = createClient(config.url, this.config); } - stat(filename) { - return new Promise((resolve, reject) => { - this.wfs.stat(filename, function(err, fileStat) { - if (err) - reject(err); - resolve(fileStat); - }); - }); + _convertStat(data) { + return { + isDirectory: function() { + return data.type === "directory"; + }, + isFile: function() { + return data.type === "file"; + }, + mtime: (new Date(data.lastmod)).getTime(), + name: data.basename, + size: data.size || 0 + }; } - writeFile(filename, data) { - return new Promise((resolve, reject) => { - this.wfs.writeFile(filename, data, 'binary', function(err) { - if (err) - reject(err); - resolve(); - }); - }); + async stat(filename) { + const stat = await this.wdc.stat(filename); + return this._convertStat(stat); } - unlink(filename) { - return new Promise((resolve, reject) => { - this.wfs.unlink(filename, function(err) { - if (err) - reject(err); - resolve(); - }); - }); + async writeFile(filename, data) { + return await this.wdc.putFileContents(filename, data, { maxContentLength: this.config.maxContentLength }) } - readFile(filename) { - return new Promise((resolve, reject) => { - this.wfs.readFile(filename, 'binary', function(err, data) { - if (err) - reject(err); - resolve(data); - }); - }); + async unlink(filename) { + return await this.wdc.deleteFile(filename); } - mkdir(dirname) { - return new Promise((resolve, reject) => { - this.wfs.mkdir(dirname, function(err) { - if (err) - reject(err); - resolve(); - }); - }); + async readFile(filename) { + return await this.wdc.getFileContents(filename, { maxContentLength: this.config.maxContentLength }) + } + + async mkdir(dirname) { + return await this.wdc.createDirectory(dirname); } async putFile(filename) {