| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 |
- /* eslint-disable
- camelcase,
- handle-callback-err,
- max-len,
- standard/no-callback-literal,
- */
- // TODO: This file was created by bulk-decaffeinate.
- // Fix any style issues and re-enable lint.
- /*
- * decaffeinate suggestions:
- * DS102: Remove unnecessary code created because of implicit returns
- * DS207: Consider shorter variations of null checks
- * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
- */
- let LimitationsManager
- const OError = require('@overleaf/o-error')
- const logger = require('logger-sharelatex')
- const ProjectGetter = require('../Project/ProjectGetter')
- const UserGetter = require('../User/UserGetter')
- const SubscriptionLocator = require('./SubscriptionLocator')
- const Settings = require('settings-sharelatex')
- const CollaboratorsGetter = require('../Collaborators/CollaboratorsGetter')
- const CollaboratorsInvitesHandler = require('../Collaborators/CollaboratorsInviteHandler')
- const V1SubscriptionManager = require('./V1SubscriptionManager')
- const { V1ConnectionError } = require('../Errors/Errors')
- module.exports = LimitationsManager = {
- allowedNumberOfCollaboratorsInProject(project_id, callback) {
- return ProjectGetter.getProject(
- project_id,
- { owner_ref: true },
- (error, project) => {
- if (error != null) {
- return callback(error)
- }
- return this.allowedNumberOfCollaboratorsForUser(
- project.owner_ref,
- callback
- )
- }
- )
- },
- allowedNumberOfCollaboratorsForUser(user_id, callback) {
- return UserGetter.getUser(user_id, { features: 1 }, function(error, user) {
- if (error != null) {
- return callback(error)
- }
- if (user.features != null && user.features.collaborators != null) {
- return callback(null, user.features.collaborators)
- } else {
- return callback(null, Settings.defaultFeatures.collaborators)
- }
- })
- },
- canAddXCollaborators(project_id, x_collaborators, callback) {
- if (callback == null) {
- callback = function(error, allowed) {}
- }
- return this.allowedNumberOfCollaboratorsInProject(
- project_id,
- (error, allowed_number) => {
- if (error != null) {
- return callback(error)
- }
- return CollaboratorsGetter.getInvitedCollaboratorCount(
- project_id,
- (error, current_number) => {
- if (error != null) {
- return callback(error)
- }
- return CollaboratorsInvitesHandler.getInviteCount(
- project_id,
- (error, invite_count) => {
- if (error != null) {
- return callback(error)
- }
- if (
- current_number + invite_count + x_collaborators <=
- allowed_number ||
- allowed_number < 0
- ) {
- return callback(null, true)
- } else {
- return callback(null, false)
- }
- }
- )
- }
- )
- }
- )
- },
- hasPaidSubscription(user, callback) {
- if (callback == null) {
- callback = function(err, hasSubscriptionOrIsMember) {}
- }
- return this.userHasV2Subscription(
- user,
- (err, hasSubscription, subscription) => {
- if (err != null) {
- return callback(err)
- }
- return this.userIsMemberOfGroupSubscription(user, (err, isMember) => {
- if (err != null) {
- return callback(err)
- }
- return this.userHasV1Subscription(user, (err, hasV1Subscription) => {
- if (err != null) {
- return callback(
- new V1ConnectionError(
- 'error getting subscription from v1'
- ).withCause(err)
- )
- }
- return callback(
- err,
- isMember || hasSubscription || hasV1Subscription,
- subscription
- )
- })
- })
- }
- )
- },
- // alias for backward-compatibility with modules. Use `haspaidsubscription` instead
- userHasSubscriptionOrIsGroupMember(user, callback) {
- return this.hasPaidSubscription(user, callback)
- },
- userHasV2Subscription(user, callback) {
- if (callback == null) {
- callback = function(err, hasSubscription, subscription) {}
- }
- return SubscriptionLocator.getUsersSubscription(user._id, function(
- err,
- subscription
- ) {
- if (err != null) {
- return callback(err)
- }
- const hasValidSubscription =
- subscription != null &&
- (subscription.recurlySubscription_id != null ||
- (subscription != null ? subscription.customAccount : undefined) ===
- true)
- return callback(err, hasValidSubscription, subscription)
- })
- },
- userHasV1OrV2Subscription(user, callback) {
- if (callback == null) {
- callback = function(err, hasSubscription) {}
- }
- return this.userHasV2Subscription(user, (err, hasV2Subscription) => {
- if (err != null) {
- return callback(err)
- }
- if (hasV2Subscription) {
- return callback(null, true)
- }
- return this.userHasV1Subscription(user, (err, hasV1Subscription) => {
- if (err != null) {
- return callback(err)
- }
- if (hasV1Subscription) {
- return callback(null, true)
- }
- return callback(null, false)
- })
- })
- },
- userIsMemberOfGroupSubscription(user, callback) {
- if (callback == null) {
- callback = function(error, isMember, subscriptions) {}
- }
- return SubscriptionLocator.getMemberSubscriptions(user._id, function(
- err,
- subscriptions
- ) {
- if (subscriptions == null) {
- subscriptions = []
- }
- if (err != null) {
- return callback(err)
- }
- return callback(err, subscriptions.length > 0, subscriptions)
- })
- },
- userHasV1Subscription(user, callback) {
- if (callback == null) {
- callback = function(error, hasV1Subscription) {}
- }
- return V1SubscriptionManager.getSubscriptionsFromV1(user._id, function(
- err,
- v1Subscription
- ) {
- return callback(
- err,
- !!(v1Subscription != null ? v1Subscription.has_subscription : undefined)
- )
- })
- },
- teamHasReachedMemberLimit(subscription) {
- const currentTotal =
- (subscription.member_ids || []).length +
- (subscription.teamInvites || []).length +
- (subscription.invited_emails || []).length
- return currentTotal >= subscription.membersLimit
- },
- hasGroupMembersLimitReached(subscriptionId, callback) {
- if (callback == null) {
- callback = function(err, limitReached, subscription) {}
- }
- return SubscriptionLocator.getSubscription(subscriptionId, function(
- err,
- subscription
- ) {
- if (err != null) {
- OError.tag(err, 'error getting subscription', {
- subscriptionId
- })
- return callback(err)
- }
- if (subscription == null) {
- logger.warn({ subscriptionId }, 'no subscription found')
- return callback(new Error('no subscription found'))
- }
- const limitReached = LimitationsManager.teamHasReachedMemberLimit(
- subscription
- )
- return callback(err, limitReached, subscription)
- })
- }
- }
|