mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-02-16 00:19:50 -05:00
Encode/decode emails as URIs
This helps to handle special characters like plusses.
This commit is contained in:
parent
fc4568a100
commit
d821e459d1
2 changed files with 13 additions and 8 deletions
|
@ -117,7 +117,8 @@ module.exports.setup = (app) ->
|
|||
)
|
||||
)
|
||||
|
||||
app.get '/auth/unsubscribe', (req, res) ->
|
||||
app.get '/auth/unsubscribe', (req, res) ->
|
||||
req.query.email = decodeURIComponent(req.query.email)
|
||||
email = req.query.email
|
||||
unless req.query.email
|
||||
return errors.badInput res, 'No email provided to unsubscribe.'
|
||||
|
@ -131,7 +132,7 @@ module.exports.setup = (app) ->
|
|||
return errors.serverError res, 'Database failure.' if err
|
||||
res.send "Unsubscribed #{req.query.email} from CodeCombat emails for #{session.levelName} #{session.team} ladder updates. Sorry to see you go! <p><a href='/play/ladder/#{session.levelID}#my-matches'>Ladder preferences</a></p>"
|
||||
res.end()
|
||||
|
||||
|
||||
User.findOne({emailLower: req.query.email.toLowerCase()}).exec (err, user) ->
|
||||
if not user
|
||||
return errors.notFound res, "No user found with email '#{req.query.email}'"
|
||||
|
@ -146,6 +147,7 @@ module.exports.setup = (app) ->
|
|||
else if req.query.employerNotes
|
||||
emails.employerNotes ?= {}
|
||||
emails.employerNotes.enabled = false
|
||||
|
||||
msg = "Unsubscribed #{req.query.email} from employer emails."
|
||||
else
|
||||
msg = "Unsubscribed #{req.query.email} from all CodeCombat emails. Sorry to see you go!"
|
||||
|
|
|
@ -21,13 +21,13 @@ setupScheduledEmails = ->
|
|||
testForLockManager()
|
||||
mailTasks = [
|
||||
taskFunction: candidateUpdateProfileTask
|
||||
frequencyMs: 30 * 60 * 1000 #30 minutes
|
||||
frequencyMs: 10 * 60 * 1000 #10 minutes
|
||||
,
|
||||
taskFunction: internalCandidateUpdateTask
|
||||
frequencyMs: 10 * 60 * 1000 #10 minutes
|
||||
,
|
||||
taskFunction: employerNewCandidatesAvailableTask
|
||||
frequencyMs: 30 * 60 * 1000 #30 minutes
|
||||
frequencyMs: 10 * 60 * 1000 #10 minutes
|
||||
]
|
||||
|
||||
for mailTask in mailTasks
|
||||
|
@ -48,7 +48,7 @@ candidateUpdateProfileTask = ->
|
|||
end: generateWeekOffset currentDate, weekPair[1]
|
||||
name: weekPair[2]
|
||||
lockManager.setLock mailTaskName, lockDurationMs, (err) ->
|
||||
if err? then return log.error "Error getting a distributed lock for task #{mailTaskName}!"
|
||||
if err? then return log.error "Error getting a distributed lock for task #{mailTaskName}: #{err}"
|
||||
async.each timeRanges, emailTimeRange.bind({mailTaskName: mailTaskName}), (err) ->
|
||||
if err
|
||||
log.error "There was an error sending the candidate profile update reminder emails: #{err}"
|
||||
|
@ -108,6 +108,8 @@ sendReminderEmailToCandidate = (candidate, sendEmailCallback) ->
|
|||
if err?
|
||||
log.error "There was an error finding employers who signed up after #{candidate.jobProfile.updated}: #{err}"
|
||||
return sendEmailCallback err
|
||||
if employersAfterCount < 2
|
||||
employersAfterCount = 2
|
||||
context =
|
||||
email_id: "tem_CtTLsKQufxrxoPMn7upKiL"
|
||||
recipient:
|
||||
|
@ -117,6 +119,7 @@ sendReminderEmailToCandidate = (candidate, sendEmailCallback) ->
|
|||
new_company: employersAfterCount
|
||||
company_name: "CodeCombat"
|
||||
user_profile: "http://codecombat.com/account/profile/#{candidate._id}"
|
||||
recipient_address: encodeURIComponent(candidate.email)
|
||||
log.info "Sending #{@timeRange.name} update reminder to #{context.recipient.name}(#{context.recipient.address})"
|
||||
newSentMail =
|
||||
mailTask: @mailTaskName
|
||||
|
@ -135,7 +138,7 @@ internalCandidateUpdateTask = ->
|
|||
mailTaskName = "internalCandidateUpdateTask"
|
||||
lockDurationMs = 2 * 60 * 1000
|
||||
lockManager.setLock mailTaskName, lockDurationMs, (err) ->
|
||||
if err? then return log.error "Error getting a distributed lock for task #{mailTaskName}!"
|
||||
if err? then return log.error "Error getting a distributed lock for task #{mailTaskName}: #{err}"
|
||||
emailInternalCandidateUpdateReminder.call {"mailTaskName":mailTaskName}, (err) ->
|
||||
if err
|
||||
log.error "There was an error sending the internal candidate update reminder.: #{err}"
|
||||
|
@ -207,7 +210,7 @@ employerNewCandidatesAvailableTask = ->
|
|||
mailTaskName = "employerNewCandidatesAvailableTask"
|
||||
lockDurationMs = 2 * 60 * 1000
|
||||
lockManager.setLock mailTaskName, lockDurationMs, (err) ->
|
||||
if err? then return log.error "There was an error getting a task lock!: #{err}"
|
||||
if err? then return log.error "Error getting a distributed lock for task #{mailTaskName}: #{err}"
|
||||
emailEmployerNewCandidatesAvailable.call {"mailTaskName":mailTaskName}, (err) ->
|
||||
if err
|
||||
log.error "There was an error completing the new candidates available task: #{err}"
|
||||
|
@ -249,7 +252,6 @@ makeEmployerNamesEasilyAccessible = (allEmployers, cb) ->
|
|||
|
||||
employersEmailedDigestMoreThanWeekAgoFilter = (employer, cb) ->
|
||||
if employer.emails?.employerNotes?.enabled is false
|
||||
log.info "Employer #{employer.name}(#{employer.email}) opted out of emails, not sending to them."
|
||||
return sentEmailFilterCallback true
|
||||
findParameters =
|
||||
"user": employer._id
|
||||
|
@ -286,6 +288,7 @@ sendEmployerNewCandidatesAvailableEmail = (employer, cb) ->
|
|||
new_candidates: numberOfCandidatesSinceLogin
|
||||
employer_company_name: employer.employerAt
|
||||
company_name: "CodeCombat"
|
||||
recipient_address: encodeURIComponent(employer.email)
|
||||
if employer.name
|
||||
context.recipient.name = employer.name
|
||||
log.info "Sending available candidates update reminder to #{context.recipient.name}(#{context.recipient.address})"
|
||||
|
|
Loading…
Reference in a new issue