| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- Settings = require "settings-sharelatex"
- request = require('request')
- redis = require("redis-sharelatex")
- rclient = redis.createClient(Settings.redis.web)
- cookie = require('cookie')
- buildKey = (project_id)->
- return "clsiserver:#{project_id}"
- ONE_WEEK_IN_SECONDS = 60 * 60 * 24 * 7
- module.exports = ClsiRequestManager =
- _getServerId : (project_id, callback = (err, serverId)->)->
- multi = rclient.multi()
- multi.get buildKey(project_id)
- multi.expire buildKey(project_id), ONE_WEEK_IN_SECONDS
- multi.exec (err, results)->
- if err?
- return callback(err)
- serverId = results[0]
- if serverId?
- return callback(null, serverId)
- else
- return ClsiRequestManager._getServerIdViaRequest project_id, callback
- _getServerIdViaRequest :(project_id, callback = (err, serverId)->)->
- url = "#{Settings.apis.clsi.url}/project/#{project_id}/status"
- request.get url, (err, res, body)->
- if err?
- logger.err err:err, project_id:project_id, "error getting initial server id for project"
- return callback(err)
- ClsiRequestManager.setServerId project_id, res, callback
- _parseServerIdFromResponse : (response)->
- console.log response.headers
- cookies = cookie.parse(response.headers["set-cookie"]?[0] or "")
- return cookies?.clsiserver
- setServerId: (project_id, response, callback = ->)->
- serverId = ClsiRequestManager._parseServerIdFromResponse(response)
- multi = rclient.multi()
- multi.set buildKey(project_id), serverId
- multi.expire buildKey(project_id), ONE_WEEK_IN_SECONDS
- multi.exec callback
- getCookieJar: (project_id, opts, callback = (err, jar)->)->
- ClsiRequestManager._getServerId project_id, (err, serverId)=>
- if err?
- logger.err err:err, project_id:project_id, "error getting server id"
- return callback(err)
- cookie = request.cookie("clsiserver=#{serverId}")
- jar = request.jar()
- jar.setCookie cookie, Settings.apis.clsi.url
- callback(null, jar)
|