InstitutionsController.coffee 1.3 KB

123456789101112131415161718192021222324252627282930313233
  1. logger = require("logger-sharelatex")
  2. UserGetter = require("../User/UserGetter")
  3. { addAffiliation } = require("../Institutions/InstitutionsAPI")
  4. FeaturesUpdater = require('../Subscription/FeaturesUpdater')
  5. async = require('async')
  6. module.exports = InstitutionsController =
  7. confirmDomain: (req, res, next) ->
  8. hostname = req.body.hostname
  9. affiliateUsers hostname, (error) ->
  10. return next(error) if error?
  11. res.sendStatus 200
  12. affiliateUsers = (hostname, callback = (error)->) ->
  13. reversedHostname = hostname.trim().split('').reverse().join('')
  14. UserGetter.getUsersByHostname hostname, {_id:1, emails:1}, (error, users) ->
  15. if error?
  16. logger.err error: error, 'problem fetching users by hostname'
  17. return callback(error)
  18. async.map users, ((user, innerCallback) ->
  19. affiliateUserByReversedHostname user, reversedHostname, innerCallback
  20. ), callback
  21. affiliateUserByReversedHostname = (user, reversedHostname, callback) ->
  22. matchingEmails = user.emails.filter (email) -> email.reversedHostname == reversedHostname
  23. async.map matchingEmails, ((email, innerCallback) ->
  24. addAffiliation user._id, email.email, {confirmedAt: email.confirmedAt}, (error) =>
  25. if error?
  26. logger.err error: error, 'problem adding affiliation while confirming hostname'
  27. return innerCallback(error)
  28. FeaturesUpdater.refreshFeatures user._id, true, innerCallback
  29. ), callback