Skip to content
Snippets Groups Projects
Select Git revision
  • 2fd9eac5d2ffa3f97e9dc5ca9fda6e9be75c8ed2
  • 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
  • user avatar
    Shane Kilkelly authored and David Mehren committed
    2fd9eac5
    History
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    ProjectOutputFileAgent.coffee 3.57 KiB
    FileWriter = require('../../infrastructure/FileWriter')
    AuthorizationManager = require('../Authorization/AuthorizationManager')
    ProjectGetter = require('../Project/ProjectGetter')
    FileWriter = require('../../infrastructure/FileWriter')
    Settings = require 'settings-sharelatex'
    CompileManager = require '../Compile/CompileManager'
    CompileController = require '../Compile/CompileController'
    ClsiCookieManager = require '../Compile/ClsiCookieManager'
    _ = require "underscore"
    request = require "request"
    
    
    BadDataError = (message) ->
    	error = new Error(message)
    	error.name = 'BadData'
    	error.__proto__ = BadDataError.prototype
    	return error
    BadDataError.prototype.__proto__ = Error.prototype
    
    
    ProjectNotFoundError = (message) ->
    	error = new Error(message)
    	error.name = 'ProjectNotFound'
    	error.__proto__ = ProjectNotFoundError.prototype
    	return error
    ProjectNotFoundError.prototype.__proto__ = Error.prototype
    
    
    OutputFileFetchFailedError = (message) ->
    	error = new Error(message)
    	error.name = 'OutputFileFetchFailedError'
    	error.__proto__ = OutputFileFetchFailedError.prototype
    	return error
    OutputFileFetchFailedError.prototype.__proto__ = Error.prototype
    
    
    module.exports = ProjectOutputFileAgent = {
    
    	sanitizeData: (data) ->
    		return {
    			source_project_id: data.source_project_id,
    			source_output_file_path: data.source_output_file_path
    		}
    
    	canCreate: (data) -> true
    
    	decorateLinkedFileData: (data, callback = (err, newData) ->) ->
    		callback = _.once(callback)
    		ProjectGetter.getProject data.source_project_id, {name: 1}, (err, project) ->
    			return callback(err) if err?
    			if !project?
    				return callback(new ProjectNotFoundError())
    			callback(err, _.extend(data, {source_project_display_name: project.name}))
    
    	checkAuth: (project_id, data, current_user_id, callback = (error, allowed)->) ->
    		callback = _.once(callback)
    		{ source_project_id } = data
    		AuthorizationManager.canUserReadProject current_user_id, source_project_id, null, (err, canRead) ->
    			return callback(err) if err?
    			callback(null, canRead)
    
    	_validate: (data) ->
    		data.source_project_id? && data.source_output_file_path?
    
    	writeIncomingFileToDisk: (project_id, data, current_user_id, callback = (error, fsPath) ->) ->
    		callback = _.once(callback)
    		# TODO:
    		#   - Compile project
    		#   - Get output file content
    		#   - Write to disk