LimitationsManager.coffee 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. logger = require("logger-sharelatex")
  2. ProjectGetter = require('../Project/ProjectGetter')
  3. UserGetter = require("../User/UserGetter")
  4. SubscriptionLocator = require("./SubscriptionLocator")
  5. Settings = require("settings-sharelatex")
  6. CollaboratorsHandler = require("../Collaborators/CollaboratorsHandler")
  7. CollaboratorsInvitesHandler = require("../Collaborators/CollaboratorsInviteHandler")
  8. V1SubscriptionManager = require("./V1SubscriptionManager")
  9. module.exports = LimitationsManager =
  10. allowedNumberOfCollaboratorsInProject: (project_id, callback) ->
  11. ProjectGetter.getProject project_id, owner_ref: true, (error, project) =>
  12. return callback(error) if error?
  13. @allowedNumberOfCollaboratorsForUser project.owner_ref, callback
  14. allowedNumberOfCollaboratorsForUser: (user_id, callback) ->
  15. UserGetter.getUser user_id, {features: 1}, (error, user) ->
  16. return callback(error) if error?
  17. if user.features? and user.features.collaborators?
  18. callback null, user.features.collaborators
  19. else
  20. callback null, Settings.defaultFeatures.collaborators
  21. canAddXCollaborators: (project_id, x_collaborators, callback = (error, allowed)->) ->
  22. @allowedNumberOfCollaboratorsInProject project_id, (error, allowed_number) =>
  23. return callback(error) if error?
  24. CollaboratorsHandler.getInvitedCollaboratorCount project_id, (error, current_number) =>
  25. return callback(error) if error?
  26. CollaboratorsInvitesHandler.getInviteCount project_id, (error, invite_count) =>
  27. return callback(error) if error?
  28. if current_number + invite_count + x_collaborators <= allowed_number or allowed_number < 0
  29. callback null, true
  30. else
  31. callback null, false
  32. userHasSubscriptionOrIsGroupMember: (user, callback = (err, hasSubscriptionOrIsMember)->) ->
  33. @userHasV2Subscription user, (err, hasSubscription, subscription)=>
  34. return callback(err) if err?
  35. @userIsMemberOfGroupSubscription user, (err, isMember)=>
  36. return callback(err) if err?
  37. @userHasV1SubscriptionOrTeam user, (err, hasV1Subscription)=>
  38. return callback(err) if err?
  39. logger.log {user_id:user._id, isMember, hasSubscription, hasV1Subscription}, "checking if user has subscription or is group member"
  40. callback err, isMember or hasSubscription or hasV1Subscription, subscription
  41. userHasV2Subscription: (user, callback = (err, hasSubscription, subscription)->) ->
  42. logger.log user_id:user._id, "checking if user has subscription"
  43. SubscriptionLocator.getUsersSubscription user._id, (err, subscription)->
  44. if err?
  45. return callback(err)
  46. hasValidSubscription = subscription? and (subscription.recurlySubscription_id? or subscription?.customAccount == true)
  47. logger.log user:user, hasValidSubscription:hasValidSubscription, subscription:subscription, "checking if user has subscription"
  48. callback err, hasValidSubscription, subscription
  49. userHasV1OrV2Subscription: (user, callback = (err, hasSubscription) ->) ->
  50. @userHasV2Subscription user, (err, hasV2Subscription) =>
  51. return callback(err) if err?
  52. return callback null, true if hasV2Subscription
  53. @userHasV1Subscription user, (err, hasV1Subscription) =>
  54. return callback(err) if err?
  55. return callback null, true if hasV1Subscription
  56. return callback null, false
  57. userIsMemberOfGroupSubscription: (user, callback = (error, isMember, subscriptions) ->) ->
  58. logger.log user_id: user._id, "checking is user is member of subscription groups"
  59. SubscriptionLocator.getMemberSubscriptions user._id, (err, subscriptions = []) ->
  60. return callback(err) if err?
  61. callback err, subscriptions.length > 0, subscriptions
  62. userHasV1Subscription: (user, callback = (error, hasV1Subscription) ->) ->
  63. V1SubscriptionManager.getSubscriptionsFromV1 user._id, (err, v1Subscription) ->
  64. logger.log {user_id: user._id, v1Subscription}, '[userHasV1Subscription]'
  65. callback err, !!v1Subscription?.has_subscription
  66. userHasV1SubscriptionOrTeam: (user, callback = (error, hasV1Subscription) ->) ->
  67. V1SubscriptionManager.getSubscriptionsFromV1 user._id, (err, v1Subscription = {}) ->
  68. return callback(err) if err?
  69. hasV1Subscription = false
  70. if v1Subscription.has_subscription
  71. hasV1Subscription = true
  72. if (v1Subscription.teams or []).length > 0
  73. hasV1Subscription = true
  74. return callback null, hasV1Subscription
  75. teamHasReachedMemberLimit: (subscription) ->
  76. currentTotal = (subscription.member_ids or []).length +
  77. (subscription.teamInvites or []).length +
  78. (subscription.invited_emails or []).length
  79. return currentTotal >= subscription.membersLimit
  80. hasGroupMembersLimitReached: (subscriptionId, callback = (err, limitReached, subscription)->)->
  81. SubscriptionLocator.getSubscription subscriptionId, (err, subscription)->
  82. if err?
  83. logger.err err:err, subscriptionId: subscriptionId, "error getting subscription"
  84. return callback(err)
  85. if !subscription?
  86. logger.err subscriptionId: subscriptionId, "no subscription found"
  87. return callback("no subscription found")
  88. limitReached = LimitationsManager.teamHasReachedMemberLimit(subscription)
  89. callback(err, limitReached, subscription)