LimitationsManager.coffee 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. module.exports = LimitationsManager =
  9. allowedNumberOfCollaboratorsInProject: (project_id, callback) ->
  10. ProjectGetter.getProject project_id, owner_ref: true, (error, project) =>
  11. return callback(error) if error?
  12. @allowedNumberOfCollaboratorsForUser project.owner_ref, callback
  13. allowedNumberOfCollaboratorsForUser: (user_id, callback) ->
  14. UserGetter.getUser user_id, {features: 1}, (error, user) ->
  15. return callback(error) if error?
  16. if user.features? and user.features.collaborators?
  17. callback null, user.features.collaborators
  18. else
  19. callback null, Settings.defaultPlanCode.collaborators
  20. canAddXCollaborators: (project_id, x_collaborators, callback = (error, allowed)->) ->
  21. @allowedNumberOfCollaboratorsInProject project_id, (error, allowed_number) =>
  22. return callback(error) if error?
  23. CollaboratorsHandler.getInvitedCollaboratorCount project_id, (error, current_number) =>
  24. return callback(error) if error?
  25. CollaboratorsInvitesHandler.getInviteCount project_id, (error, invite_count) =>
  26. return callback(error) if error?
  27. if current_number + invite_count + x_collaborators <= allowed_number or allowed_number < 0
  28. callback null, true
  29. else
  30. callback null, false
  31. userHasSubscriptionOrIsGroupMember: (user, callback = (err, hasSubscriptionOrIsMember)->) ->
  32. @userHasSubscription user, (err, hasSubscription, subscription)=>
  33. return callback(err) if err?
  34. @userIsMemberOfGroupSubscription user, (err, isMember)=>
  35. return callback(err) if err?
  36. logger.log user_id:user._id, isMember:isMember, hasSubscription:hasSubscription, "checking if user has subscription or is group member"
  37. callback err, isMember or hasSubscription, subscription
  38. userHasSubscription: (user, callback = (err, hasSubscription, subscription)->) ->
  39. logger.log user_id:user._id, "checking if user has subscription"
  40. SubscriptionLocator.getUsersSubscription user._id, (err, subscription)->
  41. if err?
  42. return callback(err)
  43. hasValidSubscription = subscription? and (subscription.recurlySubscription_id? or subscription?.customAccount == true)
  44. logger.log user:user, hasValidSubscription:hasValidSubscription, subscription:subscription, "checking if user has subscription"
  45. callback err, hasValidSubscription, subscription
  46. userIsMemberOfGroupSubscription: (user, callback = (error, isMember, subscriptions) ->) ->
  47. logger.log user_id: user._id, "checking is user is member of subscription groups"
  48. SubscriptionLocator.getMemberSubscriptions user._id, (err, subscriptions = []) ->
  49. return callback(err) if err?
  50. callback err, subscriptions.length > 0, subscriptions
  51. teamHasReachedMemberLimit: (subscription) ->
  52. currentTotal = (subscription.member_ids or []).length +
  53. (subscription.teamInvites or []).length +
  54. (subscription.invited_emails or []).length
  55. return currentTotal >= subscription.membersLimit
  56. hasGroupMembersLimitReached: (user_id, callback = (err, limitReached, subscription)->)->
  57. SubscriptionLocator.getUsersSubscription user_id, (err, subscription)->
  58. if err?
  59. logger.err err:err, user_id:user_id, "error getting users subscription"
  60. return callback(err)
  61. if !subscription?
  62. logger.err user_id:user_id, "no subscription found for user"
  63. return callback("no subscription found")
  64. limitReached = LimitationsManager.teamHasReachedMemberLimit(subscription)
  65. callback(err, limitReached, subscription)