mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-14 20:40:17 -05:00
50 lines
1.4 KiB
CoffeeScript
50 lines
1.4 KiB
CoffeeScript
Settings = require('settings-sharelatex')
|
|
crypto = require("crypto")
|
|
logger = require("logger-sharelatex")
|
|
{db} = require "../../infrastructure/mongojs"
|
|
Errors = require "../Errors/Errors"
|
|
|
|
ONE_HOUR_IN_S = 60 * 60
|
|
|
|
module.exports =
|
|
getNewToken: (use, data, options = {}, callback = (error, data) ->)->
|
|
# options is optional
|
|
if typeof options == "function"
|
|
callback = options
|
|
options = {}
|
|
expiresIn = options.expiresIn or ONE_HOUR_IN_S
|
|
createdAt = new Date()
|
|
expiresAt = new Date(createdAt.getTime() + expiresIn * 1000)
|
|
token = crypto.randomBytes(32).toString("hex")
|
|
logger.log {data, expiresIn, token_start: token.slice(0,8)}, "generating token for #{use}"
|
|
db.tokens.insert {
|
|
use: use
|
|
token: token,
|
|
data: data,
|
|
createdAt: createdAt,
|
|
expiresAt: expiresAt
|
|
}, (error) ->
|
|
return callback(error) if error?
|
|
callback null, token
|
|
|
|
getValueFromTokenAndExpire: (use, token, callback = (error, data) ->)->
|
|
logger.log token_start: token.slice(0,8), "getting data from #{use} token"
|
|
now = new Date()
|
|
db.tokens.findAndModify {
|
|
query: {
|
|
use: use,
|
|
token: token,
|
|
expiresAt: { $gt: now },
|
|
usedAt: { $exists: false }
|
|
},
|
|
update: {
|
|
$set: {
|
|
usedAt: now
|
|
}
|
|
}
|
|
}, (error, token) ->
|
|
return callback(error) if error?
|
|
if !token?
|
|
return callback(new Errors.NotFoundError('no token found'))
|
|
return callback null, token.data
|
|
|