ClsiRequestManager.coffee 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. Settings = require "settings-sharelatex"
  2. request = require('request')
  3. redis = require("redis-sharelatex")
  4. rclient = redis.createClient(Settings.redis.web)
  5. cookie = require('cookie')
  6. buildKey = (project_id)->
  7. return "clsiserver:#{project_id}"
  8. ONE_WEEK_IN_SECONDS = 60 * 60 * 24 * 7
  9. module.exports = ClsiRequestManager =
  10. _getServerId : (project_id, callback = (err, serverId)->)->
  11. multi = rclient.multi()
  12. multi.get buildKey(project_id)
  13. multi.expire buildKey(project_id), ONE_WEEK_IN_SECONDS
  14. multi.exec (err, results)->
  15. if err?
  16. return callback(err)
  17. serverId = results[0]
  18. if serverId?
  19. return callback(null, serverId)
  20. else
  21. return ClsiRequestManager._getServerIdViaRequest project_id, callback
  22. _getServerIdViaRequest :(project_id, callback = (err, serverId)->)->
  23. url = "#{Settings.apis.clsi.url}/project/#{project_id}/status"
  24. request.get url, (err, res, body)->
  25. if err?
  26. logger.err err:err, project_id:project_id, "error getting initial server id for project"
  27. return callback(err)
  28. ClsiRequestManager.setServerId project_id, res, callback
  29. _parseServerIdFromResponse : (response)->
  30. console.log response.headers
  31. cookies = cookie.parse(response.headers["set-cookie"]?[0] or "")
  32. return cookies?.clsiserver
  33. setServerId: (project_id, response, callback = ->)->
  34. serverId = ClsiRequestManager._parseServerIdFromResponse(response)
  35. multi = rclient.multi()
  36. multi.set buildKey(project_id), serverId
  37. multi.expire buildKey(project_id), ONE_WEEK_IN_SECONDS
  38. multi.exec callback
  39. getCookieJar: (project_id, opts, callback = (err, jar)->)->
  40. ClsiRequestManager._getServerId project_id, (err, serverId)=>
  41. if err?
  42. logger.err err:err, project_id:project_id, "error getting server id"
  43. return callback(err)
  44. cookie = request.cookie("clsiserver=#{serverId}")
  45. jar = request.jar()
  46. jar.setCookie cookie, Settings.apis.clsi.url
  47. callback(null, jar)