overleaf/services/web/app/coffee/Features/Newsletter/NewsletterManager.coffee

53 lines
1.7 KiB
CoffeeScript
Raw Normal View History

2014-02-12 05:23:40 -05:00
async = require('async')
logger = require 'logger-sharelatex'
Settings = require 'settings-sharelatex'
2018-08-04 12:30:24 -04:00
crypto = require('crypto')
Mailchimp = require('mailchimp-api-v3')
mailchimp = new Mailchimp(Settings.mailchimp?.api_key) if Settings.mailchimp?
2014-02-12 05:23:40 -05:00
module.exports =
subscribe: (user, callback = () ->)->
2018-08-04 12:30:24 -04:00
if !Settings.mailchimp?
2014-02-12 05:23:40 -05:00
logger.warn "No newsletter provider configured so not subscribing user"
return callback()
options = buildOptions(user, true)
2018-08-04 12:30:24 -04:00
logger.log options:options, user:user, email:user.email, "trying to subscribe user to the mailing list"
mailchimp.request options, (err)->
if err?
logger.err err:err, "error subscribing person to newsletter"
else
logger.log user:user, "finished subscribing user to the newsletter"
callback(err)
2014-02-12 05:23:40 -05:00
unsubscribe: (user, callback = () ->)->
2018-08-04 12:30:24 -04:00
if !Settings.mailchimp?
2014-02-12 05:23:40 -05:00
logger.warn "No newsletter provider configured so not unsubscribing user"
return callback()
logger.log user:user, email:user.email, "trying to unsubscribe user to the mailing list"
options = buildOptions(user, false)
2018-08-04 12:30:24 -04:00
mailchimp.request options, (err)->
if err?
logger.err err:err, "error unsubscribing person to newsletter"
else
logger.log user:user, "finished unsubscribing user to the newsletter"
callback(err)
2014-02-12 05:23:40 -05:00
2018-08-04 12:30:24 -04:00
hashEmail = (email)->
crypto.createHash('md5').update(email.toLowerCase()).digest("hex")
2014-02-12 05:23:40 -05:00
buildOptions = (user, is_subscribed)->
2018-08-04 12:30:24 -04:00
status = if is_subscribed then "subscribed" else "unsubscribed"
subscriber_hash = hashEmail(user.email)
opts =
method: "PUT"
path: "/lists/#{Settings.mailchimp?.list_id}/members/#{subscriber_hash}"
body:
status_if_new: status
status: status
email_address:user.email
merge_fields:
FNAME: user.first_name
LNAME: user.last_name
return opts