mirror of
https://github.com/overleaf/overleaf.git
synced 2024-12-28 16:01:13 +00:00
70 lines
2.5 KiB
CoffeeScript
70 lines
2.5 KiB
CoffeeScript
UserGetter = require "../User/UserGetter"
|
|
request = require "request"
|
|
settings = require "settings-sharelatex"
|
|
logger = require "logger-sharelatex"
|
|
{ V1ConnectionError } = require "../Errors/Errors"
|
|
|
|
module.exports = V1SubscriptionManager =
|
|
# Returned planCode = 'v1_pro' | 'v1_pro_plus' | 'v1_student' | 'v1_free' | null
|
|
# For this to work, we need plans in settings with plan-codes:
|
|
# - 'v1_pro'
|
|
# - 'v1_pro_plus'
|
|
# - 'v1_student'
|
|
# - 'v1_free'
|
|
getPlanCodeFromV1: (userId, callback=(err, planCode)->) ->
|
|
logger.log {userId}, "[V1SubscriptionManager] fetching v1 plan for user"
|
|
V1SubscriptionManager._v1Request userId, {
|
|
method: 'GET',
|
|
url: (v1Id) -> "/api/v1/sharelatex/users/#{v1Id}/plan_code"
|
|
}, (error, body) ->
|
|
return callback(error) if error?
|
|
planName = body?.plan_name
|
|
logger.log {userId, planName, body}, "[V1SubscriptionManager] fetched v1 plan for user"
|
|
if planName in ['pro', 'pro_plus', 'student', 'free']
|
|
planName = "v1_#{planName}"
|
|
else
|
|
# Throw away 'anonymous', etc as being equivalent to null
|
|
planName = null
|
|
return callback(null, planName)
|
|
|
|
notifyV1OfFeaturesChange: (userId, callback = (error) ->) ->
|
|
V1SubscriptionManager._v1Request userId, {
|
|
method: 'POST',
|
|
url: (v1Id) -> "/api/v1/sharelatex/users/#{v1Id}/sync"
|
|
}, callback
|
|
|
|
getSubscriptionsFromV1: (userId, callback=(err, subscriptions) ->) ->
|
|
V1SubscriptionManager._v1Request userId, {
|
|
method: 'GET',
|
|
url: (v1Id) -> "/api/v1/sharelatex/users/#{v1Id}/subscriptions"
|
|
}, callback
|
|
|
|
_v1Request: (userId, options, callback=(err, body)->) ->
|
|
if !settings?.apis?.v1
|
|
return callback null, null
|
|
UserGetter.getUser userId, {'overleaf.id': 1}, (err, user) ->
|
|
return callback(err) if err?
|
|
v1Id = user?.overleaf?.id
|
|
if !v1Id?
|
|
logger.log {userId}, "[V1SubscriptionManager] no v1 id found for user"
|
|
return callback(null, null)
|
|
request {
|
|
baseUrl: settings.apis.v1.url
|
|
url: options.url(v1Id)
|
|
method: options.method
|
|
auth:
|
|
user: settings.apis.v1.user
|
|
pass: settings.apis.v1.pass
|
|
sendImmediately: true
|
|
json: true,
|
|
timeout: 5 * 1000
|
|
}, (error, response, body) ->
|
|
if error?
|
|
# Specially handle no connection err, so warning can be shown
|
|
error = new V1ConnectionError('No V1 connection') if error.code == 'ECONNREFUSED'
|
|
return callback(error)
|
|
if 200 <= response.statusCode < 300
|
|
return callback null, body
|
|
else
|
|
return callback new Error("non-success code from v1: #{response.statusCode}")
|
|
|