Skip to content
Snippets Groups Projects
Select Git revision
  • ba5db034d87356175106e75da8a637bc6690843b
  • master default protected
  • remove-event-tracking-fix-adblocker
  • ja-oss-test
  • sk-pin-chai-dependency
  • secure-headers
  • sk-add-csrf-acceptance-test
  • ja-handle-commands-in-arguments
  • ja-include-token-in-project-schema
  • sk-fix-project-feature-loading
  • ho-csrf-acceptence-tests
  • revert-580-ja-import-collaborators
  • ja-import-projects
  • ja-import-collaborators
  • sk-tc-toggle-access-control
  • ja-per-user-track-changes
  • ja-overleaf-oauth
  • ja-brand-prefix-config
  • ja-overleaf-styling
  • ho-overleaf-styling
  • ja-update-ace
  • v0.2.0
  • v0.1.4
  • v0.1.3
  • v0.1.2
  • v0.1.0
26 results

ProjectOutputFileAgent.coffee

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    ProjectOutputFileAgent.coffee 5.23 KiB
    AuthorizationManager = require('../Authorization/AuthorizationManager')
    ProjectGetter = require('../Project/ProjectGetter')
    Settings = require 'settings-sharelatex'
    CompileManager = require '../Compile/CompileManager'
    ClsiManager = require '../Compile/ClsiManager'
    ProjectFileAgent = require './ProjectFileAgent'
    _ = require "underscore"
    {
    	BadDataError,
    	AccessDeniedError,
    	BadEntityTypeError,
    	OutputFileFetchFailedError
    } = require './LinkedFilesErrors'
    LinkedFilesHandler = require './LinkedFilesHandler'
    logger = require 'logger-sharelatex'
    
    
    module.exports = ProjectOutputFileAgent = {
    
    	_prepare: (project_id, linkedFileData, user_id, callback=(err, linkedFileData)->) ->
    		@_checkAuth project_id, linkedFileData, user_id, (err, allowed) =>
    			return callback(err) if err?
    			return callback(new AccessDeniedError()) if !allowed
    			if !@_validate(linkedFileData)
    				return callback(new BadDataError())
    			callback(null, linkedFileData)
    
    	createLinkedFile: (project_id, linkedFileData, name, parent_folder_id, user_id, callback) ->
    		if !@_canCreate(linkedFileData)
    			return callback(new AccessDeniedError())
    		linkedFileData = @_sanitizeData(linkedFileData)
    		@_prepare project_id, linkedFileData, user_id, (err, linkedFileData) =>
    			return callback(err) if err?
    			@_getFileStream linkedFileData, user_id, (err, readStream) =>
    				return callback(err) if err?
    				readStream.on "error", callback
    				readStream.on "response", (response) =>
    					if 200 <= response.statusCode < 300
    						readStream.resume()
    						LinkedFilesHandler.importFromStream project_id,
    							readStream,
    							linkedFileData,
    							name,
    							parent_folder_id,
    							user_id,
    							(err, file) ->
    								return callback(err) if err?
    								callback(null, file._id) # Created
    					else
    						err = new OutputFileFetchFailedError(
    							"Output file fetch failed: #{linkedFileData.build_id}, #{linkedFileData.source_output_file_path}"
    						)
    						err.statusCode = response.statusCode
    						callback(err)
    
    	refreshLinkedFile: (project_id, linkedFileData, name, parent_folder_id, user_id, callback) ->
    		@_prepare project_id, linkedFileData, user_id, (err, linkedFileData) =>
    			return callback(err) if err?
    			@_compileAndGetFileStream linkedFileData, user_id, (err, readStream, new_build_id) =>
    				return callback(err) if err?
    				readStream.on "error", callback
    				readStream.on "response", (response) =>
    					if 200 <= response.statusCode < 300
    						readStream.resume()
    						linkedFileData.build_id = new_build_id
    						LinkedFilesHandler.importFromStream project_id,
    							readStream,
    							linkedFileData,
    							name,
    							parent_folder_id,