Browse Source

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
Justin Kromlinger 5 years ago
parent
commit
8000ebec8f

+ 6 - 0
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

+ 1 - 3
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

+ 1 - 1
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

+ 4 - 4
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...`)
 

+ 1 - 1
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
   },

+ 1 - 1
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')

+ 6 - 6
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`))
   }
 }

+ 4 - 4
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`))
   }
 
   /**

+ 2 - 2
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

+ 3 - 4
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...')