From 8000ebec8f7335fd6a4a30f1e84e869f7bd69c0e Mon Sep 17 00:00:00 2001 From: Justin Kromlinger Date: Sat, 26 Oct 2019 00:20:02 +0200 Subject: [PATCH] refactor: use dataPath variable as given in file config (#1118) * Actually use path variables as given in default config * Drop paths.content, avoid populating the global WIKI object --- config.sample.yml | 6 ++++++ server/app/data.yml | 4 +--- server/controllers/upload.js | 2 +- server/core/sideloader.js | 8 ++++---- server/core/system.js | 2 +- server/jobs/purge-uploads.js | 2 +- server/models/assets.js | 12 ++++++------ server/models/pages.js | 8 ++++---- server/modules/storage/git/storage.js | 4 ++-- server/setup.js | 7 +++---- 10 files changed, 29 insertions(+), 26 deletions(-) diff --git a/config.sample.yml b/config.sample.yml index afb8f563..10288df1 100644 --- a/config.sample.yml +++ b/config.sample.yml @@ -105,3 +105,9 @@ uploads: # download the offline files for sideloading. offline: false + +# --------------------------------------------------------------------- +# Data Path +# --------------------------------------------------------------------- +# Writeable data path for Wiki.js, mainly for cache and user uploads. +dataPath: ./data \ No newline at end of file diff --git a/server/app/data.yml b/server/app/data.yml index 77583fd2..c7de22fe 100644 --- a/server/app/data.yml +++ b/server/app/data.yml @@ -57,9 +57,7 @@ defaults: # System defaults channel: BETA setup: false - paths: - content: ./content - data: ./data + dataPath: ./data cors: credentials: true maxAge: 600 diff --git a/server/controllers/upload.js b/server/controllers/upload.js index 9ee5fa5b..65cd4d15 100644 --- a/server/controllers/upload.js +++ b/server/controllers/upload.js @@ -11,7 +11,7 @@ const sanitize = require('sanitize-filename') * Upload files */ router.post('/u', multer({ - dest: path.join(WIKI.ROOTPATH, 'data/uploads'), + dest: path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, 'uploads'), limits: { fileSize: WIKI.config.uploads.maxFileSize, files: WIKI.config.uploads.maxFiles diff --git a/server/core/sideloader.js b/server/core/sideloader.js index 495ef9de..40d80966 100644 --- a/server/core/sideloader.js +++ b/server/core/sideloader.js @@ -10,7 +10,7 @@ module.exports = { return } - const sideloadExists = await fs.pathExists(path.join(WIKI.ROOTPATH, 'data/sideload')) + const sideloadExists = await fs.pathExists(path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, 'sideload')) if (!sideloadExists) { return @@ -25,16 +25,16 @@ module.exports = { } }, async importLocales() { - const localeExists = await fs.pathExists(path.join(WIKI.ROOTPATH, 'data/sideload/locales.json')) + const localeExists = await fs.pathExists(path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, 'sideload/locales.json')) if (localeExists) { WIKI.logger.info('Found locales master file. Importing locale packages...') let importedLocales = 0 - const locales = await fs.readJson(path.join(WIKI.ROOTPATH, 'data/sideload/locales.json')) + const locales = await fs.readJson(path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, 'sideload/locales.json')) if (locales && _.has(locales, 'data.localization.locales')) { for (const locale of locales.data.localization.locales) { try { - const localeData = await fs.readJson(path.join(WIKI.ROOTPATH, `data/sideload/${locale.code}.json`)) + const localeData = await fs.readJson(path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, `sideload/${locale.code}.json`)) if (localeData) { WIKI.logger.info(`Importing ${locale.name} locale package...`) diff --git a/server/core/system.js b/server/core/system.js index a1739ddc..563c7d18 100644 --- a/server/core/system.js +++ b/server/core/system.js @@ -16,7 +16,7 @@ module.exports = { }, init() { // Clear content cache - fs.emptyDir(path.join(WIKI.ROOTPATH, 'data/cache')) + fs.emptyDir(path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, 'cache')) return this }, diff --git a/server/jobs/purge-uploads.js b/server/jobs/purge-uploads.js index bdaf9f28..7b370e86 100644 --- a/server/jobs/purge-uploads.js +++ b/server/jobs/purge-uploads.js @@ -9,7 +9,7 @@ module.exports = async () => { WIKI.logger.info('Purging orphaned upload files...') try { - const uplTempPath = path.resolve(process.cwd(), WIKI.config.paths.data, 'uploads') + const uplTempPath = path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, 'uploads') await fs.ensureDir(uplTempPath) const ls = await fs.readdir(uplTempPath) const fifteenAgo = moment().subtract(15, 'minutes') diff --git a/server/models/assets.js b/server/models/assets.js index d0e0f3c3..514c29bd 100644 --- a/server/models/assets.js +++ b/server/models/assets.js @@ -74,7 +74,7 @@ module.exports = class Asset extends Model { } async deleteAssetCache() { - await fs.remove(path.join(process.cwd(), `data/cache/${this.hash}.dat`)) + await fs.remove(path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, `cache/${this.hash}.dat`)) } static async upload(opts) { @@ -125,9 +125,9 @@ module.exports = class Asset extends Model { // Move temp upload to cache if (opts.mode === 'upload') { - await fs.move(opts.path, path.join(process.cwd(), `data/cache/${fileHash}.dat`), { overwrite: true }) + await fs.move(opts.path, path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, `cache/${fileHash}.dat`), { overwrite: true }) } else { - await fs.copy(opts.path, path.join(process.cwd(), `data/cache/${fileHash}.dat`), { overwrite: true }) + await fs.copy(opts.path, path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, `cache/${fileHash}.dat`), { overwrite: true }) } // Add to Storage @@ -158,7 +158,7 @@ module.exports = class Asset extends Model { static async getAssetFromCache(assetPath, res) { const fileHash = assetHelper.generateHash(assetPath) - const cachePath = path.join(process.cwd(), `data/cache/${fileHash}.dat`) + const cachePath = path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, `cache/${fileHash}.dat`) return new Promise((resolve, reject) => { res.type(path.extname(assetPath)) @@ -174,7 +174,7 @@ module.exports = class Asset extends Model { static async getAssetFromDb(assetPath, res) { const fileHash = assetHelper.generateHash(assetPath) - const cachePath = path.join(process.cwd(), `data/cache/${fileHash}.dat`) + const cachePath = path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, `cache/${fileHash}.dat`) const asset = await WIKI.models.assets.query().where('hash', fileHash).first() if (asset) { @@ -188,6 +188,6 @@ module.exports = class Asset extends Model { } static async flushTempUploads() { - return fs.emptyDir(path.join(process.cwd(), `data/uploads`)) + return fs.emptyDir(path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, `uploads`)) } } diff --git a/server/models/pages.js b/server/models/pages.js index 1ed10d8f..f93b37b0 100644 --- a/server/models/pages.js +++ b/server/models/pages.js @@ -728,7 +728,7 @@ module.exports = class Page extends Model { * @returns {Promise} Promise with no value */ static async savePageToCache(page) { - const cachePath = path.join(process.cwd(), `data/cache/${page.hash}.bin`) + const cachePath = path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, `cache/${page.hash}.bin`) await fs.outputFile(cachePath, WIKI.models.pages.cacheSchema.encode({ id: page.id, authorId: page.authorId, @@ -757,7 +757,7 @@ module.exports = class Page extends Model { */ static async getPageFromCache(opts) { const pageHash = pageHelper.generateHash({ path: opts.path, locale: opts.locale, privateNS: opts.isPrivate ? 'TODO' : '' }) - const cachePath = path.join(process.cwd(), `data/cache/${pageHash}.bin`) + const cachePath = path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, `cache/${pageHash}.bin`) try { const pageBuffer = await fs.readFile(cachePath) @@ -785,14 +785,14 @@ module.exports = class Page extends Model { * @returns {Promise} Promise with no value */ static async deletePageFromCache(page) { - return fs.remove(path.join(process.cwd(), `data/cache/${page.hash}.bin`)) + return fs.remove(path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, `cache/${page.hash}.bin`)) } /** * Flush the contents of the Cache */ static async flushCache() { - return fs.emptyDir(path.join(process.cwd(), `data/cache`)) + return fs.emptyDir(path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, `cache`)) } /** diff --git a/server/modules/storage/git/storage.js b/server/modules/storage/git/storage.js index 81f08045..d3073d31 100644 --- a/server/modules/storage/git/storage.js +++ b/server/modules/storage/git/storage.js @@ -15,7 +15,7 @@ const commonDisk = require('../disk/common') module.exports = { git: null, - repoPath: path.join(process.cwd(), 'data/repo'), + repoPath: path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, 'repo'), async activated() { // not used }, @@ -66,7 +66,7 @@ module.exports = { WIKI.logger.info('(STORAGE/GIT) Setting SSH Command config...') if (this.config.sshPrivateKeyMode === 'contents') { try { - this.config.sshPrivateKeyPath = path.join(WIKI.ROOTPATH, 'data/secure/git-ssh.pem') + this.config.sshPrivateKeyPath = path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, 'secure/git-ssh.pem') await fs.outputFile(this.config.sshPrivateKeyPath, this.config.sshPrivateKeyContent, { encoding: 'utf8', mode: 0o600 diff --git a/server/setup.js b/server/setup.js index 377f2bdf..a7e561aa 100644 --- a/server/setup.js +++ b/server/setup.js @@ -144,10 +144,9 @@ module.exports = () => { // Create directory structure WIKI.logger.info('Creating data directories...') - const dataPath = path.join(process.cwd(), 'data') - await fs.ensureDir(dataPath) - await fs.emptyDir(path.join(dataPath, 'cache')) - await fs.ensureDir(path.join(dataPath, 'uploads')) + await fs.ensureDir(path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath)) + await fs.emptyDir(path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, 'cache')) + await fs.ensureDir(path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, 'uploads')) // Generate certificates WIKI.logger.info('Generating certificates...')