InstitutionsController.coffee 1.4 KB

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