|
@@ -23,6 +23,7 @@ const OError = require('@overleaf/o-error')
|
|
|
const SplitTestHandler = require('../SplitTests/SplitTestHandler')
|
|
const SplitTestHandler = require('../SplitTests/SplitTestHandler')
|
|
|
const SubscriptionHelper = require('./SubscriptionHelper')
|
|
const SubscriptionHelper = require('./SubscriptionHelper')
|
|
|
const Features = require('../../infrastructure/Features')
|
|
const Features = require('../../infrastructure/Features')
|
|
|
|
|
+const UserGetter = require('../User/UserGetter')
|
|
|
|
|
|
|
|
const groupPlanModalOptions = Settings.groupPlanModalOptions
|
|
const groupPlanModalOptions = Settings.groupPlanModalOptions
|
|
|
const validGroupPlanModalOptions = {
|
|
const validGroupPlanModalOptions = {
|
|
@@ -193,6 +194,21 @@ async function paymentPage(req, res) {
|
|
|
currency = recommendedCurrency
|
|
currency = recommendedCurrency
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // Prevent checkout for users without a confirmed primary email address
|
|
|
|
|
+ const userData = await UserGetter.promises.getUser(user._id, {
|
|
|
|
|
+ email: 1,
|
|
|
|
|
+ emails: 1,
|
|
|
|
|
+ })
|
|
|
|
|
+ const userPrimaryEmail = userData.emails.find(
|
|
|
|
|
+ emailEntry => emailEntry.email === userData.email
|
|
|
|
|
+ )
|
|
|
|
|
+ if (userPrimaryEmail?.confirmedAt == null) {
|
|
|
|
|
+ return res.render('subscriptions/unconfirmed-primary-email', {
|
|
|
|
|
+ title: 'confirm_email',
|
|
|
|
|
+ email: userData.email,
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// Block web sales to restricted countries
|
|
// Block web sales to restricted countries
|
|
|
if (['CU', 'IR', 'KP', 'RU', 'SY', 'VE'].includes(countryCode)) {
|
|
if (['CU', 'IR', 'KP', 'RU', 'SY', 'VE'].includes(countryCode)) {
|
|
|
return res.render('subscriptions/restricted-country', {
|
|
return res.render('subscriptions/restricted-country', {
|