LimitationsManager.coffee 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. logger = require("logger-sharelatex")
  2. Project = require("../../models/Project").Project
  3. User = require("../../models/User").User
  4. SubscriptionLocator = require("./SubscriptionLocator")
  5. Settings = require("settings-sharelatex")
  6. CollaboratorsHandler = require("../Collaborators/CollaboratorsHandler")
  7. CollaboratorsInvitesHandler = require("../Collaborators/CollaboratorsInviteHandler")
  8. module.exports =
  9. allowedNumberOfCollaboratorsInProject: (project_id, callback) ->
  10. getOwnerOfProject project_id, (error, owner)->
  11. return callback(error) if error?
  12. if owner.features? and owner.features.collaborators?
  13. callback null, owner.features.collaborators
  14. else
  15. callback null, Settings.defaultPlanCode.collaborators
  16. canAddXCollaborators: (project_id, x_collaborators, callback = (error, allowed)->) ->
  17. @allowedNumberOfCollaboratorsInProject project_id, (error, allowed_number) =>
  18. return callback(error) if error?
  19. CollaboratorsHandler.getCollaboratorCount project_id, (error, current_number) =>
  20. return callback(error) if error?
  21. CollaboratorsInvitesHandler.getInviteCount project_id, (error, invite_count) =>
  22. return callback(error) if error?
  23. if current_number + invite_count + x_collaborators <= allowed_number or allowed_number < 0
  24. callback null, true
  25. else
  26. callback null, false
  27. userHasSubscriptionOrIsGroupMember: (user, callback = (err, hasSubscriptionOrIsMember)->) ->
  28. @userHasSubscription user, (err, hasSubscription, subscription)=>
  29. return callback(err) if err?
  30. @userIsMemberOfGroupSubscription user, (err, isMember)=>
  31. return callback(err) if err?
  32. logger.log user_id:user._id, isMember:isMember, hasSubscription:hasSubscription, "checking if user has subscription or is group member"
  33. callback err, isMember or hasSubscription, subscription
  34. userHasSubscription: (user, callback = (err, hasSubscription, subscription)->) ->
  35. logger.log user_id:user._id, "checking if user has subscription"
  36. SubscriptionLocator.getUsersSubscription user._id, (err, subscription)->
  37. if err?
  38. return callback(err)
  39. hasValidSubscription = subscription? and (subscription.recurlySubscription_id? or subscription?.customAccount == true)
  40. logger.log user:user, hasValidSubscription:hasValidSubscription, subscription:subscription, "checking if user has subscription"
  41. callback err, hasValidSubscription, subscription
  42. userIsMemberOfGroupSubscription: (user, callback = (error, isMember, subscriptions) ->) ->
  43. logger.log user_id: user._id, "checking is user is member of subscription groups"
  44. SubscriptionLocator.getMemberSubscriptions user._id, (err, subscriptions = []) ->
  45. return callback(err) if err?
  46. callback err, subscriptions.length > 0, subscriptions
  47. hasGroupMembersLimitReached: (user_id, callback = (err, limitReached, subscription)->)->
  48. SubscriptionLocator.getUsersSubscription user_id, (err, subscription)->
  49. if err?
  50. logger.err err:err, user_id:user_id, "error getting users subscription"
  51. return callback(err)
  52. if !subscription?
  53. logger.err user_id:user_id, "no subscription found for user"
  54. return callback("no subscription found")
  55. limitReached = subscription.member_ids.length >= subscription.membersLimit
  56. logger.log user_id:user_id, limitReached:limitReached, currentTotal: subscription.member_ids.length, membersLimit: subscription.membersLimit, "checking if subscription members limit has been reached"
  57. callback(err, limitReached, subscription)
  58. getOwnerOfProject = (project_id, callback)->
  59. Project.findById project_id, 'owner_ref', (error, project) ->
  60. return callback(error) if error?
  61. User.findById project.owner_ref, (error, owner) ->
  62. callback(error, owner)