From 8561b69ee9a7a215c5c34edf5919d488a9be9115 Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Wed, 25 Oct 2017 11:29:05 +0100 Subject: [PATCH] Remove tokenMembers sync to clients --- .../CollaboratorsController.coffee | 10 ------- .../Collaborators/CollaboratorsHandler.coffee | 12 --------- .../Collaborators/CollaboratorsRouter.coffee | 7 ----- .../Editor/EditorHttpController.coffee | 26 +++++++++--------- .../Project/ProjectEditorHandler.coffee | 15 +++-------- .../TokenAccess/TokenAccessController.coffee | 1 + .../share/controllers/ShareController.coffee | 10 ------- .../ide/share/services/projectMembers.coffee | 7 ----- .../Editor/EditorHttpControllerTests.coffee | 5 ---- .../Project/ProjectControllerTests.coffee | 3 +++ .../Project/ProjectEditorHandlerTests.coffee | 27 ++++--------------- 11 files changed, 24 insertions(+), 99 deletions(-) diff --git a/services/web/app/coffee/Features/Collaborators/CollaboratorsController.coffee b/services/web/app/coffee/Features/Collaborators/CollaboratorsController.coffee index e299cab448..1d5a147c95 100644 --- a/services/web/app/coffee/Features/Collaborators/CollaboratorsController.coffee +++ b/services/web/app/coffee/Features/Collaborators/CollaboratorsController.coffee @@ -38,13 +38,3 @@ module.exports = CollaboratorsController = logger.err {projectId}, "error getting members for project" return next(err) res.json({members: members}) - - getTokenMembers: (req, res, next) -> - projectId = req.params.Project_id - logger.log {projectId}, "getting token members for project" - CollaboratorsHandler.getTokenMembers projectId, (err, tokenMembers) -> - tokenMembers = tokenMembers.slice(0, 100) - if err? - logger.err {projectId}, "error getting token members for project" - return next(err) - res.json({tokenMembers}) diff --git a/services/web/app/coffee/Features/Collaborators/CollaboratorsHandler.coffee b/services/web/app/coffee/Features/Collaborators/CollaboratorsHandler.coffee index bf9c89137c..0f7f40a6b4 100644 --- a/services/web/app/coffee/Features/Collaborators/CollaboratorsHandler.coffee +++ b/services/web/app/coffee/Features/Collaborators/CollaboratorsHandler.coffee @@ -234,18 +234,6 @@ module.exports = CollaboratorsHandler = {owner, members} = ProjectEditorHandler.buildOwnerAndMembersViews(rawMembers) callback(null, members) - getTokenMembers: (projectId, callback=(err, members)->) -> - logger.log {projectId}, "fetching all token members" - CollaboratorsHandler.getTokenMembersWithPrivilegeLevels projectId, (error, rawTokenMembers) -> - if error? - logger.err {projectId, error}, "error getting token members for project" - return callback(error) - {_owner, tokenMembers} = ProjectEditorHandler.buildOwnerAndMembersViews( - null, - rawTokenMembers - ) - callback(null, tokenMembers) - userIsTokenMember: (userId, projectId, callback=(err, isTokenMember)->) -> userId = ObjectId(userId.toString()) projectId = ObjectId(projectId.toString()) diff --git a/services/web/app/coffee/Features/Collaborators/CollaboratorsRouter.coffee b/services/web/app/coffee/Features/Collaborators/CollaboratorsRouter.coffee index 14d71cc878..721e5a7b62 100644 --- a/services/web/app/coffee/Features/Collaborators/CollaboratorsRouter.coffee +++ b/services/web/app/coffee/Features/Collaborators/CollaboratorsRouter.coffee @@ -17,13 +17,6 @@ module.exports = CollaboratorsController.getAllMembers ) - webRouter.get( - '/project/:Project_id/token_members', - AuthenticationController.requireLogin(), - AuthorizationMiddlewear.ensureUserCanAdminProject, - CollaboratorsController.getTokenMembers - ) - # invites webRouter.post( '/project/:Project_id/invite', diff --git a/services/web/app/coffee/Features/Editor/EditorHttpController.coffee b/services/web/app/coffee/Features/Editor/EditorHttpController.coffee index fab4069369..058799a495 100644 --- a/services/web/app/coffee/Features/Editor/EditorHttpController.coffee +++ b/services/web/app/coffee/Features/Editor/EditorHttpController.coffee @@ -40,23 +40,21 @@ module.exports = EditorHttpController = return callback(new Error("not found")) if !project? CollaboratorsHandler.getInvitedMembersWithPrivilegeLevels project, (error, members) -> return callback(error) if error? - CollaboratorsHandler.getTokenMembersWithPrivilegeLevels project, (error, tokenMembers) -> + UserGetter.getUser user_id, { isAdmin: true }, (error, user) -> return callback(error) if error? - UserGetter.getUser user_id, { isAdmin: true }, (error, user) -> + token = TokenAccessHandler.getRequestToken(req, project_id) + AuthorizationManager.getPrivilegeLevelForProject user_id, project_id, token, (error, privilegeLevel) -> return callback(error) if error? - token = TokenAccessHandler.getRequestToken(req, project_id) - AuthorizationManager.getPrivilegeLevelForProject user_id, project_id, token, (error, privilegeLevel) -> + if !privilegeLevel? or privilegeLevel == PrivilegeLevels.NONE + logger.log {project_id, user_id, privilegeLevel}, "not an acceptable privilege level, returning null" + return callback null, null, false + CollaboratorsInviteHandler.getAllInvites project_id, (error, invites) -> return callback(error) if error? - if !privilegeLevel? or privilegeLevel == PrivilegeLevels.NONE - logger.log {project_id, user_id, privilegeLevel}, "not an acceptable privilege level, returning null" - return callback null, null, false - CollaboratorsInviteHandler.getAllInvites project_id, (error, invites) -> - return callback(error) if error? - logger.log {project_id, user_id, memberCount: members.length, inviteCount: invites.length, privilegeLevel}, "returning project model view" - callback(null, - ProjectEditorHandler.buildProjectModelView(project, members, invites, tokenMembers), - privilegeLevel - ) + logger.log {project_id, user_id, memberCount: members.length, inviteCount: invites.length, privilegeLevel}, "returning project model view" + callback(null, + ProjectEditorHandler.buildProjectModelView(project, members, invites), + privilegeLevel + ) restoreDoc: (req, res, next) -> project_id = req.params.Project_id diff --git a/services/web/app/coffee/Features/Project/ProjectEditorHandler.coffee b/services/web/app/coffee/Features/Project/ProjectEditorHandler.coffee index c9f9724e21..e7ebf9a24d 100644 --- a/services/web/app/coffee/Features/Project/ProjectEditorHandler.coffee +++ b/services/web/app/coffee/Features/Project/ProjectEditorHandler.coffee @@ -3,7 +3,7 @@ _ = require("underscore") module.exports = ProjectEditorHandler = trackChangesAvailable: false - buildProjectModelView: (project, members, invites, tokenMembers=[]) -> + buildProjectModelView: (project, members, invites) -> result = _id : project._id name : project.name @@ -17,20 +17,15 @@ module.exports = ProjectEditorHandler = deletedByExternalDataSource : project.deletedByExternalDataSource || false deletedDocs: project.deletedDocs members: [] - tokenMembers: [] invites: invites tokens: project.tokens if !result.invites? result.invites = [] - {owner, ownerFeatures, members, tokenMembers} = @buildOwnerAndMembersViews( - members, - tokenMembers - ) + {owner, ownerFeatures, members} = @buildOwnerAndMembersViews(members) result.owner = owner result.members = members - result.tokenMembers = tokenMembers result.features = _.defaults(ownerFeatures or {}, { collaborators: -1 # Infinite @@ -46,24 +41,20 @@ module.exports = ProjectEditorHandler = return result - buildOwnerAndMembersViews: (members, tokenMembers) -> + buildOwnerAndMembersViews: (members) -> owner = null ownerFeatures = null filteredMembers = [] - filteredTokenMembers = [] for member in (members || []) if member.privilegeLevel == "owner" ownerFeatures = member.user.features owner = @buildUserModelView member.user, "owner" else filteredMembers.push @buildUserModelView member.user, member.privilegeLevel - for tokenMember in (tokenMembers || []) - filteredTokenMembers.push @buildUserModelView tokenMember.user, tokenMember.privilegeLevel return { owner: owner, ownerFeatures: ownerFeatures, members: filteredMembers, - tokenMembers: filteredTokenMembers } buildUserModelView: (user, privileges) -> diff --git a/services/web/app/coffee/Features/TokenAccess/TokenAccessController.coffee b/services/web/app/coffee/Features/TokenAccess/TokenAccessController.coffee index f57b122090..3d97cf1de6 100644 --- a/services/web/app/coffee/Features/TokenAccess/TokenAccessController.coffee +++ b/services/web/app/coffee/Features/TokenAccess/TokenAccessController.coffee @@ -62,6 +62,7 @@ module.exports = TokenAccessController = logger.err {err, token, userId, projectId: project._id}, "error adding user to project with readAndWrite token" return next(err) + # TODO: check if this is still needed by the client setTimeout( () -> EditorRealTimeController.emitToRoom( 'project:membership:changed', diff --git a/services/web/public/coffee/ide/share/controllers/ShareController.coffee b/services/web/public/coffee/ide/share/controllers/ShareController.coffee index b44d6fb816..d33339f359 100644 --- a/services/web/public/coffee/ide/share/controllers/ShareController.coffee +++ b/services/web/public/coffee/ide/share/controllers/ShareController.coffee @@ -39,14 +39,4 @@ define [ $scope.project.invites = data.invites .catch () => console.error "Error fetching invites for project" - if data.tokenMembers - console.log ">> token members changed" - projectTokenMembers.getTokenMembers() - .then (response) => - { data } = response - console.log ">> got token members", data - if data.tokenMembers - $scope.project.tokenMembers = data.tokenMembers - .catch () => - console.error "Error fetching tokenMembers for project" ] diff --git a/services/web/public/coffee/ide/share/services/projectMembers.coffee b/services/web/public/coffee/ide/share/services/projectMembers.coffee index 0b0017526c..f1b2c8c3fe 100644 --- a/services/web/public/coffee/ide/share/services/projectMembers.coffee +++ b/services/web/public/coffee/ide/share/services/projectMembers.coffee @@ -25,12 +25,5 @@ define [ "X-Csrf-Token": window.csrfToken }) - getTokenMembers: () -> - $http.get("/project/#{ide.project_id}/token_members", { - json: true - headers: - "X-Csrf-Token": window.csrfToken - }) - } ] diff --git a/services/web/test/UnitTests/coffee/Editor/EditorHttpControllerTests.coffee b/services/web/test/UnitTests/coffee/Editor/EditorHttpControllerTests.coffee index 79efc86479..2bde0cdab2 100644 --- a/services/web/test/UnitTests/coffee/Editor/EditorHttpControllerTests.coffee +++ b/services/web/test/UnitTests/coffee/Editor/EditorHttpControllerTests.coffee @@ -133,11 +133,6 @@ describe "EditorHttpController", -> @CollaboratorsHandler.getInvitedMembersWithPrivilegeLevels .calledWith(@project) .should.equal true - - it "should get the list of users who access the project via token links", -> - @CollaboratorsHandler.getTokenMembersWithPrivilegeLevels - .calledWith(@project) - .should.equal true it "should look up the user", -> @UserGetter.getUser diff --git a/services/web/test/UnitTests/coffee/Project/ProjectControllerTests.coffee b/services/web/test/UnitTests/coffee/Project/ProjectControllerTests.coffee index 9abfb71c1e..ad9069e296 100644 --- a/services/web/test/UnitTests/coffee/Project/ProjectControllerTests.coffee +++ b/services/web/test/UnitTests/coffee/Project/ProjectControllerTests.coffee @@ -64,6 +64,8 @@ describe "ProjectController", -> @TokenAccessHandler = getRequestToken: sinon.stub().returns(@token) protectTokens: sinon.stub() + @CollaboratorsHandler = + userIsTokenMember: sinon.stub().callsArgWith(2, null, false) @ProjectController = SandboxedModule.require modulePath, requires: "settings-sharelatex":@settings "logger-sharelatex": @@ -90,6 +92,7 @@ describe "ProjectController", -> '../Authentication/AuthenticationController': @AuthenticationController "../Analytics/AnalyticsManager": @AnalyticsManager "../TokenAccess/TokenAccessHandler": @TokenAccessHandler + "../Collaborators/CollaboratorsHandler": @CollaboratorsHandler @projectName = "£12321jkj9ujkljds" @req = diff --git a/services/web/test/UnitTests/coffee/Project/ProjectEditorHandlerTests.coffee b/services/web/test/UnitTests/coffee/Project/ProjectEditorHandlerTests.coffee index b840387f61..4431bd2129 100644 --- a/services/web/test/UnitTests/coffee/Project/ProjectEditorHandlerTests.coffee +++ b/services/web/test/UnitTests/coffee/Project/ProjectEditorHandlerTests.coffee @@ -68,15 +68,6 @@ describe "ProjectEditorHandler", -> }, privilegeLevel: "readAndWrite" }] - @tokenMembers = [{ - user: { - _id: "token-read-only-id" - first_name : "TRead" - last_name : "TOnly" - email : "token-read-only@sharelatex.com" - }, - privilegeLevel: "readOnly" - }] @invites = [ {_id: "invite_one", email: "user-one@example.com", privileges: "readOnly", projectId: @project._id} {_id: "invite_two", email: "user-two@example.com", privileges: "readOnly", projectId: @project._id} @@ -86,7 +77,7 @@ describe "ProjectEditorHandler", -> describe "buildProjectModelView", -> describe "with owner and members included", -> beforeEach -> - @result = @handler.buildProjectModelView @project, @members, @invites, @tokenMembers + @result = @handler.buildProjectModelView @project, @members, @invites it "should include the id", -> should.exist @result._id @@ -136,10 +127,6 @@ describe "ProjectEditorHandler", -> findMember("read-write-id").last_name.should.equal "Write" findMember("read-write-id").email.should.equal "read-write@sharelatex.com" - it 'should include a list of tokenMembers', -> - @result.tokenMembers.length.should.equal 1 - @result.tokenMembers[0]._id.should.equal @tokenMembers[0].user._id - it "should include folders in the project", -> @result.rootFolder[0]._id.should.equal "root-folder-id" @result.rootFolder[0].name.should.equal "" @@ -204,10 +191,10 @@ describe "ProjectEditorHandler", -> collaborators: 3 compileGroup:"priority" compileTimeout: 22 - @result = @handler.buildOwnerAndMembersViews @members, @tokenMembers + @result = @handler.buildOwnerAndMembersViews @members it 'should produce an object with the right keys', -> - expect(@result).to.have.all.keys ['owner', 'ownerFeatures', 'members', 'tokenMembers'] + expect(@result).to.have.all.keys ['owner', 'ownerFeatures', 'members'] it 'should separate the owner from the members', -> @result.members.length.should.equal(@members.length-1) @@ -215,10 +202,6 @@ describe "ProjectEditorHandler", -> expect(@result.owner.email).to.equal @owner.email expect(@result.members.filter((m) => m._id == @owner._id).length).to.equal 0 - it 'should include a list of tokenMembers', -> - @result.tokenMembers.length.should.equal 1 - @result.tokenMembers[0]._id.should.equal @tokenMembers[0].user._id - it 'should extract the ownerFeatures from the owner object', -> expect(@result.ownerFeatures).to.deep.equal @owner.features @@ -226,10 +209,10 @@ describe "ProjectEditorHandler", -> beforeEach -> # remove the owner from members list @membersWithoutOwner = @members.filter((m) => m.user._id != @owner._id) - @result = @handler.buildOwnerAndMembersViews @membersWithoutOwner, @tokenMembers + @result = @handler.buildOwnerAndMembersViews @membersWithoutOwner it 'should produce an object with the right keys', -> - expect(@result).to.have.all.keys ['owner', 'ownerFeatures', 'members', 'tokenMembers'] + expect(@result).to.have.all.keys ['owner', 'ownerFeatures', 'members'] it 'should not separate out an owner', -> @result.members.length.should.equal @membersWithoutOwner.length