From 0a093b779e8994e3d7727ec0aac9e45ebe0a3343 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Wed, 16 Apr 2014 17:44:57 +0100 Subject: [PATCH 1/5] fixed #100, if tags is not running you should be able to delete a project still --- .../app/coffee/Features/Project/ProjectController.coffee | 2 +- .../web/app/coffee/Features/Project/ProjectDeleter.coffee | 8 ++++++-- services/web/app/coffee/Features/Tags/TagsHandler.coffee | 4 ++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/services/web/app/coffee/Features/Project/ProjectController.coffee b/services/web/app/coffee/Features/Project/ProjectController.coffee index 254de2a9b3..fd96b1742f 100644 --- a/services/web/app/coffee/Features/Project/ProjectController.coffee +++ b/services/web/app/coffee/Features/Project/ProjectController.coffee @@ -17,7 +17,7 @@ module.exports = deleteProject: (req, res)-> project_id = req.params.Project_id - logger.log project_id:project_id, "deleting project" + logger.log project_id:project_id, "recived request to delete project" projectDeleter.deleteProject project_id, (err)-> if err? res.send 500 diff --git a/services/web/app/coffee/Features/Project/ProjectDeleter.coffee b/services/web/app/coffee/Features/Project/ProjectDeleter.coffee index 0465959f2f..e184a2a95e 100644 --- a/services/web/app/coffee/Features/Project/ProjectDeleter.coffee +++ b/services/web/app/coffee/Features/Project/ProjectDeleter.coffee @@ -39,7 +39,8 @@ module.exports = (cb)-> AutomaticSnapshotManager.unmarkProjectAsUpdated project_id, cb (cb)-> - tagsHandler.removeProjectFromAllTags project.owner_ref, project_id, cb + tagsHandler.removeProjectFromAllTags project.owner_ref, project_id, (err)-> + cb() #doesn't matter if this fails or the order it happens in (cb)-> project.collaberator_refs.forEach (collaberator_ref)-> tagsHandler.removeProjectFromAllTags collaberator_ref, project_id, -> @@ -50,4 +51,7 @@ module.exports = cb() (cb)-> Project.remove {_id:project_id}, cb - ], callback + ], (err)-> + if err? + logger.err err:err, "problem deleting project" + callback(err) diff --git a/services/web/app/coffee/Features/Tags/TagsHandler.coffee b/services/web/app/coffee/Features/Tags/TagsHandler.coffee index 8bbce700a9..18b9608152 100644 --- a/services/web/app/coffee/Features/Tags/TagsHandler.coffee +++ b/services/web/app/coffee/Features/Tags/TagsHandler.coffee @@ -3,6 +3,7 @@ settings = require("settings-sharelatex") request = require("request") logger = require("logger-sharelatex") +oneSecond = 1000 module.exports = @@ -12,6 +13,7 @@ module.exports = uri:uri json: name:tag + timeout:oneSecond logger.log user_id:user_id, project_id:project_id, tag:tag, "send delete tag to tags api" request.del opts, callback @@ -21,6 +23,7 @@ module.exports = uri:uri json: name:tag + timeout:oneSecond logger.log user_id:user_id, project_id:project_id, tag:tag, "send add tag to tags api" request.post opts, callback @@ -50,6 +53,7 @@ module.exports = uri = buildUri(user_id, project_id) opts = uri:"#{settings.apis.tags.url}/user/#{user_id}/project/#{project_id}" + timeout:oneSecond logger.log user_id:user_id, project_id:project_id, "removing project_id from tags" request.del opts, callback From 39b9c9973561fbf01cd9db2d611d130d9a27fb63 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Wed, 16 Apr 2014 17:51:40 +0100 Subject: [PATCH 2/5] fix unit tests I broke by adding timeout to tags --- .../test/UnitTests/coffee/Tags/TagsHandlerTests.coffee | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/services/web/test/UnitTests/coffee/Tags/TagsHandlerTests.coffee b/services/web/test/UnitTests/coffee/Tags/TagsHandlerTests.coffee index be3559af9d..2ed50bfec2 100644 --- a/services/web/test/UnitTests/coffee/Tags/TagsHandlerTests.coffee +++ b/services/web/test/UnitTests/coffee/Tags/TagsHandlerTests.coffee @@ -6,7 +6,7 @@ modulePath = require('path').join __dirname, '../../../../app/js/Features/Tags/T _ = require('underscore') -describe 'Tags handler', -> +describe 'TagsHandler', -> user_id = "123nd3ijdks" project_id = "123njdskj9jlk" tagsUrl = "tags.sharelatex.testing" @@ -26,17 +26,17 @@ describe 'Tags handler', -> it 'Should post the request to the tags api with the user id in the url', (done)-> @handler.addTag user_id, project_id, tag, => - @request.post.calledWith({uri:"#{tagsUrl}/user/#{user_id}/project/#{project_id}/tag", json:{name:tag}}).should.equal true + @request.post.calledWith({uri:"#{tagsUrl}/user/#{user_id}/project/#{project_id}/tag", timeout:1000, json:{name:tag}}).should.equal true done() it 'should send a delete request when a delete has been recived with the body format standardised', (done)-> @handler.deleteTag user_id, project_id, tag, => - @request.del.calledWith({uri:"#{tagsUrl}/user/#{user_id}/project/#{project_id}/tag", json:{name:tag}}).should.equal true + @request.del.calledWith({uri:"#{tagsUrl}/user/#{user_id}/project/#{project_id}/tag", timeout:1000, json:{name:tag}}).should.equal true done() it 'should tell the tags api to remove the project_id from all the users tags', (done)-> @handler.removeProjectFromAllTags user_id, project_id, => - @request.del.calledWith({uri:"#{tagsUrl}/user/#{user_id}/project/#{project_id}"}).should.equal true + @request.del.calledWith({uri:"#{tagsUrl}/user/#{user_id}/project/#{project_id}", timeout:1000}).should.equal true done() describe "groupTagsByProject", -> From 295b438498ab3f648bd0152dea52644e9fe4f082 Mon Sep 17 00:00:00 2001 From: Yimin Date: Tue, 22 Apr 2014 04:21:42 -0500 Subject: [PATCH 3/5] fix typo --- .../app/coffee/Features/Templates/TemplatesController.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/web/app/coffee/Features/Templates/TemplatesController.coffee b/services/web/app/coffee/Features/Templates/TemplatesController.coffee index b44398a322..d71b93d74e 100644 --- a/services/web/app/coffee/Features/Templates/TemplatesController.coffee +++ b/services/web/app/coffee/Features/Templates/TemplatesController.coffee @@ -35,11 +35,11 @@ module.exports = res.redirect "/project/#{project._id}" publishProject: (user_id, project_id, callback)-> - logger.log user_id:user_id, project_id:project_id, "reciving request to publish project as template" + logger.log user_id:user_id, project_id:project_id, "receiving request to publish project as template" TemplatesPublisher.publish user_id, project_id, callback unPublishProject: (user_id, project_id, callback)-> - logger.log user_id:user_id, project_id:project_id, "reciving request to unpublish project as template" + logger.log user_id:user_id, project_id:project_id, "receiving request to unpublish project as template" TemplatesPublisher.unpublish user_id, project_id, callback getTemplateDetails: (user_id, project_id, callback)-> From d528ac21a3feab9cfbd52f2fa30b6fc6973f526e Mon Sep 17 00:00:00 2001 From: James Allen Date: Mon, 28 Apr 2014 12:53:43 +0100 Subject: [PATCH 4/5] Mark projects as archived, but don't actually delete them --- .../web/app/coffee/Features/Project/ProjectDeleter.coffee | 8 +------- services/web/app/coffee/managers/SecurityManager.coffee | 4 ++-- services/web/app/coffee/models/Project.coffee | 7 ++++--- .../UnitTests/coffee/Project/ProjectDeleterTests.coffee | 8 ++++++-- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/services/web/app/coffee/Features/Project/ProjectDeleter.coffee b/services/web/app/coffee/Features/Project/ProjectDeleter.coffee index e184a2a95e..41911d59b0 100644 --- a/services/web/app/coffee/Features/Project/ProjectDeleter.coffee +++ b/services/web/app/coffee/Features/Project/ProjectDeleter.coffee @@ -32,12 +32,6 @@ module.exports = async.series [ (cb)-> documentUpdaterHandler.flushProjectToMongoAndDelete project_id, cb - (cb)-> - Project.applyToAllFilesRecursivly project.rootFolder[0], (file)=> - FileStoreHandler.deleteFile project_id, file._id, -> - cb() - (cb)-> - AutomaticSnapshotManager.unmarkProjectAsUpdated project_id, cb (cb)-> tagsHandler.removeProjectFromAllTags project.owner_ref, project_id, (err)-> cb() #doesn't matter if this fails or the order it happens in @@ -50,7 +44,7 @@ module.exports = tagsHandler.removeProjectFromAllTags readOnly_ref, project_id, -> cb() (cb)-> - Project.remove {_id:project_id}, cb + Project.update {_id:project_id}, { $set: { archived: true }}, cb ], (err)-> if err? logger.err err:err, "problem deleting project" diff --git a/services/web/app/coffee/managers/SecurityManager.coffee b/services/web/app/coffee/managers/SecurityManager.coffee index 0052011122..ddb8ec5bac 100644 --- a/services/web/app/coffee/managers/SecurityManager.coffee +++ b/services/web/app/coffee/managers/SecurityManager.coffee @@ -28,7 +28,7 @@ module.exports = requestCanAccessProject : (req, res, next)-> doRequest = (req, res, next) -> getRequestUserAndProject req, res, {allow_auth_token: options?.allow_auth_token}, (err, user, project)-> - if !project? + if !project? or project.archived return HomeController.notFound(req, res, next) userCanAccessProject user, project, (canAccess, permissionLevel)-> if canAccess @@ -156,7 +156,7 @@ module.exports = getRequestUserAndProject = (req, res, options, callback)-> project_id = req.params.Project_id - Project.findById project_id, 'name owner_ref readOnly_refs collaberator_refs publicAccesLevel', (err, project)=> + Project.findById project_id, 'name owner_ref readOnly_refs collaberator_refs publicAccesLevel archived', (err, project)=> if err? logger.err err:err, "error getting project for security check" return callback err diff --git a/services/web/app/coffee/models/Project.coffee b/services/web/app/coffee/models/Project.coffee index f35f714af8..c2fade4665 100644 --- a/services/web/app/coffee/models/Project.coffee +++ b/services/web/app/coffee/models/Project.coffee @@ -26,6 +26,7 @@ ProjectSchema = new Schema deletedByExternalDataSource : {type: Boolean, default: false} useClsi2 : {type:Boolean, default: true} description : {type:String, default:''} + archived : { type: Boolean } ProjectSchema.statics.getProject = (project_or_id, fields, callback)-> if project_or_id._id? @@ -53,9 +54,9 @@ ProjectSchema.statics.findPopulatedById = (project_id, callback)-> callback(null, projects[0]) ProjectSchema.statics.findAllUsersProjects = (user_id, requiredFields, callback)-> - this.find {owner_ref:user_id}, requiredFields, (err, projects)=> - this.find {collaberator_refs:user_id}, requiredFields, (err, collabertions)=> - this.find {readOnly_refs:user_id}, requiredFields, (err, readOnlyProjects)=> + this.find {owner_ref:user_id, archived: { $exists: false }}, requiredFields, (err, projects)=> + this.find {collaberator_refs:user_id, archived: { $exists: false }}, requiredFields, (err, collabertions)=> + this.find {readOnly_refs:user_id, archived: { $exists: false }}, requiredFields, (err, readOnlyProjects)=> callback(err, projects, collabertions, readOnlyProjects) sanitizeTypeOfElement = (elementType)-> diff --git a/services/web/test/UnitTests/coffee/Project/ProjectDeleterTests.coffee b/services/web/test/UnitTests/coffee/Project/ProjectDeleterTests.coffee index 0cb4105bbf..b9f7d9d09e 100644 --- a/services/web/test/UnitTests/coffee/Project/ProjectDeleterTests.coffee +++ b/services/web/test/UnitTests/coffee/Project/ProjectDeleterTests.coffee @@ -61,7 +61,7 @@ describe 'Project deleter', -> describe "deleteProject", -> beforeEach -> - @Project.remove.callsArgWith(1) + @Project.update.callsArgWith(2) it "should flushProjectToMongoAndDelete in doc updater", (done)-> @deleter.deleteProject @project_id, => @@ -70,7 +70,11 @@ describe 'Project deleter', -> it "should remove the project", (done)-> @deleter.deleteProject @project_id, => - @Project.remove.calledWith(_id:@project_id).should.equal true + @Project.update.calledWith({ + _id:@project_id + }, { + $set: { archived: true } + }).should.equal true done() it "should removeProjectFromAllTags", (done)-> From 64ab1a4f5945cdba5d2e119ac2a9872d4241565d Mon Sep 17 00:00:00 2001 From: James Allen Date: Mon, 28 Apr 2014 12:54:16 +0100 Subject: [PATCH 5/5] Remove restore warning message --- services/web/app/views/project/list.jade | 8 -------- 1 file changed, 8 deletions(-) diff --git a/services/web/app/views/project/list.jade b/services/web/app/views/project/list.jade index 9c88abbba9..c651f5014f 100644 --- a/services/web/app/views/project/list.jade +++ b/services/web/app/views/project/list.jade @@ -59,14 +59,6 @@ block content .content-with-navigation-sidebar .box#projectListArea - - .row-fluid - .span12 - .alert.alert-info - p Due to unforeseen issues with our database, some projects which were changed or created on the 12th of April may have been rolled back 24 hours to Saturday morning (6am UTC on 12th April). - p If any or your projects are missing, or have been rolled-back to a previous version, then you can restore them from our latest back ups. - p We are very sorry about this. More details on what happened will follow as soon as possible. - .row-fluid .span12 .page-header