OneTimeTokenHandler.coffee 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. Settings = require('settings-sharelatex')
  2. RedisWrapper = require("../../infrastructure/RedisWrapper")
  3. rclient = RedisWrapper.client("one_time_token")
  4. crypto = require("crypto")
  5. logger = require("logger-sharelatex")
  6. ONE_HOUR_IN_S = 60 * 60
  7. buildKey = (use, token)-> return "#{use}_token:#{token}"
  8. module.exports =
  9. getNewToken: (use, value, options = {}, callback)->
  10. # options is optional
  11. if typeof options == "function"
  12. callback = options
  13. options = {}
  14. expiresIn = options.expiresIn or ONE_HOUR_IN_S
  15. token = crypto.randomBytes(32).toString("hex")
  16. logger.log {value, expiresIn, token_start: token.slice(0,8)}, "generating token for #{use}"
  17. multi = rclient.multi()
  18. multi.set buildKey(use, token), value
  19. multi.expire buildKey(use, token), expiresIn
  20. multi.exec (err)->
  21. callback(err, token)
  22. getValueFromTokenAndExpire: (use, token, callback)->
  23. logger.log token_start: token.slice(0,8), "getting value from #{use} token"
  24. multi = rclient.multi()
  25. multi.get buildKey(use, token)
  26. multi.del buildKey(use, token)
  27. multi.exec (err, results)->
  28. callback err, results?[0]