diff --git a/website/server/libs/payments/subscriptions.js b/website/server/libs/payments/subscriptions.js index 859cd1c76e..6601d5f5a6 100644 --- a/website/server/libs/payments/subscriptions.js +++ b/website/server/libs/payments/subscriptions.js @@ -116,6 +116,22 @@ async function prepareSubscriptionValues (data) { let recipientIsSubscribed = recipient.isSubscribed(); let isNewSubscription = !recipientIsSubscribed + if (data.user && !data.gift && !data.groupId) { + const unlockedUser = await User.findOneAndUpdate( + { + _id: data.user._id, + $or: [ + { _subSignature: 'NOT_RUNNING' }, + { _subSignature: { $exists: false } }, + ], + }, + { $set: { _subSignature: 'SUB_IN_PROGRESS' } }, + ); + if (!unlockedUser) { + throw new NotFound('User not found or subscription already processing.'); + } + } + // If we are buying a group subscription if (data.groupId) { const groupFields = basicGroupFields.concat(' purchased');