소스 검색

Remove `expiresAt`, use mongo TTL instead.

Shane Kilkelly 10 년 전
부모
커밋
9e0c44573a

+ 1 - 1
services/web/app/coffee/Features/Collaborators/CollaboratorsInviteController.coffee

@@ -47,7 +47,7 @@ module.exports = CollaboratorsInviteController =
 			if err?
 			if err?
 				logger.err {projectId, token}, "error getting invite by token"
 				logger.err {projectId, token}, "error getting invite by token"
 				return next(err)
 				return next(err)
-			# TODO: should we render an expired view instead?
+			# TODO: render a not-valid view instead
 			if !invite
 			if !invite
 				logger.log {projectId, token}, "no invite found for token"
 				logger.log {projectId, token}, "no invite found for token"
 				return res.sendStatus(404)
 				return res.sendStatus(404)

+ 0 - 6
services/web/app/coffee/Features/Collaborators/CollaboratorsInviteHandler.coffee

@@ -47,13 +47,7 @@ module.exports = CollaboratorsInviteHandler =
 				logger.err {err, projectId}, "error fetching invite"
 				logger.err {err, projectId}, "error fetching invite"
 				return callback(err)
 				return callback(err)
 			if !invite
 			if !invite
-				err = new Errors.NotFoundError("no invite found for token")
 				logger.err {err, projectId, token: tokenString}, "no invite found"
 				logger.err {err, projectId, token: tokenString}, "no invite found"
-				return callback(err)
-			now = new Date()
-			# TODO: re-assess whether we should return null or a notfounderror
-			if invite.expiresAt < now
-				logger.log {projectId, inviteId: invite._id, expiresAt: invite.expiresAt}, "invite expired"
 				return callback(null, null)
 				return callback(null, null)
 			callback(null, invite)
 			callback(null, invite)
 
 

+ 6 - 6
services/web/app/coffee/models/ProjectInvite.coffee

@@ -1,14 +1,12 @@
 mongoose = require 'mongoose'
 mongoose = require 'mongoose'
 Settings = require 'settings-sharelatex'
 Settings = require 'settings-sharelatex'
 
 
+
 Schema = mongoose.Schema
 Schema = mongoose.Schema
 ObjectId = Schema.ObjectId
 ObjectId = Schema.ObjectId
 
 
-THIRTY_DAYS_IN_SECONDS = 60 * 60 * 24 * 30
 
 
-makeExpirationDate = () ->
-	nowInMillis = Date.now()
-	new Date(nowInMillis + (1000 * THIRTY_DAYS_IN_SECONDS))
+THIRTY_DAYS_IN_SECONDS = 60 * 60 * 24 * 30
 
 
 
 
 ProjectInviteSchema = new Schema
 ProjectInviteSchema = new Schema
@@ -17,13 +15,15 @@ ProjectInviteSchema = new Schema
 	sendingUserId:  ObjectId
 	sendingUserId:  ObjectId
 	projectId:      ObjectId
 	projectId:      ObjectId
 	privileges:     String
 	privileges:     String
-	createdAt:      {type: Date, default: Date.now}
-	expiresAt:      {type: Date, default: makeExpirationDate}
+	createdAt:      {type: Date, default: Date.now, index: {expiresAfterSeconds: THIRTY_DAYS_IN_SECONDS}}
+
 
 
 conn = mongoose.createConnection(Settings.mongo.url, server: poolSize: Settings.mongo.poolSize || 10)
 conn = mongoose.createConnection(Settings.mongo.url, server: poolSize: Settings.mongo.poolSize || 10)
 
 
+
 ProjectInvite = conn.model('ProjectInvite', ProjectInviteSchema)
 ProjectInvite = conn.model('ProjectInvite', ProjectInviteSchema)
 
 
+
 mongoose.model 'ProjectInvite', ProjectInviteSchema
 mongoose.model 'ProjectInvite', ProjectInviteSchema
 exports.ProjectInvite = ProjectInvite
 exports.ProjectInvite = ProjectInvite
 exports.ProjectInviteSchema = ProjectInviteSchema
 exports.ProjectInviteSchema = ProjectInviteSchema

+ 0 - 2
services/web/test/UnitTests/coffee/Collaborators/CollaboratorsInviteControllerTests.coffee

@@ -45,7 +45,6 @@ describe "CollaboratorsInviteController", ->
 				projectId: @targetEmail,
 				projectId: @targetEmail,
 				targetEmail: 'user@example.com'
 				targetEmail: 'user@example.com'
 				createdAt: new Date(),
 				createdAt: new Date(),
-				expiresAt: new Date()
 			}
 			}
 			@LimitationsManager.canAddXCollaborators = sinon.stub().callsArgWith(2, null, true)
 			@LimitationsManager.canAddXCollaborators = sinon.stub().callsArgWith(2, null, true)
 			@CollaboratorsInviteHandler.inviteToProject = sinon.stub().callsArgWith(4, null, @invite)
 			@CollaboratorsInviteHandler.inviteToProject = sinon.stub().callsArgWith(4, null, @invite)
