Remove tokenMembers sync to clients

This commit is contained in:
Shane Kilkelly 2017-10-25 11:29:05 +01:00
parent 74c231826d
commit 8561b69ee9
11 changed files with 24 additions and 99 deletions

View file

@ -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})

View file

@ -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())

View file

@ -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',

View file

@ -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

View file

@ -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) ->

View file

@ -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',

View file

@ -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"
]

View file

@ -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
})
}
]

View file

@ -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

View file

@ -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 =

View file

@ -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