overleaf/services/web/app/coffee/Features/Security/OneTimeTokenHandler.coffee

35 lines
1,000 B
CoffeeScript
Raw Normal View History

Settings = require('settings-sharelatex')
2014-09-26 13:52:00 +00:00
redis = require("redis-sharelatex")
rclient = redis.createClient(Settings.redis.web)
2014-05-16 09:52:31 +00:00
crypto = require("crypto")
2014-05-15 17:08:21 +00:00
logger = require("logger-sharelatex")
2014-05-15 16:58:25 +00:00
ONE_HOUR_IN_S = 60 * 60
buildKey = (token)-> return "password_token:#{token}"
module.exports =
getNewToken: (value, options = {}, callback)->
# options is optional
if typeof options == "function"
callback = options
options = {}
expiresIn = options.expiresIn or ONE_HOUR_IN_S
logger.log value:value, "generating token for password reset"
2014-05-16 09:52:31 +00:00
token = crypto.randomBytes(32).toString("hex")
multi = rclient.multi()
multi.set buildKey(token), value
multi.expire buildKey(token), expiresIn
multi.exec (err)->
callback(err, token)
getValueFromTokenAndExpire: (token, callback)->
2014-05-15 17:08:21 +00:00
logger.log token:token, "getting user id from password token"
2014-05-15 16:20:42 +00:00
multi = rclient.multi()
2014-05-15 16:58:25 +00:00
multi.get buildKey(token)
multi.del buildKey(token)
2014-05-15 16:20:42 +00:00
multi.exec (err, results)->
callback err, results[0]