NewsletterManager.coffee 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. async = require('async')
  2. logger = require 'logger-sharelatex'
  3. Settings = require 'settings-sharelatex'
  4. crypto = require('crypto')
  5. Mailchimp = require('mailchimp-api-v3')
  6. module.exports =
  7. subscribe: (user, callback = () ->)->
  8. if !Settings.mailchimp?
  9. logger.warn "No newsletter provider configured so not subscribing user"
  10. return callback()
  11. options = buildOptions(user, true)
  12. logger.log options:options, user:user, email:user.email, "trying to subscribe user to the mailing list"
  13. mailchimp = new Mailchimp(Settings.mailchimp?.api_key)
  14. mailchimp.request options, (err)->
  15. if err?
  16. logger.err err:err, "error subscribing person to newsletter"
  17. else
  18. logger.log user:user, "finished subscribing user to the newsletter"
  19. callback(err)
  20. unsubscribe: (user, callback = () ->)->
  21. if !Settings.mailchimp?
  22. logger.warn "No newsletter provider configured so not unsubscribing user"
  23. return callback()
  24. logger.log user:user, email:user.email, "trying to unsubscribe user to the mailing list"
  25. options = buildOptions(user, false)
  26. mailchimp = new Mailchimp(Settings.mailchimp?.api_key)
  27. mailchimp.request options, (err)->
  28. if err?
  29. logger.err err:err, "error unsubscribing person to newsletter"
  30. else
  31. logger.log user:user, "finished unsubscribing user to the newsletter"
  32. callback(err)
  33. hashEmail = (email)->
  34. crypto.createHash('md5').update(email.toLowerCase()).digest("hex")
  35. buildOptions = (user, is_subscribed)->
  36. status = if is_subscribed then "subscribed" else "unsubscribed"
  37. subscriber_hash = hashEmail(user.email)
  38. opts =
  39. method: "PUT"
  40. path: "/lists/#{Settings.mailchimp?.list_id}/members/#{subscriber_hash}"
  41. body:
  42. status_if_new: status
  43. status: status
  44. email_address:user.email
  45. merge_fields:
  46. FNAME: user.first_name
  47. LNAME: user.last_name
  48. return opts