Files
overleaf-cep/services/web/app/src/Features/Subscription/SubscriptionLocator.js
Brian Gough 1ff830027f Merge pull request #15726 from overleaf/ab-managed-users-module-cleanup
[web] Managed users / Group SSO module cleanup

GitOrigin-RevId: a24d3278667059248d9563afe44cafca5f87a7c0
2023-11-21 09:03:54 +00:00

169 lines
4.9 KiB
JavaScript

const { promisify } = require('util')
const { Subscription } = require('../../models/Subscription')
const { DeletedSubscription } = require('../../models/DeletedSubscription')
const logger = require('@overleaf/logger')
require('./GroupPlansData') // make sure dynamic group plans are loaded
const SubscriptionLocator = {
getUsersSubscription(userOrId, callback) {
const userId = SubscriptionLocator._getUserId(userOrId)
Subscription.findOne({ admin_id: userId }, function (err, subscription) {
logger.debug({ userId }, 'got users subscription')
callback(err, subscription)
})
},
getUserIndividualSubscription(userOrId, callback) {
const userId = SubscriptionLocator._getUserId(userOrId)
Subscription.findOne(
{ admin_id: userId, groupPlan: false },
function (err, subscription) {
logger.debug({ userId }, 'got users individual subscription')
callback(err, subscription)
}
)
},
getManagedGroupSubscriptions(userOrId, callback) {
Subscription.find({
manager_ids: userOrId,
groupPlan: true,
})
.populate('admin_id')
.exec(callback)
},
getMemberSubscriptions(userOrId, callback) {
const userId = SubscriptionLocator._getUserId(userOrId)
Subscription.find({ member_ids: userId })
.populate('admin_id')
.exec(callback)
},
getAdminEmail(subscriptionId, callback) {
Subscription.findById(subscriptionId)
.populate('admin_id', 'email')
.exec((err, subscription) => {
if (err) {
return callback(err)
}
callback(err, subscription?.admin_id?.email)
})
},
getAdminEmailAndName(subscriptionId, callback) {
Subscription.findById(subscriptionId)
.populate('admin_id', ['email', 'first_name', 'last_name'])
.exec((err, subscription) => {
if (err) {
return callback(err)
}
callback(err, subscription?.admin_id)
})
},
hasRecurlyGroupSubscription(userOrId, callback) {
const userId = SubscriptionLocator._getUserId(userOrId)
Subscription.exists(
{
groupPlan: true,
recurlySubscription_id: { $exists: true },
$or: [
{ member_ids: userId },
{ manager_ids: userId },
{ admin_id: userId },
],
},
callback
)
},
getSubscription(subscriptionId, callback) {
Subscription.findOne({ _id: subscriptionId }, callback)
},
getSubscriptionByMemberIdAndId(userId, subscriptionId, callback) {
Subscription.findOne(
{ member_ids: userId, _id: subscriptionId },
{ _id: 1 },
callback
)
},
getGroupSubscriptionsMemberOf(userId, callback) {
Subscription.find({ member_ids: userId }, { _id: 1, planCode: 1 }, callback)
},
getGroupsWithEmailInvite(email, callback) {
Subscription.find({ invited_emails: email }, callback)
},
getGroupsWithTeamInvitesEmail(email, callback) {
Subscription.find(
{ teamInvites: { $elemMatch: { email } } },
{ teamInvites: 1 },
callback
)
},
getGroupWithV1Id(v1TeamId, callback) {
Subscription.findOne({ 'overleaf.id': v1TeamId }, callback)
},
getUserDeletedSubscriptions(userId, callback) {
DeletedSubscription.find({ 'subscription.admin_id': userId }, callback)
},
getDeletedSubscription(subscriptionId, callback) {
DeletedSubscription.findOne(
{
'subscription._id': subscriptionId,
},
callback
)
},
_getUserId(userOrId) {
if (userOrId && userOrId._id) {
return userOrId._id
} else if (userOrId) {
return userOrId
}
},
}
SubscriptionLocator.promises = {
getUsersSubscription: promisify(SubscriptionLocator.getUsersSubscription),
getUserIndividualSubscription: promisify(
SubscriptionLocator.getUserIndividualSubscription
),
getManagedGroupSubscriptions: promisify(
SubscriptionLocator.getManagedGroupSubscriptions
),
getMemberSubscriptions: promisify(SubscriptionLocator.getMemberSubscriptions),
getAdminEmail: promisify(SubscriptionLocator.getAdminEmail),
getAdminEmailAndName: promisify(SubscriptionLocator.getAdminEmailAndName),
getSubscription: promisify(SubscriptionLocator.getSubscription),
getSubscriptionByMemberIdAndId: promisify(
SubscriptionLocator.getSubscriptionByMemberIdAndId
),
getGroupSubscriptionsMemberOf: promisify(
SubscriptionLocator.getGroupSubscriptionsMemberOf
),
getGroupsWithEmailInvite: promisify(
SubscriptionLocator.getGroupsWithEmailInvite
),
getGroupsWithTeamInvitesEmail: promisify(
SubscriptionLocator.getGroupsWithTeamInvitesEmail
),
getGroupWithV1Id: promisify(SubscriptionLocator.getGroupWithV1Id),
getUserDeletedSubscriptions: promisify(
SubscriptionLocator.getUserDeletedSubscriptions
),
getDeletedSubscription: promisify(SubscriptionLocator.getDeletedSubscription),
hasRecurlyGroupSubscription: promisify(
SubscriptionLocator.hasRecurlyGroupSubscription
),
}
module.exports = SubscriptionLocator