1
0
Fork 0
mirror of https://github.com/overleaf/overleaf.git synced 2025-04-11 17:45:23 +00:00

Merge pull request from sharelatex/ew-collabratec-upload-fix-v1-proxy

upgrade to latest (forked) version of multer, proxy collabratec uploads

GitOrigin-RevId: 682caf12a81ee828e544a5e3903ea49bbd173fe0
This commit is contained in:
Ersun Warncke 2018-12-13 08:54:49 -04:00 committed by sharelatex
parent 3bc9ce995a
commit 362c1f64db
7 changed files with 154 additions and 102 deletions

View file

@ -10,7 +10,7 @@ module.exports = ProjectUploadController =
uploadProject: (req, res, next) ->
timer = new metrics.Timer("project-upload")
user_id = AuthenticationController.getLoggedInUserId(req)
{originalname, path} = req.files.qqfile
{originalname, path} = req.file
name = Path.basename(originalname, ".zip")
ProjectUploadManager.createProjectFromZipArchive user_id, name, path, (error, project) ->
fs.unlink path, ->
@ -28,8 +28,8 @@ module.exports = ProjectUploadController =
uploadFile: (req, res, next) ->
timer = new metrics.Timer("file-upload")
name = req.files.qqfile?.originalname
path = req.files.qqfile?.path
name = req.file?.originalname
path = req.file?.path
project_id = req.params.Project_id
folder_id = req.query.folder_id
if !name? or name.length == 0 or name.length > 150

View file

@ -2,11 +2,19 @@ AuthorizationMiddlewear = require('../Authorization/AuthorizationMiddlewear')
AuthenticationController = require('../Authentication/AuthenticationController')
ProjectUploadController = require "./ProjectUploadController"
RateLimiterMiddlewear = require('../Security/RateLimiterMiddlewear')
Settings = require('settings-sharelatex')
multer = require('multer')
upload = multer(
dest: Settings.path.uploadFolder
limits: fileSize: Settings.maxUploadSize
)
module.exports =
apply: (webRouter, apiRouter) ->
webRouter.post '/project/new/upload',
AuthenticationController.requireLogin(),
upload.single('qqfile'),
ProjectUploadController.uploadProject
webRouter.post '/Project/:Project_id/upload',
@ -18,5 +26,5 @@ module.exports =
}),
AuthenticationController.requireLogin(),
AuthorizationMiddlewear.ensureUserCanWriteProjectContent,
upload.single('qqfile'),
ProjectUploadController.uploadFile

View file

@ -16,7 +16,6 @@ sessionsRedisClient = UserSessionsRedis.client()
session = require("express-session")
RedisStore = require('connect-redis')(session)
bodyParser = require('body-parser')
multer = require('multer')
methodOverride = require('method-override')
cookieParser = require('cookie-parser')
bearerToken = require('express-bearer-token')
@ -69,7 +68,6 @@ Modules.loadViewIncludes app
app.use bodyParser.urlencoded({ extended: true, limit: "2mb"})
# Make sure we can process the max doc length plus some overhead for JSON encoding
app.use bodyParser.json({limit: Settings.max_doc_length + 64 * 1024}) # 64kb overhead
app.use multer(dest: Settings.path.uploadFolder)
app.use methodOverride()
app.use bearerToken()

View file