@@ -133,7 +132,6 @@ describe "CollaboratorsInviteController", ->
 				projectId: @projectId,
 				projectId: @projectId,
 				targetEmail: 'user@example.com'
 				targetEmail: 'user@example.com'
 				createdAt: new Date(),
 				createdAt: new Date(),
-				expiresAt: new Date()
 			}
 			}
 			@CollaboratorsInviteHandler.getInviteByToken = sinon.stub().callsArgWith(2, null, @invite)
 			@CollaboratorsInviteHandler.getInviteByToken = sinon.stub().callsArgWith(2, null, @invite)
 			@callback = sinon.stub()
 			@callback = sinon.stub()

+ 5 - 20
services/web/test/UnitTests/coffee/Collaborators/CollaboratorsInviteHandlerTests.coffee

@@ -130,8 +130,6 @@ describe "CollaboratorsInviteHandler", ->
 	describe 'getInviteByToken', ->
 	describe 'getInviteByToken', ->
 
 
 		beforeEach ->
 		beforeEach ->
-			@theDarkFuture = new Date()
-			@theDarkFuture.setYear(40000)
 			@fakeInvite =
 			@fakeInvite =
 				_id:            @inviteId
 				_id:            @inviteId
 				email:          @email
 				email:          @email
@@ -140,7 +138,6 @@ describe "CollaboratorsInviteHandler", ->
 				projectId:      @projectId
 				projectId:      @projectId
 				privileges:     @privileges
 				privileges:     @privileges
 				createdAt:      new Date()
 				createdAt:      new Date()
-				expiresAt:      @theDarkFuture
 			@ProjectInvite.findOne.callsArgWith(1, null, @fakeInvite)
 			@ProjectInvite.findOne.callsArgWith(1, null, @fakeInvite)
 			@call = (callback) =>
 			@call = (callback) =>
 				@CollaboratorsInviteHandler.getInviteByToken @projectId, @token, callback
 				@CollaboratorsInviteHandler.getInviteByToken @projectId, @token, callback
@@ -150,7 +147,7 @@ describe "CollaboratorsInviteHandler", ->
 			beforeEach ->
 			beforeEach ->
 
 
 			it 'should not produce an error', (done) ->
 			it 'should not produce an error', (done) ->
-				@call (err) =>
+				@call (err, invite) =>
 					expect(err).to.not.be.instanceof Error
 					expect(err).to.not.be.instanceof Error
 					expect(err).to.be.oneOf [null, undefined]
 					expect(err).to.be.oneOf [null, undefined]
 					done()
 					done()
@@ -161,7 +158,7 @@ describe "CollaboratorsInviteHandler", ->
 					done()
 					done()
 
 
 			it 'should call ProjectInvite.findOne', (done) ->
 			it 'should call ProjectInvite.findOne', (done) ->
-				@call (err) =>
+				@call (err, invite) =>
 					@ProjectInvite.findOne.callCount.should.equal 1
 					@ProjectInvite.findOne.callCount.should.equal 1
 					@ProjectInvite.findOne.calledWith({projectId: @projectId, token: @token}).should.equal true
 					@ProjectInvite.findOne.calledWith({projectId: @projectId, token: @token}).should.equal true
 					done()
 					done()
@@ -172,7 +169,7 @@ describe "CollaboratorsInviteHandler", ->
 				@ProjectInvite.findOne.callsArgWith(1, new Error('woops'))
 				@ProjectInvite.findOne.callsArgWith(1, new Error('woops'))
 
 
 			it 'should produce an error', (done) ->
 			it 'should produce an error', (done) ->
-				@call (err) =>
+				@call (err, invite) =>
 					expect(err).to.be.instanceof Error
 					expect(err).to.be.instanceof Error
 					done()
 					done()
 
 
@@ -181,26 +178,14 @@ describe "CollaboratorsInviteHandler", ->
 			beforeEach ->
 			beforeEach ->
 				@ProjectInvite.findOne.callsArgWith(1, null, null)
 				@ProjectInvite.findOne.callsArgWith(1, null, null)
 
 
-			it 'should produce an error', (done) ->
-				@call (err) =>
-					expect(err).to.be.instanceof Error
-					done()
-
-		describe 'when the invite is expired', ->
-
-			beforeEach ->
-				@theDeepPast = new Date()
-				@theDeepPast.setYear(1977)
-				@fakeInvite.expiresAt = @theDeepPast
-				@ProjectInvite.findOne.callsArgWith(1, null, @fakeInvite)
-
 			it 'should not produce an error', (done) ->
 			it 'should not produce an error', (done) ->
-				@call (err) =>
+				@call (err, invite) =>
 					expect(err).to.not.be.instanceof Error
 					expect(err).to.not.be.instanceof Error
 					expect(err).to.be.oneOf [null, undefined]
 					expect(err).to.be.oneOf [null, undefined]
 					done()
 					done()
 
 
 			it 'should not produce an invite object', (done) ->
 			it 'should not produce an invite object', (done) ->
 				@call (err, invite) =>
 				@call (err, invite) =>
+					expect(invite).to.not.be.instanceof Error
 					expect(invite).to.be.oneOf [null, undefined]
 					expect(invite).to.be.oneOf [null, undefined]
 					done()
 					done()