Merge pull request #2594 from overleaf/jel-flag-affiliation-when-registering
Flag unchecked affiliation when registering GitOrigin-RevId: c9da12ceb5a1712c8c477222f967fb54eceef252
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user