From 660bb75df492da257e1808f85d1288e2dceb3050 Mon Sep 17 00:00:00 2001 From: Brian Gough Date: Fri, 12 Dec 2014 16:47:43 +0000 Subject: [PATCH] add query string parameters for compileGroup= and pdfng= compileGroup will bypass mongo check for compileGroup priority pdfng will pass pdf Range: headers through from user request to CLSI --- .../Features/Compile/CompileController.coffee | 42 +++++++++++-------- .../Features/Compile/CompileManager.coffee | 2 +- .../ide/pdf/controllers/PdfController.coffee | 7 +++- .../ide/pdfng/directives/pdfViewer.coffee | 3 +- 4 files changed, 34 insertions(+), 20 deletions(-) diff --git a/services/web/app/coffee/Features/Compile/CompileController.coffee b/services/web/app/coffee/Features/Compile/CompileController.coffee index 663210b092..adde50f289 100755 --- a/services/web/app/coffee/Features/Compile/CompileController.coffee +++ b/services/web/app/coffee/Features/Compile/CompileController.coffee @@ -25,12 +25,13 @@ module.exports = CompileController = if req.body?.compiler options.compiler = req.body.compiler logger.log {options, project_id}, "got compile request" - CompileManager.compile project_id, user_id, options, (error, status, outputFiles) -> + CompileManager.compile project_id, user_id, options, (error, status, outputFiles, output, limits) -> return next(error) if error? res.contentType("application/json") res.send 200, JSON.stringify { status: status outputFiles: outputFiles + compileGroup: limits.compileGroup } downloadPdf: (req, res, next = (error) ->)-> @@ -69,23 +70,30 @@ module.exports = CompileController = CompileController.proxyToClsi(req.params.Project_id, req.url, req, res, next) proxyToClsi: (project_id, url, req, res, next = (error) ->) -> - CompileManager.getProjectCompileLimits project_id, (error, limits) -> - return next(error) if error? - if limits.compileGroup == "priority" - compilerUrl = Settings.apis.clsi_priority.url - else - compilerUrl = Settings.apis.clsi.url - url = "#{compilerUrl}#{url}" - logger.log url: url, "proxying to CLSI" - oneMinute = 60 * 1000 - # pass through If-* and Range headers for byte serving pdfs - # do not send any others, potential proxying loop if Host: is passed! + if req.query?.compileGroup + CompileController.proxyToClsiWithLimits(project_id, url, {compileGroup: req.query.compileGroup}, req, res, next) + else + CompileManager.getProjectCompileLimits project_id, (error, limits) -> + return next(error) if error? + CompileController.proxyToClsiWithLimits(project_id, url, limits, req, res, next) + + proxyToClsiWithLimits: (project_id, url, limits, req, res, next = (error) ->) -> + if limits.compileGroup == "priority" + compilerUrl = Settings.apis.clsi_priority.url + else + compilerUrl = Settings.apis.clsi.url + url = "#{compilerUrl}#{url}" + logger.log url: url, "proxying to CLSI" + oneMinute = 60 * 1000 + # pass through If-* and Range headers for byte serving pdfs + # do not send any others, potential proxying loop if Host: is passed! + if req.query?.pdfng newHeaders = {} for h, v of req.headers newHeaders[h] = req.headers[h] if h.match /^(If-|Range)/i proxy = request(url: url, method: req.method, timeout: oneMinute, headers: newHeaders) - proxy.pipe(res) - proxy.on "error", (error) -> - logger.warn err: error, url: url, "CLSI proxy error" - - + else + proxy = request(url: url, method: req.method, timeout: oneMinute) + proxy.pipe(res) + proxy.on "error", (error) -> + logger.warn err: error, url: url, "CLSI proxy error" diff --git a/services/web/app/coffee/Features/Compile/CompileManager.coffee b/services/web/app/coffee/Features/Compile/CompileManager.coffee index d35322077b..0089eb7b34 100755 --- a/services/web/app/coffee/Features/Compile/CompileManager.coffee +++ b/services/web/app/coffee/Features/Compile/CompileManager.coffee @@ -39,7 +39,7 @@ module.exports = CompileManager = ClsiManager.sendRequest project_id, options, (error, status, outputFiles, output) -> return callback(error) if error? logger.log files: outputFiles, "output files" - callback(null, status, outputFiles, output) + callback(null, status, outputFiles, output, limits) deleteAuxFiles: (project_id, callback = (error) ->) -> CompileManager.getProjectCompileLimits project_id, (error, limits) -> diff --git a/services/web/public/coffee/ide/pdf/controllers/PdfController.coffee b/services/web/public/coffee/ide/pdf/controllers/PdfController.coffee index ee898dd8f7..610009bf8c 100644 --- a/services/web/public/coffee/ide/pdf/controllers/PdfController.coffee +++ b/services/web/public/coffee/ide/pdf/controllers/PdfController.coffee @@ -38,7 +38,12 @@ define [ $scope.pdf.failure = true fetchLogs() else if response.status == "success" - $scope.pdf.url = "/project/#{$scope.project_id}/output/output.pdf?cache_bust=#{Date.now()}" + if response.compileGroup? + $scope.pdf.compileGroup = response.compileGroup + $scope.pdf.url = "/project/#{$scope.project_id}/output/output.pdf?cache_bust=#{Date.now()}" + + "&compileGroup=#{$scope.pdf.compileGroup}" + else + $scope.pdf.url = "/project/#{$scope.project_id}/output/output.pdf?cache_bust=#{Date.now()}" fetchLogs() IGNORE_FILES = ["output.fls", "output.fdb_latexmk"] diff --git a/services/web/public/coffee/ide/pdfng/directives/pdfViewer.coffee b/services/web/public/coffee/ide/pdfng/directives/pdfViewer.coffee index c9c696d087..7f3ac48250 100644 --- a/services/web/public/coffee/ide/pdfng/directives/pdfViewer.coffee +++ b/services/web/public/coffee/ide/pdfng/directives/pdfViewer.coffee @@ -26,7 +26,8 @@ define [ $scope.document.destroy() if $scope.document? - $scope.document = new PDFRenderer($scope.pdfSrc, { + # TODO need a proper url manipulation library to add to query string + $scope.document = new PDFRenderer($scope.pdfSrc + '&pdfng=true' , { scale: 1, navigateFn: (ref) -> # this function captures clicks on the annotation links