mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
Rework how invite expiry functions.
This commit is contained in:
parent
d547bff4e5
commit
e53394919f
4 changed files with 39 additions and 12 deletions
|
@ -12,7 +12,7 @@ module.exports =
|
||||||
groupName: licence.name
|
groupName: licence.name
|
||||||
subscription_id: licence.subscription_id
|
subscription_id: licence.subscription_id
|
||||||
logger.log user_id:user._id, key:key, "creating notification key for user"
|
logger.log user_id:user._id, key:key, "creating notification key for user"
|
||||||
NotificationsHandler.createNotification user._id, @key, "notification_group_invite", messageOpts, callback
|
NotificationsHandler.createNotification user._id, @key, "notification_group_invite", messageOpts, null, callback
|
||||||
|
|
||||||
read: (callback = ->)->
|
read: (callback = ->)->
|
||||||
NotificationsHandler.markAsReadWithKey user._id, @key, callback
|
NotificationsHandler.markAsReadWithKey user._id, @key, callback
|
||||||
|
@ -26,6 +26,6 @@ module.exports =
|
||||||
projectId: project._id.toString()
|
projectId: project._id.toString()
|
||||||
token: invite.token
|
token: invite.token
|
||||||
logger.log {user_id: user._id, project_id: project._id, invite_id: invite._id, key: @key}, "creating project invite notification for user"
|
logger.log {user_id: user._id, project_id: project._id, invite_id: invite._id, key: @key}, "creating project invite notification for user"
|
||||||
NotificationsHandler.createNotification user._id, @key, "notification_project_invite", messageOpts, callback
|
NotificationsHandler.createNotification user._id, @key, "notification_project_invite", messageOpts, invite.expires, callback
|
||||||
read: (callback=()->) ->
|
read: (callback=()->) ->
|
||||||
NotificationsHandler.markAsReadByKeyOnly @key, callback
|
NotificationsHandler.markAsReadByKeyOnly @key, callback
|
||||||
|
|
|
@ -29,16 +29,19 @@ module.exports =
|
||||||
unreadNotifications = []
|
unreadNotifications = []
|
||||||
callback(null, unreadNotifications)
|
callback(null, unreadNotifications)
|
||||||
|
|
||||||
createNotification: (user_id, key, templateKey, messageOpts, callback)->
|
createNotification: (user_id, key, templateKey, messageOpts, expiryDateTime, callback)->
|
||||||
opts =
|
payload = {
|
||||||
uri: "#{settings.apis.notifications?.url}/user/#{user_id}"
|
|
||||||
timeout: oneSecond
|
|
||||||
method:"POST"
|
|
||||||
json: {
|
|
||||||
key:key
|
key:key
|
||||||
messageOpts:messageOpts
|
messageOpts:messageOpts
|
||||||
templateKey:templateKey
|
templateKey:templateKey
|
||||||
}
|
}
|
||||||
|
if expiryDateTime?
|
||||||
|
payload.expires = expiryDateTime
|
||||||
|
opts =
|
||||||
|
uri: "#{settings.apis.notifications?.url}/user/#{user_id}"
|
||||||
|
timeout: oneSecond
|
||||||
|
method:"POST"
|
||||||
|
json: payload
|
||||||
logger.log opts:opts, "creating notification for user"
|
logger.log opts:opts, "creating notification for user"
|
||||||
makeRequest opts, callback
|
makeRequest opts, callback
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,13 @@ Schema = mongoose.Schema
|
||||||
ObjectId = Schema.ObjectId
|
ObjectId = Schema.ObjectId
|
||||||
|
|
||||||
|
|
||||||
THIRTY_DAYS_IN_SECONDS = 60 * 60 * 24 * 30
|
EXPIRY_IN_SECONDS = 60 * 60 * 24 * 30
|
||||||
|
|
||||||
|
ExpiryDate = () ->
|
||||||
|
timestamp = new Date()
|
||||||
|
timestamp.setSeconds(timestamp.getSeconds() + EXPIRY_IN_SECONDS)
|
||||||
|
return timestamp
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ProjectInviteSchema = new Schema(
|
ProjectInviteSchema = new Schema(
|
||||||
|
@ -16,7 +22,8 @@ ProjectInviteSchema = new Schema(
|
||||||
sendingUserId: ObjectId
|
sendingUserId: ObjectId
|
||||||
projectId: ObjectId
|
projectId: ObjectId
|
||||||
privileges: String
|
privileges: String
|
||||||
createdAt: {type: Date, default: Date.now, index: {expireAfterSeconds: THIRTY_DAYS_IN_SECONDS}}
|
createdAt: {type: Date, default: Date.now}
|
||||||
|
expires: {type: Date, default: ExpiryDate, index: {expireAfterSeconds: 10}}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
collection: 'projectInvites'
|
collection: 'projectInvites'
|
||||||
|
@ -29,7 +36,7 @@ conn = mongoose.createConnection(Settings.mongo.url, server: poolSize: Settings.
|
||||||
|
|
||||||
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
|
||||||
|
exports.EXPIRY_IN_SECONDS = EXPIRY_IN_SECONDS
|
||||||
|
|
|
@ -60,9 +60,10 @@ describe 'NotificationsHandler', ->
|
||||||
@key = "some key here"
|
@key = "some key here"
|
||||||
@messageOpts = {value:12344}
|
@messageOpts = {value:12344}
|
||||||
@templateKey = "renderThisHtml"
|
@templateKey = "renderThisHtml"
|
||||||
|
@expiry = null
|
||||||
|
|
||||||
it "should post the message over", (done)->
|
it "should post the message over", (done)->
|
||||||
@handler.createNotification user_id, @key, @templateKey, @messageOpts, =>
|
@handler.createNotification user_id, @key, @templateKey, @messageOpts, @expiry, =>
|
||||||
args = @request.args[0][0]
|
args = @request.args[0][0]
|
||||||
args.uri.should.equal "#{notificationUrl}/user/#{user_id}"
|
args.uri.should.equal "#{notificationUrl}/user/#{user_id}"
|
||||||
args.timeout.should.equal 1000
|
args.timeout.should.equal 1000
|
||||||
|
@ -70,6 +71,22 @@ describe 'NotificationsHandler', ->
|
||||||
assert.deepEqual(args.json, expectedJson)
|
assert.deepEqual(args.json, expectedJson)
|
||||||
done()
|
done()
|
||||||
|
|
||||||
|
describe 'when expiry date is supplied', ->
|
||||||
|
beforeEach ->
|
||||||
|
@key = "some key here"
|
||||||
|
@messageOpts = {value:12344}
|
||||||
|
@templateKey = "renderThisHtml"
|
||||||
|
@expiry = new Date()
|
||||||
|
|
||||||
|
it 'should post the message over with expiry field', (done) ->
|
||||||
|
@handler.createNotification user_id, @key, @templateKey, @messageOpts, @expiry, =>
|
||||||
|
args = @request.args[0][0]
|
||||||
|
args.uri.should.equal "#{notificationUrl}/user/#{user_id}"
|
||||||
|
args.timeout.should.equal 1000
|
||||||
|
expectedJson = {key:@key, templateKey:@templateKey, messageOpts:@messageOpts, expires: @expiry}
|
||||||
|
assert.deepEqual(args.json, expectedJson)
|
||||||
|
done()
|
||||||
|
|
||||||
describe "markAsReadByKeyOnly", ->
|
describe "markAsReadByKeyOnly", ->
|
||||||
beforeEach ->
|
beforeEach ->
|
||||||
@key = "some key here"
|
@key = "some key here"
|
||||||
|
|
Loading…
Reference in a new issue