Merge pull request #2594 from overleaf/jel-flag-affiliation-when-registering

Flag unchecked affiliation when registering

GitOrigin-RevId: c9da12ceb5a1712c8c477222f967fb54eceef252
This commit is contained in:
Timothée Alby
2020-02-21 04:21:16 +00:00
committed by Copybot
parent f5e2983a6b
commit 995dbc514d
6 changed files with 297 additions and 169 deletions
@@ -1,7 +1,28 @@
const logger = require('logger-sharelatex')
const util = require('util')
const { User } = require('../../models/User')
const { addAffiliation } = require('../Institutions/InstitutionsAPI')
const Features = require('../../infrastructure/Features')
const UserUpdater = require('./UserUpdater')
const UserGetter = require('./UserGetter')
async function _addAffiliation(user) {
try {
await UserUpdater.promises.addAffiliationForNewUser(user._id, user.email)
} catch (error) {
// do not pass error back during registration
// errors are logged in UserUpdater and InstitutionsAPI
}
try {
user = await UserGetter.promises.getUser(user._id)
} catch (error) {
logger.error(
{ userId: user._id, email: user.email },
'could not get fresh user data'
)
}
return user
}
async function createNewUser(attributes) {
let user = new User()
@@ -28,6 +49,9 @@ async function createNewUser(attributes) {
createdAt: new Date(),
reversedHostname
}
if (Features.hasFeature('affiliations')) {
emailData.affiliationUnchecked = true
}
if (
attributes.samlIdentifiers &&
attributes.samlIdentifiers[0] &&
@@ -40,14 +64,9 @@ async function createNewUser(attributes) {
user = await user.save()
addAffiliation(user._id, user.email, err => {
if (err) {
logger.error(
{ userId: user._id, email: user.email },
"couldn't add affiliation for user on create"
)
}
})
if (Features.hasFeature('affiliations')) {
user = await _addAffiliation(user)
}
return user
}
@@ -10,12 +10,35 @@ const {
addAffiliation,
removeAffiliation
} = require('../Institutions/InstitutionsAPI')
const Features = require('../../infrastructure/Features')
const FeaturesUpdater = require('../Subscription/FeaturesUpdater')
const EmailHelper = require('../Helpers/EmailHelper')
const Errors = require('../Errors/Errors')
const NewsletterManager = require('../Newsletter/NewsletterManager')
const UserUpdater = {
addAffiliationForNewUser(userId, email, callback) {
addAffiliation(userId, email, error => {
if (error) {
return callback(error)
}
UserUpdater.updateUser(
{ _id: userId, 'emails.email': email },
{ $unset: { 'emails.$.affiliationUnchecked': 1 } },
(error, updated) => {
if (error || (updated && updated.nModified === 0)) {
logger.error(
{ userId, email },
'could not remove affiliationUnchecked flag for user on create'
)
return callback(error)
}
return callback(error, updated)
}
)
})
},
updateUser(query, update, callback) {
if (callback == null) {
callback = () => {}
@@ -213,6 +236,11 @@ const UserUpdater = {
'emails.$.confirmedAt': confirmedAt
}
}
if (Features.hasFeature('affiliations')) {
update['$unset'] = {
'emails.$.affiliationUnchecked': 1
}
}
UserUpdater.updateUser(query, update, (error, res) => {
if (error != null) {
return callback(error)
@@ -249,6 +277,7 @@ const UserUpdater = {
)
const promises = {
addAffiliationForNewUser: promisify(UserUpdater.addAffiliationForNewUser),
addEmailAddress: promisify(UserUpdater.addEmailAddress),
confirmEmail: promisify(UserUpdater.confirmEmail),
updateUser: promisify(UserUpdater.updateUser)