| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 | 
							- const express = require('express')
 
- const router = express.Router()
 
- const _ = require('lodash')
 
- const multer = require('multer')
 
- const path = require('path')
 
- const sanitize = require('sanitize-filename')
 
- /* global WIKI */
 
- /**
 
-  * Upload files
 
-  */
 
- router.post('/u', (req, res, next) => {
 
-   multer({
 
-     dest: path.resolve(WIKI.ROOTPATH, WIKI.config.dataPath, 'uploads'),
 
-     limits: {
 
-       fileSize: WIKI.config.uploads.maxFileSize,
 
-       files: WIKI.config.uploads.maxFiles
 
-     }
 
-   }).array('mediaUpload')(req, res, next)
 
- }, async (req, res, next) => {
 
-   if (!_.some(req.user.permissions, pm => _.includes(['write:assets', 'manage:system'], pm))) {
 
-     return res.status(403).json({
 
-       succeeded: false,
 
-       message: 'You are not authorized to upload files.'
 
-     })
 
-   } else if (req.files.length < 1) {
 
-     return res.status(400).json({
 
-       succeeded: false,
 
-       message: 'Missing upload payload.'
 
-     })
 
-   } else if (req.files.length > 1) {
 
-     return res.status(400).json({
 
-       succeeded: false,
 
-       message: 'You cannot upload multiple files within the same request.'
 
-     })
 
-   }
 
-   const fileMeta = _.get(req, 'files[0]', false)
 
-   if (!fileMeta) {
 
-     return res.status(500).json({
 
-       succeeded: false,
 
-       message: 'Missing upload file metadata.'
 
-     })
 
-   }
 
-   // Get folder Id
 
-   let folderId = null
 
-   try {
 
-     const folderRaw = _.get(req, 'body.mediaUpload', false)
 
-     if (folderRaw) {
 
-       folderId = _.get(JSON.parse(folderRaw), 'folderId', null)
 
-       if (folderId === 0) {
 
-         folderId = null
 
-       }
 
-     } else {
 
-       throw new Error('Missing File Metadata')
 
-     }
 
-   } catch (err) {
 
-     return res.status(400).json({
 
-       succeeded: false,
 
-       message: 'Missing upload folder metadata.'
 
-     })
 
-   }
 
-   // Build folder hierarchy
 
-   let hierarchy = []
 
-   if (folderId) {
 
-     try {
 
-       hierarchy = await WIKI.models.assetFolders.getHierarchy(folderId)
 
-     } catch (err) {
 
-       return res.status(400).json({
 
-         succeeded: false,
 
-         message: 'Failed to fetch folder hierarchy.'
 
-       })
 
-     }
 
-   }
 
-   // Sanitize filename
 
-   fileMeta.originalname = sanitize(fileMeta.originalname.toLowerCase().replace(/[\s,;]+/g, '_'))
 
-   // Check if user can upload at path
 
-   const assetPath = (folderId) ? hierarchy.map(h => h.slug).join('/') + `/${fileMeta.originalname}` : fileMeta.originalname
 
-   if (!WIKI.auth.checkAccess(req.user, ['write:assets'], { path: assetPath })) {
 
-     return res.status(403).json({
 
-       succeeded: false,
 
-       message: 'You are not authorized to upload files to this folder.'
 
-     })
 
-   }
 
-   // Process upload file
 
-   await WIKI.models.assets.upload({
 
-     ...fileMeta,
 
-     mode: 'upload',
 
-     folderId: folderId,
 
-     assetPath,
 
-     user: req.user
 
-   })
 
-   res.send('ok')
 
- })
 
- router.get('/u', async (req, res, next) => {
 
-   res.json({
 
-     ok: true
 
-   })
 
- })
 
- module.exports = router
 
 
  |