mirror of
https://github.com/overleaf/overleaf.git
synced 2025-04-11 13:34:00 +00:00
Parse out the range header and set start
and end
properties on options.
This commit is contained in:
parent
b905d9fba1
commit
97cdc243d3
2 changed files with 41 additions and 8 deletions
services/filestore
|
@ -3,19 +3,41 @@ settings = require("settings-sharelatex")
|
|||
logger = require("logger-sharelatex")
|
||||
FileHandler = require("./FileHandler")
|
||||
metrics = require("metrics-sharelatex")
|
||||
parseRange = require('range-parser')
|
||||
|
||||
oneDayInSeconds = 60 * 60 * 24
|
||||
maxSizeInBytes = 1024 * 1024 * 1024 # 1GB
|
||||
|
||||
|
||||
get_range = (header) ->
|
||||
parsed = parseRange(maxSizeInBytes, header)
|
||||
range_type = parsed.type
|
||||
range = parsed[0]
|
||||
{start: range.start, end: range.end}
|
||||
|
||||
module.exports =
|
||||
|
||||
getFile: (req, res)->
|
||||
metrics.inc "getFile"
|
||||
{key, bucket} = req
|
||||
{format, style} = req.query
|
||||
opts = {
|
||||
key: key,
|
||||
bucket: bucket,
|
||||
format: format,
|
||||
style: style,
|
||||
start: null,
|
||||
end: null
|
||||
}
|
||||
metrics.inc "getFile"
|
||||
if req.headers.range?
|
||||
range = get_range(req.headers.range)
|
||||
opts.start = range.start
|
||||
opts.end = range.end
|
||||
logger.log key:key, bucket:bucket, format:format, style:style, "reciving request to get file"
|
||||
FileHandler.getFile bucket, key, {format:format,style:style}, (err, fileStream)->
|
||||
FileHandler.getFile bucket, key, opts, (err, fileStream)->
|
||||
if err?
|
||||
logger.err err:err, key:key, bucket:bucket, format:format, style:style, "problem getting file"
|
||||
if !res.finished and res?.send?
|
||||
if !res.finished and res?.send?
|
||||
res.send 500
|
||||
else if req.query.cacheWarm
|
||||
logger.log key:key, bucket:bucket, format:format, style:style, "request is only for cache warm so not sending stream"
|
||||
|
@ -38,7 +60,7 @@ module.exports =
|
|||
oldFile_id = req.body.source.file_id
|
||||
logger.log key:key, bucket:bucket, oldProject_id:oldProject_id, oldFile_id:oldFile_id, "reciving request to copy file"
|
||||
PersistorManager.copyFile bucket, "#{oldProject_id}/#{oldFile_id}", key, (err)->
|
||||
if err?
|
||||
if err?
|
||||
logger.log err:err, oldProject_id:oldProject_id, oldFile_id:oldFile_id, "something went wrong copying file"
|
||||
res.send 500
|
||||
else
|
||||
|
@ -54,6 +76,3 @@ module.exports =
|
|||
res.send 500
|
||||
else
|
||||
res.send 204
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@ describe "FileController", ->
|
|||
params:
|
||||
project_id:@project_id
|
||||
file_id:@file_id
|
||||
headers: {}
|
||||
@res =
|
||||
setHeader: ->
|
||||
@fileStream = {}
|
||||
|
@ -70,6 +71,19 @@ describe "FileController", ->
|
|||
done()
|
||||
@controller.getFile @req, @res
|
||||
|
||||
describe "with a 'Range' header set", ->
|
||||
|
||||
beforeEach ->
|
||||
@req.headers.range = 'bytes=0-8'
|
||||
|
||||
it "should pass 'start' and 'end' options to FileHandler", (done) ->
|
||||
@FileHandler.getFile.callsArgWith(3, null, @fileStream)
|
||||
@fileStream.pipe = (res)=>
|
||||
expect(@FileHandler.getFile.lastCall.args[2].start).to.equal 0
|
||||
expect(@FileHandler.getFile.lastCall.args[2].end).to.equal 8
|
||||
done()
|
||||
@controller.getFile @req, @res
|
||||
|
||||
describe "insertFile", ->
|
||||
|
||||
it "should send bucket name key and res to PersistorManager", (done)->
|
||||
|
@ -101,7 +115,7 @@ describe "FileController", ->
|
|||
@res.send = (code)=>
|
||||
code.should.equal 500
|
||||
done()
|
||||
@controller.copyFile @req, @res
|
||||
@controller.copyFile @req, @res
|
||||
|
||||
describe "delete file", ->
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue