diff --git a/services/filestore/app/coffee/FileController.coffee b/services/filestore/app/coffee/FileController.coffee index 8517b3ca52..22db596d94 100644 --- a/services/filestore/app/coffee/FileController.coffee +++ b/services/filestore/app/coffee/FileController.coffee @@ -8,14 +8,7 @@ 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 = +module.exports = FileController = getFile: (req, res)-> {key, bucket} = req @@ -25,12 +18,10 @@ module.exports = bucket: bucket, format: format, style: style, - start: null, - end: null } metrics.inc "getFile" if req.headers.range? - range = get_range(req.headers.range) + range = FileController._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" @@ -76,3 +67,11 @@ module.exports = res.send 500 else res.send 204 + + _get_range: (header) -> + parsed = parseRange(maxSizeInBytes, header) + if parsed == -1 or parsed == -2 or parsed.type != 'bytes' + null + else + range = parsed[0] + {start: range.start, end: range.end} diff --git a/services/filestore/test/unit/coffee/FileControllerTests.coffee b/services/filestore/test/unit/coffee/FileControllerTests.coffee index e27b8fb127..1a2c3e81ea 100644 --- a/services/filestore/test/unit/coffee/FileControllerTests.coffee +++ b/services/filestore/test/unit/coffee/FileControllerTests.coffee @@ -133,3 +133,22 @@ describe "FileController", -> code.should.equal 500 done() @controller.deleteFile @req, @res + + describe "_get_range", -> + + it "should parse a valid Range header", (done) -> + result = @controller._get_range('bytes=0-200') + expect(result).to.not.equal null + expect(result.start).to.equal 0 + expect(result.end).to.equal 200 + done() + + it "should return null for an invalid Range header", (done) -> + result = @controller._get_range('wat') + expect(result).to.equal null + done() + + it "should return null for any type other than 'bytes'", (done) -> + result = @controller._get_range('carrots=0-200') + expect(result).to.equal null + done()