codecombat/server/routes/mail.coffee

61 lines
1.9 KiB
CoffeeScript
Raw Normal View History

2014-01-24 14:48:00 -05:00
mail = require '../commons/mail'
map = _.invert mail.MAILCHIMP_GROUP_MAP
User = require '../users/User.coffee'
errors = require '../commons/errors'
2014-01-24 20:42:47 -05:00
#request = require 'request'
config = require '../../server_config'
2014-01-24 14:48:00 -05:00
2014-01-24 20:42:47 -05:00
#badLog = (text) ->
# console.log text
# request.post 'http://requestb.in/1brdpaz1', { form: {log: text} }
module.exports.setup = (app) ->
app.all config.mail.mailchimpWebhook, (req, res) ->
2014-01-24 14:48:00 -05:00
post = req.body
2014-01-24 20:42:47 -05:00
# badLog("Got post data: #{JSON.stringify(post, null, '\t')}")
unless post.type in ['unsubscribe', 'profile']
res.send 'Bad post type'
return res.end()
unless post.data.email
res.send 'No email provided'
return res.end()
2014-01-24 16:47:25 -05:00
query = {'mailChimp.leid':post.data.web_id}
User.findOne query, (err, user) ->
2014-01-24 15:23:14 -05:00
return errors.serverError(res) if err
if not user
2014-01-24 16:22:56 -05:00
return errors.notFound(res)
2014-01-24 15:39:05 -05:00
handleProfileUpdate(user, post) if post.type is 'profile'
handleUnsubscribe(user) if post.type is 'unsubscribe'
2014-01-24 15:23:14 -05:00
user.updatedMailChimp = true # so as not to echo back to mailchimp
user.save (err) ->
return errors.serverError(res) if err
2014-01-24 16:22:56 -05:00
res.end('Success')
2014-01-24 15:23:14 -05:00
2014-01-24 15:39:05 -05:00
handleProfileUpdate = (user, post) ->
groups = post.data.merges.INTERESTS.split(', ')
2014-01-24 15:23:14 -05:00
groups = (map[g] for g in groups when map[g])
2014-01-24 20:19:20 -05:00
otherSubscriptions = (g for g in user.get('emailSubscriptions') when not mail.MAILCHIMP_GROUP_MAP[g])
groups = groups.concat otherSubscriptions
2014-01-24 15:23:14 -05:00
user.set 'emailSubscriptions', groups
2014-01-24 20:19:20 -05:00
fname = post.data.merges.FNAME
user.set('firstName', fname) if fname
lname = post.data.merges.LNAME
user.set('lastName', lname) if lname
2014-01-24 20:35:34 -05:00
user.set 'mailChimp.email', post.data.email
user.set 'mailChimp.euid', post.data.id
2014-01-24 20:42:47 -05:00
# badLog("Updating user object to: #{JSON.stringify(user.toObject(), null, '\t')}")
2014-01-24 14:48:00 -05:00
2014-01-24 15:39:05 -05:00
handleUnsubscribe = (user) ->
2014-01-24 15:23:14 -05:00
user.set 'emailSubscriptions', []
2014-01-24 20:42:47 -05:00
# badLog("Unsubscribing user object to: #{JSON.stringify(user.toObject(), null, '\t')}")