diff --git a/package.json b/package.json index 4105d6deb4c6d7cbc8cdd22878b6ca2bd19091d7..3b9aba1e79dd28d03792080e50e1e240ac6c4af6 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,6 @@ "mime-types": "^2.1.34", "moment": "^2.29.1", "morgan": "^1.10.0", - "multer": "^1.1.0", "node-cron": "^2.0.3", "nodemailer": "^6.4.18", "objection": "^2.2.15", diff --git a/src/app.js b/src/app.js index 5424f327282acdaf9258639a463723b1f9e19680..b74634f534a8b62e42ee88a9e414e66bf9d7ac68 100644 --- a/src/app.js +++ b/src/app.js @@ -1,12 +1,9 @@ /* eslint-disable global-require, no-param-reassign */ -const path = require('path') - const bodyParser = require('body-parser') const config = require('config') const cors = require('cors') const cookieParser = require('cookie-parser') -const express = require('express') const helmet = require('helmet') const STATUS = require('http-status-codes') const morgan = require('morgan') @@ -59,15 +56,6 @@ const configureApp = async app => { mountStatic(app) - if (config.has('uploads')) { - app.use( - '/uploads', - express.static( - path.resolve(config.has('uploads') && config.get('uploads')), - ), - ) - } - // Register passport authentication strategies app.use(passport.initialize()) const authentication = require('./authentication') diff --git a/src/graphqlSchema.js b/src/graphqlSchema.js index dd2195f8fc9e6774f5b78ecf50e8814d683d3747..3d889c57a905a979f57910a71b26edd1ae25edd1 100644 --- a/src/graphqlSchema.js +++ b/src/graphqlSchema.js @@ -11,19 +11,18 @@ const logger = require('./logger') const { logTask } = require('./logger/internals') const tryRequireRelative = require('./tryRequireRelative') -const upload = require('./upload') const emailMiddleware = require('./middleware/email') // #region BUILD-SCHEMA // load base types and resolvers -const typeDefs = [ - `type Query, type Mutation, type Subscription`, - upload.typeDefs, -] - -const resolvers = merge({}, upload.resolvers, { - Upload: GraphQLUpload, -}) +const typeDefs = [`type Query, type Mutation, type Subscription, scalar Upload`] + +const resolvers = merge( + {}, + { + Upload: GraphQLUpload, + }, +) // recursively merge in component types and resolvers function getSchemaRecursively(componentName) { diff --git a/src/routes/api.js b/src/routes/api.js index 4bdb5f2c23c08e512c0868a31e6f991339eb7c85..e0edb7dd962801c938d2fbde8f639ca65dd171b8 100644 --- a/src/routes/api.js +++ b/src/routes/api.js @@ -5,9 +5,4 @@ const api = express.Router({ mergeParams: true }) api.use(helmet()) -// File upload API -const upload = require('./apiUpload') - -api.use(upload) - module.exports = api diff --git a/src/routes/apiUpload.js b/src/routes/apiUpload.js deleted file mode 100644 index 69723f64609adfc336c403773ccc84f58ea3a171..0000000000000000000000000000000000000000 --- a/src/routes/apiUpload.js +++ /dev/null @@ -1,36 +0,0 @@ -const path = require('path') -const crypto = require('crypto') -const multer = require('multer') -const passport = require('passport') -const express = require('express') -const config = require('config') - -const api = express.Router() - -const authBearer = passport.authenticate('bearer', { session: false }) - -const storage = multer.diskStorage({ - destination: config.has('uploads') && config.get('uploads'), - filename(req, file, cb) { - /* eslint-disable-next-line node/no-deprecated-api */ - crypto.pseudoRandomBytes(16, (err, raw) => { - if (err) { - cb(err) - return - } - - cb(null, raw.toString('hex') + path.extname(file.originalname)) - }) - }, -}) - -const upload = multer({ - storage, - limits: { fileSize: 10000000, files: 1 }, -}) - -api.post('/upload', authBearer, upload.single('file'), (req, res, next) => - res.send(`/${req.file.path}`), -) - -module.exports = api diff --git a/src/services/docx/docx.service.js b/src/services/docx/docx.service.js index 8b48ccf7a2d2f6bd75d31871f2ac2e8d374fefc2..951a08c01aaca7e540928b09cd862f39cde97948 100644 --- a/src/services/docx/docx.service.js +++ b/src/services/docx/docx.service.js @@ -502,7 +502,6 @@ class WaxToDocxConverter { const buffer = await Packer.toBuffer(parsed) fs.writeFileSync(path, buffer) - return } catch (e) { this.error(e) } diff --git a/src/upload.js b/src/upload.js deleted file mode 100644 index 9eeb014997a4230c41f95a2e28e1b47b1c817e13..0000000000000000000000000000000000000000 --- a/src/upload.js +++ /dev/null @@ -1,77 +0,0 @@ -const path = require('path') -const crypto = require('crypto') -const fs = require('fs-extra') -const { promisify } = require('util') -const config = require('config') - -const { getPubsub, asyncIterators } = require('./graphql/pubsub') - -const { ON_UPLOAD_PROGRESS } = asyncIterators -const randomBytes = promisify(crypto.randomBytes) - -const resolvers = { - Mutation: { - upload: async (_, { file, fileSize }, context) => { - const uploadsPath = config.has('uploads') && config.get('uploads') - const pubsub = await getPubsub() - const { createReadStream, filename, encoding } = await file - const stream = createReadStream() - - const raw = await randomBytes(16) - const generatedFilename = raw.toString('hex') + path.extname(filename) - const outPath = path.join(uploadsPath, generatedFilename) - - await fs.ensureDir(uploadsPath) - const outStream = fs.createWriteStream(outPath) - stream.pipe(outStream, { encoding }) - let uploadedSize = 0 - - stream.on('data', chunk => { - uploadedSize += chunk.length - let uploadProgress - - if (fileSize) { - uploadProgress = Math.floor((uploadedSize * 100) / fileSize) - } else { - uploadProgress = uploadedSize - } - - pubsub.publish(`${ON_UPLOAD_PROGRESS}.${context.user}`, { - uploadProgress, - }) - }) - - return new Promise((resolve, reject) => { - outStream.on('finish', () => resolve({ url: `/${generatedFilename}` })) - outStream.on('error', reject) - }) - }, - }, - Subscription: { - uploadProgress: { - subscribe: async (_, vars, context) => { - const pubsub = await getPubsub() - return pubsub.asyncIterator(`${ON_UPLOAD_PROGRESS}.${context.user}`) - }, - }, - }, -} - -const typeDefs = ` - scalar Upload - - extend type Mutation { - # Upload a file, store it on the server and return the file url - upload(file: Upload!, fileSize: Int): UploadResult - } - - extend type Subscription { - uploadProgress: Int! - } - - type UploadResult { - url: String - } -` - -module.exports = { typeDefs, resolvers } diff --git a/yarn.lock b/yarn.lock index bc87331c61a59876f3ddcb556028fc3ef010dfdb..5f6d78d5f895d368227af5794e992d0c85b936f6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1440,7 +1440,6 @@ __metadata: mime-types: "npm:^2.1.34" moment: "npm:^2.29.1" morgan: "npm:^1.10.0" - multer: "npm:^1.1.0" node-cron: "npm:^2.0.3" node-wait-for-it: "npm:^0.2.0" nodemailer: "npm:^6.4.18" @@ -3890,13 +3889,6 @@ __metadata: languageName: node linkType: hard -"append-field@npm:^1.0.0": - version: 1.0.0 - resolution: "append-field@npm:1.0.0" - checksum: 10c0/1b5abcc227e5179936a9e4f7e2af4769fa1f00eda85bbaed907f7964b0fd1f7d61f0f332b35337f391389ff13dd5310c2546ba670f8e5a743b23ec85185c73ef - languageName: node - linkType: hard - "aproba@npm:^1.0.3 || ^2.0.0": version: 2.0.0 resolution: "aproba@npm:2.0.0" @@ -4576,16 +4568,6 @@ __metadata: languageName: node linkType: hard -"busboy@npm:^0.2.11": - version: 0.2.14 - resolution: "busboy@npm:0.2.14" - dependencies: - dicer: "npm:0.2.5" - readable-stream: "npm:1.1.x" - checksum: 10c0/660ce531347a03210f46080c2447030c41f60202be0d8dd1544482786341a497b1d4d8941e3c7c9b5e6ed4edc42003c28c9451e1fde87dd94010df69bb27cc38 - languageName: node - linkType: hard - "busboy@npm:^0.3.1": version: 0.3.1 resolution: "busboy@npm:0.3.1" @@ -5177,18 +5159,6 @@ __metadata: languageName: node linkType: hard -"concat-stream@npm:^1.5.2": - version: 1.6.2 - resolution: "concat-stream@npm:1.6.2" - dependencies: - buffer-from: "npm:^1.0.0" - inherits: "npm:^2.0.3" - readable-stream: "npm:^2.2.2" - typedarray: "npm:^0.0.6" - checksum: 10c0/2e9864e18282946dabbccb212c5c7cec0702745e3671679eb8291812ca7fd12023f7d8cb36493942a62f770ac96a7f90009dc5c82ad69893438371720fa92617 - languageName: node - linkType: hard - "concat-stream@npm:^2.0.0": version: 2.0.0 resolution: "concat-stream@npm:2.0.0" @@ -6175,16 +6145,6 @@ __metadata: languageName: node linkType: hard -"dicer@npm:0.2.5": - version: 0.2.5 - resolution: "dicer@npm:0.2.5" - dependencies: - readable-stream: "npm:1.1.x" - streamsearch: "npm:0.1.2" - checksum: 10c0/c0520cee8c4d8c7e2db4f8fe30c0fdbf96d9623d53a65b54f4e0d9a89b76c3e0c397de54a1530c1d4b1788d1e87ff3ca5800e3ba93c748e0cd24827b505fb5e7 - languageName: node - linkType: hard - "dicer@npm:0.3.0": version: 0.3.0 resolution: "dicer@npm:0.3.0" @@ -8754,7 +8714,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.1, inherits@npm:~2.0.3, inherits@npm:~2.0.4": +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3, inherits@npm:~2.0.4": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 @@ -9385,13 +9345,6 @@ __metadata: languageName: node linkType: hard -"isarray@npm:0.0.1": - version: 0.0.1 - resolution: "isarray@npm:0.0.1" - checksum: 10c0/ed1e62da617f71fe348907c71743b5ed550448b455f8d269f89a7c7ddb8ae6e962de3dab6a74a237b06f5eb7f6ece7a45ada8ce96d87fe972926530f91ae3311 - languageName: node - linkType: hard - "isarray@npm:1.0.0, isarray@npm:~1.0.0": version: 1.0.0 resolution: "isarray@npm:1.0.0" @@ -11252,7 +11205,7 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.4": +"mkdirp@npm:^0.5.1": version: 0.5.6 resolution: "mkdirp@npm:0.5.6" dependencies: @@ -11346,22 +11299,6 @@ __metadata: languageName: node linkType: hard -"multer@npm:^1.1.0": - version: 1.4.4 - resolution: "multer@npm:1.4.4" - dependencies: - append-field: "npm:^1.0.0" - busboy: "npm:^0.2.11" - concat-stream: "npm:^1.5.2" - mkdirp: "npm:^0.5.4" - object-assign: "npm:^4.1.1" - on-finished: "npm:^2.3.0" - type-is: "npm:^1.6.4" - xtend: "npm:^4.0.0" - checksum: 10c0/ae7505b440b833bffe4d4b712659fc880b3a3735db1190745e738138b069b2344d0d17e3985c93f0aee287d795572dbb7a90af31ec33bd1293cbf90366934b7b - languageName: node - linkType: hard - "mute-stream@npm:0.0.7": version: 0.0.7 resolution: "mute-stream@npm:0.0.7" @@ -11909,7 +11846,7 @@ __metadata: languageName: node linkType: hard -"on-finished@npm:2.4.1, on-finished@npm:^2.3.0": +"on-finished@npm:2.4.1": version: 2.4.1 resolution: "on-finished@npm:2.4.1" dependencies: @@ -13025,18 +12962,6 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:1.1.x": - version: 1.1.14 - resolution: "readable-stream@npm:1.1.14" - dependencies: - core-util-is: "npm:~1.0.0" - inherits: "npm:~2.0.1" - isarray: "npm:0.0.1" - string_decoder: "npm:~0.10.x" - checksum: 10c0/b7f41b16b305103d598e3c8964fa30d52d6e0b5d9fdad567588964521691c24b279c7a8bb71f11927c3613acf355bac72d8396885a43d50425b2caafd49bc83d - languageName: node - linkType: hard - "readable-stream@npm:3, readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" @@ -13048,7 +12973,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^2.2.2, readable-stream@npm:^2.3.5, readable-stream@npm:~2.3.6": +"readable-stream@npm:^2.3.5, readable-stream@npm:~2.3.6": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" dependencies: @@ -14315,13 +14240,6 @@ __metadata: languageName: node linkType: hard -"string_decoder@npm:~0.10.x": - version: 0.10.31 - resolution: "string_decoder@npm:0.10.31" - checksum: 10c0/1c628d78f974aa7539c496029f48e7019acc32487fc695464f9d6bdfec98edd7d933a06b3216bc2016918f6e75074c611d84430a53cb0e43071597d6c1ac5e25 - languageName: node - linkType: hard - "string_decoder@npm:~1.1.1": version: 1.1.1 resolution: "string_decoder@npm:1.1.1" @@ -15185,7 +15103,7 @@ __metadata: languageName: node linkType: hard -"type-is@npm:^1.6.16, type-is@npm:^1.6.4, type-is@npm:~1.6.18": +"type-is@npm:^1.6.16, type-is@npm:~1.6.18": version: 1.6.18 resolution: "type-is@npm:1.6.18" dependencies: