2014-02-12 05:23:40 -05:00
settings = require ( ' settings-sharelatex ' )
logger = require ( ' logger-sharelatex ' )
path = require ( ' path ' )
Project = require ( ' ../../models/Project ' ) . Project
keys = require ( ' ../../infrastructure/Keys ' )
metrics = require ( " ../../infrastructure/Metrics " )
2015-06-22 17:28:17 -04:00
request = require ( " request " )
2016-03-08 06:54:45 -05:00
CollaboratorsHandler = require ( ' ../Collaborators/CollaboratorsHandler ' )
2014-02-12 05:23:40 -05:00
buildPath = (user_id, project_name, filePath)->
projectPath = path . join ( project_name , " / " , filePath )
projectPath = encodeURIComponent ( projectPath )
fullPath = path . join ( " /user/ " , " #{ user_id } " , " /entity/ " , projectPath )
return fullPath
2015-06-22 17:28:17 -04:00
2015-07-02 07:09:08 -04:00
tpdsworkerEnabled = -> settings . apis . tpdsworker ? . url ?
if ! tpdsworkerEnabled ( )
logger . log " tpdsworker is not enabled, request will not be sent to it "
2015-06-22 17:28:17 -04:00
module.exports = TpdsUpdateSender =
_enqueue: (group, method, job, callback)->
2015-07-02 07:09:08 -04:00
if ! tpdsworkerEnabled ( )
return callback ( )
2015-06-22 17:28:17 -04:00
opts =
2015-06-23 06:13:05 -04:00
uri : " #{ settings . apis . tpdsworker . url } /enqueue/web_to_tpds_http_requests "
2015-06-22 17:28:17 -04:00
json :
group : group
method : method
job : job
method : " post "
2015-06-23 06:19:23 -04:00
timeout: ( 5 * 1000 )
2015-06-22 17:28:17 -04:00
request opts , (err)->
if err ?
2015-06-23 06:19:23 -04:00
logger . err err : err , " error queuing something in the tpdsworker "
2015-06-22 17:28:17 -04:00
callback ( err )
else
2015-06-23 06:19:23 -04:00
logger . log group : group , " successfully queued up job for tpdsworker "
2015-06-22 17:28:17 -04:00
callback ( )
2014-05-20 08:18:59 -04:00
2014-10-15 09:11:02 -04:00
_addEntity: ( options , callback = (err)-> ) ->
2014-02-12 05:23:40 -05:00
getProjectsUsersIds options . project_id , (err, user_id, allUserIds)->
2014-10-15 09:11:02 -04:00
logger . log project_id: options . project_id , user_id : user_id , path: options . path , uri : options . uri , rev : options . rev , " sending file to third party data store "
2014-02-12 05:23:40 -05:00
postOptions =
method : " post "
2014-10-15 09:11:02 -04:00
headers:
2014-02-12 05:23:40 -05:00
sl_entity_rev : options . rev
sl_project_id : options . project_id
sl_all_user_ids : JSON . stringify ( allUserIds )
uri : " #{ settings . apis . thirdPartyDataStore . url } #{ buildPath ( user_id , options . project_name , options . path ) } "
2014-05-20 08:18:59 -04:00
title: " addFile "
streamOrigin : options . streamOrigin
2015-06-22 17:28:17 -04:00
TpdsUpdateSender . _enqueue options . project_id , " pipeStreamFrom " , postOptions , (err)->
2014-10-15 09:11:02 -04:00
logger . log project_id: options . project_id , user_id : user_id , path: options . path , uri : options . uri , rev : options . rev , " sending file to third party data store queued up for processing "
2015-06-22 17:28:17 -04:00
callback ( err )
2014-05-20 08:18:59 -04:00
2014-10-15 09:11:02 -04:00
addFile : ( options , callback = (err)-> ) ->
2014-05-20 08:18:59 -04:00
metrics . inc ( " tpds.add-file " )
options.streamOrigin = settings . apis . filestore . url + path . join ( " /project/ #{ options . project_id } /file/ " , " #{ options . file_id } " )
2014-10-15 09:11:02 -04:00
@ _addEntity ( options , callback )
2014-02-12 05:23:40 -05:00
2014-10-15 09:11:02 -04:00
addDoc : ( options , callback = (err)-> ) ->
2014-02-12 05:23:40 -05:00
metrics . inc ( " tpds.add-doc " )
2014-05-21 04:15:50 -04:00
options.streamOrigin = settings . apis . docstore . pubUrl + path . join ( " /project/ #{ options . project_id } /doc/ " , " #{ options . doc_id } /raw " )
2014-10-15 09:11:02 -04:00
@ _addEntity ( options , callback )
2014-02-12 05:23:40 -05:00
2014-10-15 09:11:02 -04:00
moveEntity : ( options , callback = (err)-> ) ->
2014-02-12 05:23:40 -05:00
metrics . inc ( " tpds.move-entity " )
if options . newProjectName ?
startPath = path . join ( " / #{ options . project_name } / " )
endPath = path . join ( " / #{ options . newProjectName } / " )
else
startPath = mergeProjectNameAndPath ( options . project_name , options . startPath )
endPath = mergeProjectNameAndPath ( options . project_name , options . endPath )
getProjectsUsersIds options . project_id , (err, user_id, allUserIds)->
2014-10-15 09:11:02 -04:00
logger . log project_id: options . project_id , user_id : user_id , startPath : startPath , endPath : endPath , uri : options . uri , " moving entity in third party data store "
2014-02-12 05:23:40 -05:00
moveOptions =
method : " put "
title : " moveEntity "
uri : " #{ settings . apis . thirdPartyDataStore . url } /user/ #{ user_id } /entity "
headers:
sl_project_id : options . project_id ,
sl_entity_rev : options . rev
sl_all_user_ids : JSON . stringify ( allUserIds )
json :
user_id : user_id
endPath: endPath
startPath: startPath
2015-06-22 17:28:17 -04:00
TpdsUpdateSender . _enqueue options . project_id , " standardHttpRequest " , moveOptions , callback
2014-02-12 05:23:40 -05:00
2014-10-15 09:11:02 -04:00
deleteEntity : ( options , callback = (err)-> ) ->
2014-02-12 05:23:40 -05:00
metrics . inc ( " tpds.delete-entity " )
getProjectsUsersIds options . project_id , (err, user_id, allUserIds)->
2014-10-15 09:11:02 -04:00
logger . log project_id: options . project_id , user_id : user_id , path: options . path , uri : options . uri , " deleting entity in third party data store "
2014-02-12 05:23:40 -05:00
deleteOptions =
method : " DELETE "
2014-10-15 09:11:02 -04:00
headers:
2014-02-12 05:23:40 -05:00
sl_project_id : options . project_id
sl_all_user_ids : JSON . stringify ( allUserIds )
uri : " #{ settings . apis . thirdPartyDataStore . url } #{ buildPath ( user_id , options . project_name , options . path ) } "
title : " deleteEntity "
sl_all_user_ids : JSON . stringify ( allUserIds )
2015-06-22 17:28:17 -04:00
TpdsUpdateSender . _enqueue options . project_id , " standardHttpRequest " , deleteOptions , callback
2014-08-13 12:26:18 -04:00
pollDropboxForUser: ( user_id , callback = (err) -> ) ->
metrics . inc ( " tpds.poll-dropbox " )
logger . log user_id: user_id , " polling dropbox for user "
options =
method: " POST "
uri : " #{ settings . apis . thirdPartyDataStore . url } /user/poll "
json:
user_ids: [ user_id ]
2015-06-22 17:28:17 -04:00
TpdsUpdateSender . _enqueue " poll-dropbox: #{ user_id } " , " standardHttpRequest " , options , callback
2014-02-12 05:23:40 -05:00
getProjectsUsersIds = ( project_id , callback = (err, owner_id, allUserIds)-> ) ->
2016-03-08 06:54:45 -05:00
Project . findById project_id , " _id owner_ref " , (err, project) ->
return callback ( err ) if err ?
CollaboratorsHandler . getMemberIds project_id , (err, member_ids) ->
return callback ( err ) if err ?
callback err , project . owner_ref , member_ids
2014-02-12 05:23:40 -05:00
mergeProjectNameAndPath = (project_name, path)->
if ( path . indexOf ( ' / ' ) == 0 )
path = path . substring ( 1 )
fullPath = " / #{ project_name } / #{ path } "
return fullPath