V1SubscriptionManager.coffee 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. UserGetter = require "../User/UserGetter"
  2. request = require "request"
  3. settings = require "settings-sharelatex"
  4. logger = require "logger-sharelatex"
  5. module.exports = V1SubscriptionManager =
  6. # Returned planCode = 'v1_pro' | 'v1_pro_plus' | 'v1_student' | 'v1_free' | null
  7. # For this to work, we need plans in settings with plan-codes:
  8. # - 'v1_pro'
  9. # - 'v1_pro_plus'
  10. # - 'v1_student'
  11. # - 'v1_free'
  12. getPlanCodeFromV1: (userId, callback=(err, planCode)->) ->
  13. logger.log {userId}, "[V1SubscriptionManager] fetching v1 plan for user"
  14. UserGetter.getUser userId, {'overleaf.id': 1}, (err, user) ->
  15. return callback(err) if err?
  16. v1Id = user?.overleaf?.id
  17. if !v1Id?
  18. logger.log {userId}, "[V1SubscriptionManager] no v1 id found for user"
  19. return callback(null, null)
  20. V1SubscriptionManager._v1PlanRequest v1Id, (err, body) ->
  21. return callback(err) if err?
  22. planName = body?.plan_name
  23. logger.log {userId, planName, body}, "[V1SubscriptionManager] fetched v1 plan for user"
  24. if planName in ['pro', 'pro_plus', 'student', 'free']
  25. planName = "v1_#{planName}"
  26. else
  27. # Throw away 'anonymous', etc as being equivalent to null
  28. planName = null
  29. return callback(null, planName)
  30. _v1PlanRequest: (v1Id, callback=(err, body)->) ->
  31. if !settings?.apis?.v1
  32. return callback null, null
  33. request {
  34. method: 'GET',
  35. url: settings.apis.v1.url +
  36. "/api/v1/sharelatex/users/#{v1Id}/plan_code"
  37. auth:
  38. user: settings.apis.v1.user
  39. pass: settings.apis.v1.pass
  40. sendImmediately: true
  41. json: true,
  42. timeout: 5 * 1000
  43. }, (error, response, body) ->
  44. return callback(error) if error?
  45. if 200 <= response.statusCode < 300
  46. return callback null, body
  47. else
  48. return callback new Error("non-success code from v1: #{response.statusCode}")