@ -188,6 +188,11 @@
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
"dev": true
},
"append-field": {
"version": "1.0.0",
"from": "append-field@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz"
},
"aproba": {
"version": "1.2.0",
"from": "aproba@>=1.0.3 <2.0.0",
@ -1377,8 +1382,7 @@
"buffer-from": {
"version": "1.0.0",
"from": "buffer-from@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz",
"dev": true
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz"
},
"buffer-indexof": {
"version": "1.1.1",
@ -1683,6 +1687,38 @@
}
}
},
"clean-css-cli": {
"version": "4.2.1",
"from": "clean-css-cli@>=4.2.1 <5.0.0",
"resolved": "https://registry.npmjs.org/clean-css-cli/-/clean-css-cli-4.2.1.tgz",
"dev": true,
"dependencies": {
"clean-css": {
"version": "4.2.1",
"from": "clean-css@>=4.2.1 <5.0.0",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz",
"dev": true
},
"glob": {
"version": "7.1.3",
"from": "glob@>=7.0.0 <8.0.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
"dev": true
},
"minimatch": {
"version": "3.0.4",
"from": "minimatch@>=3.0.4 <4.0.0",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"dev": true
},
"source-map": {
"version": "0.6.1",
"from": "source-map@>=0.6.0 <0.7.0",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"dev": true
}
}
},
"cli-boxes": {
"version": "1.0.0",
"from": "cli-boxes@>=1.0.0 <2.0.0",
@ -1886,31 +1922,26 @@
"version": "1.6.2",
"from": "concat-stream@>=1.6.0 <2.0.0",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
"dev": true,
"dependencies": {
"isarray": {
"version": "1.0.0",
"from": "isarray@~1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"dev": true
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz"
},
"process-nextick-args": {
"version": "2.0.0",
"from": "process-nextick-args@>=2.0.0 <2.1.0",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
"dev": true
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz"
},
"readable-stream": {
"version": "2.3.6",
"from": "readable-stream@>=2.2.2 <3.0.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"dev": true
"resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz"
},
"string_decoder": {
"version": "1.1.1",
"from": "string_decoder@>=1.1.1 <1.2.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"dev": true
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz"
}
}
},
@ -4246,20 +4277,6 @@
}
}
},
"grunt-contrib-less": {
"version": "1.4.1",
"from": "grunt-contrib-less@1.4.1",
"resolved": "https://registry.npmjs.org/grunt-contrib-less/-/grunt-contrib-less-1.4.1.tgz",
"dev": true,
"dependencies": {
"async": {
"version": "2.6.0",
"from": "async@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
"dev": true
}
}
},
"grunt-contrib-requirejs": {
"version": "0.4.1",
"from": "grunt-contrib-requirejs@0.4.1",
@ -4498,20 +4515,6 @@
}
}
},
"grunt-postcss": {
"version": "0.8.0",
"from": "grunt-postcss@>=0.8.0 <0.9.0",
"resolved": "https://registry.npmjs.org/grunt-postcss/-/grunt-postcss-0.8.0.tgz",
"dev": true,
"dependencies": {
"diff": {
"version": "2.2.3",
"from": "diff@>=2.0.2 <3.0.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz",
"dev": true
}
}
},
"grunt-sed": {
"version": "0.1.1",
"from": "grunt-sed@>=0.1.1 <0.2.0",
@ -4795,7 +4798,7 @@
"readable-stream": {
"version": "2.3.6",
"from": "readable-stream@^2.0.1",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"dev": true
},
"string_decoder": {
@ -4843,7 +4846,7 @@
"readable-stream": {
"version": "2.3.6",
"from": "readable-stream@>=2.0.2 <3.0.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"dev": true
},
"string_decoder": {
@ -6118,6 +6121,74 @@
}
}
},
"less-plugin-autoprefix": {
"version": "2.0.0",
"from": "less-plugin-autoprefix@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/less-plugin-autoprefix/-/less-plugin-autoprefix-2.0.0.tgz",
"dev": true,
"dependencies": {
"ansi-styles": {
"version": "3.2.1",
"from": "ansi-styles@>=3.2.1 <4.0.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"dev": true
},
"autoprefixer": {
"version": "8.6.5",
"from": "autoprefixer@>=8.6.3 <9.0.0",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.6.5.tgz",
"dev": true
},
"browserslist": {
"version": "3.2.8",
"from": "browserslist@>=3.2.8 <4.0.0",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz",
"dev": true
},
"caniuse-lite": {
"version": "1.0.30000918",
"from": "caniuse-lite@>=1.0.30000864 <2.0.0",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000918.tgz",
"dev": true
},
"chalk": {
"version": "2.4.1",
"from": "chalk@>=2.4.1 <3.0.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
"dev": true
},
"electron-to-chromium": {
"version": "1.3.90",
"from": "electron-to-chromium@>=1.3.47 <2.0.0",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.90.tgz",
"dev": true
},
"has-flag": {
"version": "3.0.0",
"from": "has-flag@>=3.0.0 <4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"dev": true
},
"postcss": {
"version": "6.0.23",
"from": "postcss@>=6.0.22 <7.0.0",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
"dev": true
},
"source-map": {
"version": "0.6.1",
"from": "source-map@^0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"dev": true
},
"supports-color": {
"version": "5.5.0",
"from": "supports-color@>=5.4.0 <6.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"dev": true
}
}
},
"levn": {
"version": "0.3.0",
"from": "levn@>=0.3.0 <0.4.0",
@ -7089,7 +7160,7 @@
"readable-stream": {
"version": "2.3.6",
"from": "readable-stream@^2.0.1",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"dev": true
},
"string_decoder": {
@ -7121,7 +7192,7 @@
"minimist": {
"version": "1.2.0",
"from": "minimist@>=1.1.3 <2.0.0",
"resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"dev": true
},
"path-exists": {
@ -7543,36 +7614,9 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
},
"multer": {
"version": "0.1.8",
"from": "multer@>=0.1.8 <0.2.0",
"resolved": "https://registry.npmjs.org/multer/-/multer-0.1.8.tgz",
"dependencies": {
"mime-db": {
"version": "1.12.0",
"from": "mime-db@>=1.12.0 <1.13.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz"
},
"mime-types": {
"version": "2.0.14",
"from": "mime-types@>=2.0.9 <2.1.0",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz"
},
"mkdirp": {
"version": "0.3.5",
"from": "mkdirp@>=0.3.5 <0.4.0",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz"
},
"qs": {
"version": "1.2.2",
"from": "qs@>=1.2.2 <1.3.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-1.2.2.tgz"
},
"type-is": {
"version": "1.5.7",
"from": "type-is@>=1.5.2 <1.6.0",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.5.7.tgz"
}
}
"version": "1.4.1",
"from": "git+https://github.com/overleaf/multer.git",
"resolved": "git+https://github.com/overleaf/multer.git#7a2928d7ea2da02dd92888ea1c9ba5704e07aeeb"
},
"multicast-dns": {
"version": "6.2.3",
@ -7767,7 +7811,7 @@
"readable-stream": {
"version": "2.3.6",
"from": "readable-stream@^2.3.3",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"dev": true
},
"string_decoder": {
@ -8124,7 +8168,7 @@
"readable-stream": {
"version": "2.3.6",
"from": "readable-stream@^2.0.2",
"resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"dev": true
},
"readdirp": {
@ -8569,6 +8613,11 @@
"resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz",
"dev": true
},
"overleaf-error-type": {
"version": "1.0.0",
"from": "git+https://github.com/overleaf/overleaf-error-type.git",
"resolved": "git+https://github.com/overleaf/overleaf-error-type.git#32f441771a55cc9ad36c508ed1c9538386d1398f"
},
"p-finally": {
"version": "1.0.0",
"from": "p-finally@>=1.0.0 <2.0.0",
@ -10765,7 +10814,7 @@
"readable-stream": {
"version": "2.3.6",
"from": "readable-stream@^2.0.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"dev": true
},
"string_decoder": {
@ -10841,7 +10890,7 @@
"readable-stream": {
"version": "2.3.6",
"from": "readable-stream@^2.3.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"dev": true
},
"string_decoder": {
@ -11294,8 +11343,7 @@
"typedarray": {
"version": "0.0.6",
"from": "typedarray@>=0.0.6 <0.0.7",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"dev": true
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"
},
"typescript": {
"version": "2.9.2",
@ -12161,13 +12209,13 @@
"readable-stream": {
"version": "2.3.6",
"from": "readable-stream@^2.0.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"dev": true
},
"readdirp": {
"version": "2.1.0",
"from": "readdirp@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
"resolved": "http://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
"dev": true
},
"string_decoder": {
@ -12365,7 +12413,7 @@
"chokidar": {
"version": "2.0.3",
"from": "chokidar@>=2.0.0 <3.0.0",
"resolved": "http://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz",
"dev": true
},
"cliui": {

View file

@ -67,7 +67,7 @@
"mocha": "^5.0.1",
"mongojs": "2.4.0",
"mongoose": "4.11.4",
"multer": "^0.1.8",
"multer": "git+https://github.com/overleaf/multer.git",
"node-html-encoder": "0.0.2",
"nodemailer": "2.1.0",
"nodemailer-mandrill-transport": "^1.2.0",

View file

@ -292,11 +292,11 @@ describe "ProjectStructureChanges", ->
before (done) ->
@owner.request.post {
uri: "project/#{example_project_id}/folder",
formData:
json:
name: 'foo'
}, (error, res, body) =>
throw error if error?
example_folder_id_1 = JSON.parse(body)._id
example_folder_id_1 = body._id
done()
beforeEach (done) ->
@ -360,11 +360,11 @@ describe "ProjectStructureChanges", ->
it "should version moving a folder", (done) ->
@owner.request.post {
uri: "project/#{example_project_id}/folder",
formData:
json:
name: 'bar'
}, (error, res, body) =>
throw error if error?
example_folder_id_2 = JSON.parse(body)._id
example_folder_id_2 = body._id
@owner.request.post {
uri: "project/#{example_project_id}/Folder/#{example_folder_id_1}/move",

View file

@ -30,10 +30,9 @@ describe "ProjectUploadController", ->
beforeEach ->
@path = "/path/to/file/on/disk.zip"
@name = "filename.zip"
@req.files =
qqfile:
path: @path
originalname: @name
@req.file =
path: @path
originalname: @name
@req.session =
user:
_id: @user_id
@ -103,10 +102,9 @@ describe "ProjectUploadController", ->
@folder_id = "folder-id-123"
@path = "/path/to/file/on/disk.png"
@name = "filename.png"
@req.files =
qqfile:
path: @path
originalname: @name
@req.file =
path: @path
originalname: @name
@req.session =
user:
_id: @user_id
@ -166,7 +164,7 @@ describe "ProjectUploadController", ->
describe "with a bad request", ->
beforeEach ->
@req.files.qqfile.originalname = ""
@req.file.originalname = ""
@ProjectUploadController.uploadFile @req, @res
it "should return a a non success response", ->