Skip to content
This repository has been archived by the owner on Apr 3, 2019. It is now read-only.

Commit

Permalink
fix(email): check case insensitive headers in EmailSent event (#1916)…
Browse files Browse the repository at this point in the history
  • Loading branch information
seanmonstar authored and vbudhram committed May 26, 2017
1 parent 43b8fd8 commit 23593c7
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 18 deletions.
54 changes: 36 additions & 18 deletions lib/email/utils/helpers.js
Expand Up @@ -4,23 +4,46 @@

const emailDomains = require('../../../config/popular-email-domains')

function getHeaderValue(headerName, message){
function getInsensitiveHeaderValueFromArray(headerName, headers) {
var value = ''
var headerNameNormalized = headerName.toLowerCase()
if (message.mail && message.mail.headers) {
message.mail.headers.some(function (header) {
if (header.name.toLowerCase() === headerNameNormalized) {
value = header.value
return true
}

return false
})
}
headers.some(function (header) {
if (header.name.toLowerCase() === headerNameNormalized) {
value = header.value
return true
}

return false
})

return value
}

function getInsensitiveHeaderValueFromObject(headerName, headers) {
var headerNameNormalized = headerName.toLowerCase()
var value = ''
Object.keys(headers).some(function (name) {
if (name.toLowerCase() === headerNameNormalized) {
value = headers[name]
return true
}

return false
})
return value
}

function getHeaderValue(headerName, message){
var headers = message.mail && message.mail.headers || message.headers
if (Array.isArray(headers)) {
return getInsensitiveHeaderValueFromArray(headerName, headers)
} else if (headers) {
return getInsensitiveHeaderValueFromObject(headerName, headers)
} else {
return ''
}
}

function logEmailEventSent(log, message) {
const emailDomain = getAnonymizedEmailDomain(message.email)
const emailEventInfo = {
Expand All @@ -30,13 +53,8 @@ function logEmailEventSent(log, message) {
type: 'sent'
}

if (message.headers && message.headers['X-Flow-Id']) {
emailEventInfo['flow_id'] = message.headers['X-Flow-Id']
}
if (message.headers && message.headers['Content-Language']) {
emailEventInfo.locale = message.headers['Content-Language']
}

emailEventInfo['flow_id'] = getHeaderValue('X-Flow-Id', message)
emailEventInfo.locale = getHeaderValue('Content-Language', message)

log.info(emailEventInfo)
}
Expand Down
61 changes: 61 additions & 0 deletions test/local/email/utils.js
@@ -0,0 +1,61 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

'use strict'

const assert = require('insist')
const emailHelpers = require('../../../lib/email/utils/helpers')
const spyLog = require('../../mocks').spyLog


describe('email utils helpers', () => {
describe('getHeaderValue', () => {

it('works with message.mail.headers', () => {
const message = {
mail: {
headers: [{
name: 'content-language',
value: 'en-US'
}]
}
}

const value = emailHelpers.getHeaderValue('Content-Language', message)
assert.equal(value, message.mail.headers[0].value)
})


it('works with message.headers', () => {
const message = {
headers: [{
name: 'content-language',
value: 'ru'
}]
}

const value = emailHelpers.getHeaderValue('Content-Language', message)
assert.equal(value, message.headers[0].value)
})

})

describe('logEmailEventSent', () => {
it('should check headers case-insensitively', () => {
const mockLog = spyLog()
const message = {
email: 'user@example.domain',
template: 'verifyEmail',
headers: {
'cOnTeNt-LaNgUaGe': 'ru'
}
}
emailHelpers.logEmailEventSent(mockLog, message)
assert.equal(mockLog.info.callCount, 1)
assert.equal(mockLog.info.args[0][0].locale, 'ru')
})

})

})

0 comments on commit 23593c7

Please sign in to comment.