diff --git a/services/web/app/coffee/Features/ThirdPartyDataStore/TpdsController.coffee b/services/web/app/coffee/Features/ThirdPartyDataStore/TpdsController.coffee index aa5e888375..8197f2a110 100644 --- a/services/web/app/coffee/Features/ThirdPartyDataStore/TpdsController.coffee +++ b/services/web/app/coffee/Features/ThirdPartyDataStore/TpdsController.coffee @@ -8,8 +8,9 @@ module.exports = mergeUpdate: (req, res)-> metrics.inc("tpds.merge-update") {filePath, user_id, projectName} = parseParams(req) - logger.log user_id:user_id, filePath:filePath, fullPath:req.params[0], projectName:projectName, "reciving update request from tpds" - tpdsUpdateHandler.newUpdate user_id, projectName, filePath, req, (err)-> + source = req.headers["x-sl-update-source"] or "unknown" + logger.log user_id:user_id, filePath:filePath, fullPath:req.params[0], projectName:projectName, source: source, "reciving update request from tpds" + tpdsUpdateHandler.newUpdate user_id, projectName, filePath, req, source, (err)-> logger.log user_id:user_id, filePath:filePath, fullPath:req.params[0], "sending response that tpdsUpdate has been completed" if err? logger.err err:err, user_id:user_id, filePath:filePath, "error reciving update from tpds" @@ -23,8 +24,9 @@ module.exports = deleteUpdate: (req, res)-> metrics.inc("tpds.delete-update") {filePath, user_id, projectName} = parseParams(req) - logger.log user_id:user_id, filePath:filePath, projectName:projectName, fullPath:req.params[0], "reciving delete request from tpds" - tpdsUpdateHandler.deleteUpdate user_id, projectName, filePath, (err)-> + source = req.headers["x-sl-update-source"] or "unknown" + logger.log user_id:user_id, filePath:filePath, projectName:projectName, fullPath:req.params[0], source: source, "reciving delete request from tpds" + tpdsUpdateHandler.deleteUpdate user_id, projectName, filePath, source, (err)-> if err? logger.err err:err, user_id:user_id, filePath:filePath, "error reciving update from tpds" res.send(500) @@ -36,7 +38,7 @@ module.exports = updateProjectContents: (req, res, next = (error) ->) -> {project_id} = req.params path = "/" + req.params[0] # UpdateMerger expects leading slash - source = req.headers["x-sl-update-source"] + source = req.headers["x-sl-update-source"] or "unknown" logger.log project_id: project_id, path: path, source: source, "received project contents update" UpdateMerger.mergeUpdate project_id, path, req, source, (error) -> return next(error) if error? @@ -46,7 +48,7 @@ module.exports = deleteProjectContents: (req, res, next = (error) ->) -> {project_id} = req.params path = "/" + req.params[0] # UpdateMerger expects leading slash - source = req.headers["x-sl-update-source"] + source = req.headers["x-sl-update-source"] or "unknown" logger.log project_id: project_id, path: path, source: source, "received project contents delete request" UpdateMerger.deleteUpdate project_id, path, source, (error) -> return next(error) if error? diff --git a/services/web/app/coffee/Features/ThirdPartyDataStore/TpdsUpdateHandler.coffee b/services/web/app/coffee/Features/ThirdPartyDataStore/TpdsUpdateHandler.coffee index 416faaaac0..efd34be640 100644 --- a/services/web/app/coffee/Features/ThirdPartyDataStore/TpdsUpdateHandler.coffee +++ b/services/web/app/coffee/Features/ThirdPartyDataStore/TpdsUpdateHandler.coffee @@ -9,7 +9,7 @@ commitMessage = "Before update from Dropbox" module.exports = - newUpdate: (user_id, projectName, path, updateRequest, callback)-> + newUpdate: (user_id, projectName, path, updateRequest, source, callback)-> getOrCreateProject = (cb)=> projectLocator.findUsersProjectByName user_id, projectName, (err, project)=> logger.log user_id:user_id, filePath:path, projectName:projectName, "handling new update from tpds" @@ -22,11 +22,11 @@ module.exports = else cb err, project getOrCreateProject (err, project)-> - updateMerger.mergeUpdate project._id, path, updateRequest, (err)-> + updateMerger.mergeUpdate project._id, path, updateRequest, source, (err)-> callback(err) - deleteUpdate: (user_id, projectName, path, callback)-> + deleteUpdate: (user_id, projectName, path, source, callback)-> logger.log user_id:user_id, filePath:path, "handling delete update from tpds" projectLocator.findUsersProjectByName user_id, projectName, (err, project)-> if !project? @@ -36,7 +36,7 @@ module.exports = logger.log user_id:user_id, filePath:path, projectName:projectName, project_id:project._id, "project found for delete update, path is root so marking project as deleted" return projectDeleter.markAsDeletedByExternalSource project._id, callback else - updateMerger.deleteUpdate project._id, path, (err)-> + updateMerger.deleteUpdate project._id, path, source, (err)-> callback(err) diff --git a/services/web/test/UnitTests/coffee/ThirdPartyDataStore/TpdsControllerTests.coffee b/services/web/test/UnitTests/coffee/ThirdPartyDataStore/TpdsControllerTests.coffee index e0b424e571..e43737a478 100644 --- a/services/web/test/UnitTests/coffee/ThirdPartyDataStore/TpdsControllerTests.coffee +++ b/services/web/test/UnitTests/coffee/ThirdPartyDataStore/TpdsControllerTests.coffee @@ -25,9 +25,11 @@ describe 'TpdsController', -> params:{0:path, "user_id":@user_id} session: destroy:-> - @TpdsUpdateHandler.newUpdate = sinon.stub().callsArg(4) + headers: + "x-sl-update-source": @source = "dropbox" + @TpdsUpdateHandler.newUpdate = sinon.stub().callsArg(5) res = send: => - @TpdsUpdateHandler.newUpdate.calledWith(@user_id, "projectName","/here.txt", req).should.equal true + @TpdsUpdateHandler.newUpdate.calledWith(@user_id, "projectName","/here.txt", req, @source).should.equal true done() @TpdsController.mergeUpdate req, res @@ -38,9 +40,11 @@ describe 'TpdsController', -> params:{0:path, "user_id":@user_id} session: destroy:-> - @TpdsUpdateHandler.deleteUpdate = sinon.stub().callsArg(3) + headers: + "x-sl-update-source": @source = "dropbox" + @TpdsUpdateHandler.deleteUpdate = sinon.stub().callsArg(4) res = send: => - @TpdsUpdateHandler.deleteUpdate.calledWith(@user_id, "projectName", "/here.txt").should.equal true + @TpdsUpdateHandler.deleteUpdate.calledWith(@user_id, "projectName", "/here.txt", @source).should.equal true done() @TpdsController.deleteUpdate req, res diff --git a/services/web/test/UnitTests/coffee/ThirdPartyDataStore/TpdsUpdateHandlerTests.coffee b/services/web/test/UnitTests/coffee/ThirdPartyDataStore/TpdsUpdateHandlerTests.coffee index 5ff8b509be..4e2f72779b 100644 --- a/services/web/test/UnitTests/coffee/ThirdPartyDataStore/TpdsUpdateHandlerTests.coffee +++ b/services/web/test/UnitTests/coffee/ThirdPartyDataStore/TpdsUpdateHandlerTests.coffee @@ -7,8 +7,8 @@ describe 'TpdsUpdateHandler', -> beforeEach -> @requestQueuer = {} @updateMerger = - deleteUpdate: (user_id, path, cb)->cb() - mergeUpdate:(user_id, path, update, cb)->cb() + deleteUpdate: (user_id, path, source, cb)->cb() + mergeUpdate:(user_id, path, update, source, cb)->cb() @editorController = {} @project_id = "dsjajilknaksdn" @project = {_id:@project_id, name:"projectNameHere"} @@ -33,15 +33,15 @@ describe 'TpdsUpdateHandler', -> path = "/path/here" update = {} @updateMerger.mergeUpdate = sinon.stub() - @updateMerger.mergeUpdate.withArgs(@project_id, path, update).callsArg(3) - @handler.newUpdate @user_id, @project.name, path, update, => + @updateMerger.mergeUpdate.withArgs(@project_id, path, update, @source).callsArg(4) + @handler.newUpdate @user_id, @project.name, path, update, @source, => @projectCreationHandler.createBlankProject.called.should.equal false done() it 'should create a new project if one does not already exit', (done)-> @projectLocator.findUsersProjectByName = sinon.stub().callsArgWith(2) path = "/" - @handler.newUpdate @user_id, @project.name, path, {}, => + @handler.newUpdate @user_id, @project.name, path, {}, @source, => @projectCreationHandler.createBlankProject.calledWith(@user_id, @project.name).should.equal true done() @@ -49,7 +49,7 @@ describe 'TpdsUpdateHandler', -> @projectLocator.findUsersProjectByName = sinon.stub().callsArgWith(2) @handler._rootDocTimeoutLength = 0 path = "/" - @handler.newUpdate @user_id, @project.name, path, {}, => + @handler.newUpdate @user_id, @project.name, path, {}, @source, => setTimeout (=> @rootDocManager.setRootDocAutomatically.calledWith(@project._id).should.equal true done() @@ -61,16 +61,16 @@ describe 'TpdsUpdateHandler', -> it 'should call deleteEntity in the collaberation manager', (done)-> path = "/delete/this" update = {} - @updateMerger.deleteUpdate = sinon.stub().callsArg(2) + @updateMerger.deleteUpdate = sinon.stub().callsArg(3) - @handler.deleteUpdate @user_id, @project.name, path, => + @handler.deleteUpdate @user_id, @project.name, path, @source, => @projectDeleter.markAsDeletedByExternalSource.calledWith(@project._id).should.equal false - @updateMerger.deleteUpdate.calledWith(@project_id, path).should.equal true + @updateMerger.deleteUpdate.calledWith(@project_id, path, @source).should.equal true done() it 'should mark the project as deleted by external source if path is a single slash', (done)-> path = "/" - @handler.deleteUpdate @user_id, @project.name, path, => + @handler.deleteUpdate @user_id, @project.name, path, @source, => @projectDeleter.markAsDeletedByExternalSource.calledWith(@project._id).should.equal true done()